-> 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:
SoThe ls uses st_size while du uses st_blocks.
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 ..
Are you using the same hard disk with same disk block size ?try using the ls -ls it will give you both the o/p's .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 .ThanksManishOn 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