在 ext3 和 XFS 上使用备用数据和漏洞创建稀疏文件

发布于 2024-11-28 06:24:25 字数 984 浏览 1 评论 0原文

我创建了 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

怪我太投入 2024-12-05 06:24:25

稀疏文件只是空间的一种优化,任何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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文