Re: Creating sparse file on XFS and EXT3 has different results

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Dear Mani,

-> It depends upon the actual disk block size not the file system block size ..

I think that it always depends on the file-system block size.
A disk block size will always less than or equal to File system block size.
For example, say a FS X has block size 2K and disk block size =512.
So, when you create a 1 byte file, file_size = 1byte and disk blocks =4.
Now, if another FS Y has block size 4K and you create a 1 byte file then :-
file_size = 1 byte and disk blocks= 8.

On Mon, Aug 8, 2011 at 12:46 PM, mani <manishrma@xxxxxxxxx> wrote:
The ls uses st_size while du uses st_blocks.
So
st_size "file size in bytes"
st_blocks "number of 512 byte blocks allocated".
It depends upon the actual disk block size not the file system block size ..
try using the ls -ls it will give you both the o/p's .

Are you using the same hard disk with same disk block size ?


On Sat, Aug 6, 2011 at 9:51 PM, mani <manishrma@xxxxxxxxx> wrote:
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@xxxxxxxxx> 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@xxxxxxxxxxxxxxxxx
http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies




_______________________________________________
Kernelnewbies mailing list
Kernelnewbies@xxxxxxxxxxxxxxxxx
http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies

[Index of Archives]     [Newbies FAQ]     [Linux Kernel Mentors]     [Linux Kernel Development]     [IETF Annouce]     [Git]     [Networking]     [Security]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux RAID]     [Linux SCSI]     [Linux ACPI]
  Powered by Linux