当使用“dd”命令将 ext4 分区克隆到更大的分区时,可用空间不会增加

Pio*_*taj 7 ext4 disk dd

可能重复:
驱动器报告不正确的可用空间

最近我一直在尝试使用 dd 工具克隆我的高清。一切正常,因为克隆了 ntfs 分区,但是当涉及到 ext4 时 - dd 做了一件奇怪的事情。例如。有 12GB 分区和 4GB 可用空间,当我尝试在新的 25GB 分区上克隆它时,它确实克隆了它,但以前是 12GB 的数据,现在是 21GB 和 4GB(可用空间量仍然与它相同)旧分区)。每次我克隆我的 home 和 root 分区(ext4)时都会发生这种情况。我还试图将新分区的大小降低到旧分区的大小,但是 dd 以错误结束,说没有足够的空间,这应该足够了......

任何人?这是怎么回事?

Joh*_*ber 13

我假设你正在做这样的事情:

sudo dd if=/dev/sda98 of=/dev/sda99
Run Code Online (Sandbox Code Playgroud)

其中 /dev/sda98 的大小为 12GB,/dev/sda99 的大小为 25GB。

显然这些名字是错误的,但你明白了。

您所做的不仅是将数据,而且是将整个文件系统(包括描述免费内容和已使用内容的所有元数据)移动到新分区。它有很多可用空间,但该可用空间尚未合并到 /dev/sda99 上的文件系统中,因此它隐藏在分区的末尾并且完全无法使用。

解决方案是调整位于分区中的文件系统的大小:

sudo resize2fs /dev/sda99
Run Code Online (Sandbox Code Playgroud)

它适用于 EXT2、EXT3 和 EXT4 文件系统。

我鼓励您先进行备份,但我假设您仍保留原始分区中的数据。

这将告诉文件系统扩展到分区上的所有可用空间,将新空间合并到文件系统的元数据中,以便文件可以存储在其中。

dd除非您使用 count 参数告诉它只复制这么多,否则您无法将较大的分区复制到较小的分区。dd将源分区中的所有内容逐位复制到目标分区,在这种情况下,它尝试将所有隐藏/不可见空间与原始内容一起复制到较小的分区。它不知道或不关心它在复制什么——它根本不需要是一个有效的文件系统。