我想知道我是否有一个表观大小为 1 GiB 但实际大小为 0 B 的文件是否可以复制到例如具有 512 kiB 可用空间的 USB 闪存盘?
您可以使用以下方法创建文件:
dd if=/dev/null of=big-file bs=1 seek=1GiB
现在您可以看到表观尺寸和实际尺寸:
du --apparent-size -hs big-file
注意:删除--apparent-size
选项以获取实际大小。
所以,主要问题是:将文件复制到某个目录时,考虑的是哪个大小,是硬盘驱动器、USB 闪存棒、DVD 等?
实际尺寸。
的目标文件。
最简单的实现是不要尝试提前预测这一点。
除此之外,还需要一小部分作为开销。这种开销将更加难以预测。
对稀疏文件的支持各不相同,具体取决于文件系统和制作副本的程序。最值得注意的是,FAT 文件系统不支持稀疏文件。
GNU
cp
自动检测和处理稀疏文件。它不会提前检查空间。(基于 GNU coreutils 8.29 的文档)请注意,文件系统可以有不同的块大小。这会导致稀疏文件使用的空间量增加,甚至减少!
(写入文件数据通常还需要占用自己空间的内部文件系统结构。这不会显示在文件大小中 - 既不是实际大小也不是表观大小。在传统的 UNIX 文件系统设计中,您还需要一个空闲的 inode。空间可用的 inode 显示为
df -i
。最明显的是,您需要一些空间来存储文件名 :-) ;这通常显示在父目录的大小中。这在问题中具体讨论了我可以通过创建大量空文件来耗尽磁盘空间吗?)