![“dd”命令磁盘副本保留旧大小](https://linux22.com/image/201106/%E2%80%9Cdd%E2%80%9D%E5%91%BD%E4%BB%A4%E7%A3%81%E7%9B%98%E5%89%AF%E6%9C%AC%E4%BF%9D%E7%95%99%E6%97%A7%E5%A4%A7%E5%B0%8F.png)
我最近升级了我的家庭服务器,想将我的云盘从600GB增加到2TB。经过一番研究,我发现 dd 命令可以完全复制磁盘,在我的情况下,这似乎是一个不错的选择,因为我将 nextcloud 实例的 docker 和数据库的所有数据都存储在同一个磁盘上。
我成功地将新磁盘复制并安装到我的计算机中,并且我的所有数据仍然完好无损。我的云像往常一样出现。我现在看到的唯一问题是新分区是 600GB,而不是 2TB(这是我所期望的)。在仪表板中,我的主磁盘也被列为 600GB。
我猜想通过克隆磁盘,我也克隆了磁盘,认为它仍然更小。当我检查时,df -h
我看到磁盘在 /dev/sde1 上显示为 600GB 磁盘,但当我使用时,lsblk
我看到 sde `- sde1 显示为 1.8T(这是我所期望的)。
如何修复 /dev/sde1 以使用完整的 1.8TB?我用来将旧磁盘复制到新磁盘的命令是sudo dd if=/dev/sde1 of=/dev/sdk1 bs=4M status=progress
使用正确的 if 和 to 属性。
先感谢您 :)。
答案1
“dd”进程复制分区中的每一位,包括描述其启动和停止位置的文件系统元数据。它还复制每个未使用的位。没错,您只是浪费了很多时间来复制未使用的扇区。此外,每个坏块(这将导致它出错而不是继续,除非您添加一个标志来忽略错误)。它将使用相同的块大小并写入它,无论它是否与其所在的硬件不一致。总而言之,dd
这是一个将文件系统上的数据复制到另一个磁盘的糟糕工具。你应该创建一个新的磁盘上的文件系统,其分区与磁盘几何形状对齐,并且块大小针对磁盘类型进行了优化。然后你可以复制只是文件系统上的数据,包括 tar、rsync、转储/恢复等。
答案2
据我所知,这仅意味着分区本身中的文件系统仍然使用其旧大小。在 Linux 上调整磁盘大小时,大多数情况下必须调整两次。首先在分区方案(例如 GPT 或 MBR)中使用parted
或之类的命令fdisk
,然后在文件系统中使用resize2fs
.第二步很大程度上取决于所使用的文件系统,如果您使用 zfs 或 btrfs 等,则可能需要另一个命令。