我正在尝试使用命令克隆磁盘dd
。我的输入磁盘大小为 1Tb,仅填充了 10%。我的输出磁盘大小为 300Gb,这比我预期的克隆大小要大。
但在我的克隆结束后,我看到了此消息:
No space left on device
。
这有点奇怪,1TB 的 10% 填满了 300GB 的空间。有人能解释一下为什么会发生这种情况吗?我的数据损坏了吗?
答案1
如果您的输入设备(if=
)大小为 1TB,那么我们的输出文件(of=
)也将是 1TB。
dd
是一个非常低级的工具,它只是将所有字节从输入流复制到输出流,而不管数据是什么,甚至不管数据是否已分配。这甚至包括空(0x00
)扇区和包含垃圾的扇区。它不关心代表“文件”、“目录”等的高级数据结构。
如果您的目标是获得 1TB 磁盘的精确逐字节克隆,那么您将需要通过压缩算法传输数据,以便bzip2
将其放入较小的磁盘中。
如果您的目标只是备份数据,那么dd
这不是合适的工具。您需要使用tar
或其他存档工具。
答案2
dd 直接复制底层磁盘,而不是文件系统。它不知道已分配的块或未使用的空间。
如果你只想捕获文件系统,并且它是一个未挂载的 Linux EXTx 文件系统,我建议使用以下命令将其缩小到最小大小(必须先卸载并进行 fsck)
resize2fs -M /dev/sd??
然后将文件系统所在的分区复制到备份磁盘上。
要将最成熟的茎恢复到其原始大小(恢复可用空间),请运行
resize2fs /dev/Ed??
更好的是,使用像 tar 这样的文件系统感知存档工具。
答案3
1Tb 的 10% 填满了 300Gb 的空间,这有点奇怪。
没有。100%1TB 已经占满了 300GB 的空间,但是我还想要更多。
可以把它想象成一本有 100 页的笔记本,前 10 页有笔记。如果你把笔记本放在复印机上,复印整本书,你最终会得到 100 页新内容。即使其中大部分都是空白的。
使用 dd 是 RAW 副本。它不会复制正在使用的数据。为此,您需要某种能够理解已填充页面和仅包含空行的页面之间的区别的工具。
谁能解释一下这件事?为什么会发生这种情况?我的数据损坏了吗?
不,你只是下令做一些你想做的事情。