如何使用命令行修剪文件?

bad*_*adp 18 dd sparse-files files

以下 Python 代码的控制台等效项是什么:

target = file("disk", "w")    # create a file
target.seek(2*1024*1024*1024) # skip to 2 GB
target.write("\0")
target.close()
Run Code Online (Sandbox Code Playgroud)

也许一些dd咒语?这个想法是制作一个表观大小为 2 GB 的文件,用于例如虚拟化。

kvm disk -cd whatever.iso #Only allocate space as necessary
Run Code Online (Sandbox Code Playgroud)

Chr*_*own 14

您可以使用以下命令创建一个稀疏文件dd

dd of=file bs=1 seek=2G count=0
Run Code Online (Sandbox Code Playgroud)
$ du file
0       disk
$ du --apparent-size file
2097152 disk
Run Code Online (Sandbox Code Playgroud)

  • 此外,`2G` 是 `dd` 的 GNU 扩展。如果你没有 GNU `dd`,你可以使用 `bs=1024 seek=2097152`。 (4认同)

ger*_*ijk 8

一般来说,只需使用dd; 但是当您提到使用 KVM 虚拟化时,您可能会考虑使用qemu-img

qemu-img create -f raw disk 2G
Run Code Online (Sandbox Code Playgroud)

dd与 Chris Down 的回答中的命令有效地执行相同的操作。

无论您使用什么命令,为了在虚拟化中使用,我强烈建议使用fallocate预分配块以防止碎片并提高性能。

fallocate -l 2G disk
Run Code Online (Sandbox Code Playgroud)

但是,它并非在所有平台和文件系统上都可用。这不会写入零,而只是将块分配给文件,而不是在每次必须扩展文件时按需执行。

  • `qemu-img` 和 `dd` 都执行 **one** 系统调用来设置文件大小 (ftruncate),但会执行更多操作来加载它们自己和它们链接到的库。并且,在这方面,`dd` 将比 `qemu-img`(它更大并且链接到更多的库)更有效。GNU `truncate` 将会更加有效。`dd` 还具有无处不在的优势。不过,关于“fallocate”的好点子。 (2认同)

Sté*_*las 7

另请参阅 GNUtruncate命令:

truncate -s 2G some-file
Run Code Online (Sandbox Code Playgroud)