如何为指定文件创建具有精确大小的 ext4 图像

How to create ext4 image with exact size for specified files

我必须准备一个包含所提供目录内容的 ext4 映像。图像的大小应刚好超过要求 space.

我的程序是检查目录内容的大小,然后使用 dd 创建一个带有一些额外 space 的空映像,最后使用 mkfs.ext4' with the-d` 标志创建 ext4 文件系统提供要写入的文件。

# check size in kB (in my case it's 27700)
size=$( du -sk ./trg | awk '{print  }')
# add extra 1000kB
extra="1000"
# create empty file with dd
dd if=/dev/zero of=out.dd seek=$size bs=1024 count=$extra
# create filesystem
mkfs.ext4 -F out.dd -d ./trg

我预计图像的大小为 27700+1000,所以所有内容都应该适合 28700kB,但输出图像比预期小得多:

$ du -sk ./*
26340   ./out.dd
4   ./test.sh
27700   ./trg

我错过了什么?这个 space 丢失在哪里?

du -sk 以千字节为单位打印磁盘使用情况。磁盘使用量不是实际文件大小,而是它在磁盘上所占的位置。这意味着稀疏字节(空白)在磁盘上占用的空间 space 可能少于它们的数量。

如果您希望du打印实际数据大小而不是磁盘使用情况:

使用--apparent-size选项:

--apparent-size
print apparent sizes, rather than disk usage; although the apparent size is usually smaller, it may be larger due to holes in ('sparse') files, internal fragmentation, indirect blocks, and the like