如何为指定文件创建具有精确大小的 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
我必须准备一个包含所提供目录内容的 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