代替の空のブロックとデータブロックを含む疎なファイルを作成するための1つのプログラムを作成しました。 は、例えばBLOCK1 =空、BLOCK2 =データ、BLOCK3 =空.....ext3とXFSの代替データと穴を持つ疎なファイルを作成する
#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;
}
と仮定するため、私はこの上記のコードを使用してnew_sparse_fileを作成します。
ブロックサイズ4KBのext3 FSで、ls -lh
はnew_sparse_fileのサイズを16KBと表示しますが、du -h
は8KBですが、正しいと思います。
xfsでは、ブロックサイズは4kb、ls -lh
は16KBですが、 `du -h *は12kbです。
なぜさまざまな種類の動作がありますか?
ファイルの200メガバイトが書かれているように、私はBLOCK_COUNTを増加させました。 ls -lhは両方のFSに対して200MBを表示しますが、du -hはXFSで187MB、ext3で100MBを示します。いくつかの違いは、ファイルの断片化とファイルのアクセス速度を最適化するには? – Anon
4kbの最小サイズのブロックで多くを埋めるのではなく、ブロックサイズを増やしてください。 '#define BLOCK_SIZE 4096'を' #define BLOCK_SIZE(4096 * 32) 'に変更することを意味します。 – osgx
はい、ブロックサイズを増やすことはできますが、1ブロックホール、1ブロックデータ、1ブロックホール、1ブロックデータがあるようなファイルは作成されません。 ..系列のタイプ。 – Anon