在 ext3 和 XFS 上使用备用数据和漏洞创建稀疏文件
我创建了 1 个程序来创建稀疏文件,其中包含备用空块和数据块。 例如 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;
}
假设,我使用上面的代码创建一个 new_sparse_file 。
当我运行这个程序时,在块大小为 4KB 的 ext3 FS 上,ls -lh
显示 new_sparse_file 的大小为 16KB,而 du -h
显示 8 kb,我认为是正确的。
在 xfs 上,块大小为 4kb,ls -lh
显示 16KB,但 `du -h* 显示 12kb。
为什么会有不同类型的行为?
I created 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?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
这是 XFS 中的一个错误:
http://oss.sgi.com/档案/xfs/2011-06/msg00225.html
This is a bug in XFS :
http://oss.sgi.com/archives/xfs/2011-06/msg00225.html
稀疏文件只是空间的一种优化,任何FS都不可能通过创建稀疏文件来优化文件碎片和文件访问速度。因此,您不能依赖某些 FS 上文件的空闲程度。
因此,XFS 上的 12kb 也是正确的。
Sparse files is just an optimization of space, and any FS may not to create a sparse file to optimize file fragmentation and file access speed. So, you can't depend on how spare the file will be on some FS.
So, 12kb on XFS is correct too.