Creating sparse file on XFS and EXT3 has different results

mani manishrma at gmail.com
Sat Aug 6 12:21:11 EDT 2011


Dear Ashish,

The ls uses st_size while du uses st_blocks.
try using the ls -ls it will give you both the o/p's .

Thanks
Manish

On Fri, Aug 5, 2011 at 7:45 AM, Ashish Sangwan <ashishsangwan2 at gmail.com>wrote:

> I write 1 program to create sparse file which contains alternate empty
> blocks and data blocks. For example block1=empty, block2=data, block3=empty
> .....
>
> #define BLOCK_SIZE 4096
> void *buf;
> int main(int argc, char **argv)
> {
> buf=malloc(512);
> memset(buf,"a",512);
> int fd=0;
> int i;
> int sector_per_block=BLOCK_SIZE/512;
> int block_count=4;
> if(argc !=2 ){
>         printf("Wrong usage\n USAGE: program absolute_path_to_write\n");
>         _exit(-1);
> }
> fd=open(argv[1],O_RDWR | O_CREAT,0666);
> if(fd <= 0){
>         printf("file open failed\n");
>         _exit(0);
> }
> while(block_count > 0){
>         lseek(fd,BLOCK_SIZE,SEEK_CUR);
>         block_count--;
>         for(i=0;i<sector_per_block;i++)
>         write(fd,buf,512);
>         block_count--;
> }
> close(fd);
> return 0;
> }
>
> Suppose, I create a new_sparse_file using this above code.
>
> When I run this program, on ext3 FS with block size 4KB, ls -lh shows size
> of new_sparse_file as 16KB, while du -h shows 8 kb, which, I think is
> correct.
>
> On xfs, block size of 4kb, ls -lh shows 16KB but du -h shows 12kb.
> Why are there different kinds of behavior?
>
> If I increase the block_count to be written so that a 200MB file is
> created, on XFS du -h shows 187MB and on EXT3 it shows 101MB.
>
> _______________________________________________
> Kernelnewbies mailing list
> Kernelnewbies at kernelnewbies.org
> http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.kernelnewbies.org/pipermail/kernelnewbies/attachments/20110806/935a6479/attachment.html 


More information about the Kernelnewbies mailing list