我已经使用 GParted 调整了较大驱动器的分区大小。
我可不可以做
sudo dd if=/dev/LargerDrive of=/dev/SmallDrive
?
答案1
是的,只要分区适合,就不需要通过 dd 调整大小。
即驱动器的大小不是问题。
(请注意,以下所有操作都应通过启动原始安装 DVD 并使用 LiveCD 选项来完成,这样就不会安装相关的驱动器。)
这是一个过于简单化的答案,我要么从未使用过 gparted 来调整分区大小,要么曾经使用过,但现在又再次这样做以将其恢复到原来的大小。
例如,如果您将 160 GB 驱动器 (/dev/sda) 复制到 750 GB 驱动器 (/dev/sdb) - 我这样做是为了在 7200 rpm 驱动器上更快地启动。您可能只是为了备份而这样做。
/dev/sda(160GB 启动驱动器)插入 SATA 端口 0
/dev/sdc DVD 驱动器位于 SATA 端口 1
/dev/sdb(750 GB 驱动器)插入 SATA 端口 2
从收集信息开始
sudo fdisk -l
/dev/sda 是您的原始带有分区的 160 GB 驱动器。
那么理想情况下,它将显示 /dev/sdb 没有分区表。
如果 /dev/sdb 显示分区但您仍然想使用它,则可以使用以下命令从中擦除 MBR 和分区表:
sudo dd if=/dev/urandom of=/dev/sdb bs=512 count=24
这肯定会擦除 MBR 和分区表。
它看起来就像是一个新的空白驱动器。
继续将启动驱动器备份到更大的驱动器:
sudo dd if=/dev/sda of=/dev/sdb
这需要一些时间。我写这篇文章时距离你发布这个问题已经过去了三年,我的备份花了 8000 秒(大约 2.5 小时)。
就我而言,我随后移除了原始启动驱动器并将其放在一边作为备份。这样我的系统就会从它找到的第一个硬盘驱动器启动,即 SATA 端口 2 上的 750。
但在您的情况下,您要移除 750 并将其放在一边作为备份,从而为具体回答您的问题奠定基础。
然后——更详细地谈谈你的问题:
假设你的启动驱动器出现故障,或者你决定像我刚才那样用 160 GB 的 SSD 驱动器替换它。我没有使用 750 GB 驱动器的更多空间。它仍然只包含之前的原始 160 GB 分区
新的 SSD 也是 160 GB(eBay 上售价 50 美元),因此足够大来容纳分区。
原来的 /dev/sdb 仍然插在和以前相同的主板 SATA 插槽中,所以现在我将 SSD 插入 SATA 端口 0,SSD 现在为 /dev/sda
(/dev/sdc 是我正在启动的 LiveCD)
打开终端窗口并检查:
sudo fdisk -l
验证 160 GB (/dev/sda) 是否没有分区表。如果有,您可以使用以下命令从中擦除 MBR 和分区表:
sudo dd if=/dev/urandom of=/dev/sdb bs=512 count=24
然后继续 dd:
dd if=/dev/sdb of=/dev/sda
(所需时间与以前相同——几个小时)
确保彻底关闭 liveCD。
sudo init 0
它将弹出 CD,然后提示您按回车键,以便它可以清除剩余的缓冲区。
删除 750,即 /dev/sdb。
瞧,它现在可以正常启动到较小的驱动器,因为分区的大小允许它适合。
如果你像我一样对 SSD 执行此操作,请在启动前系好安全带。它的速度非常快,你甚至还没来得及喝完咖啡,它就会要求你输入密码。
在我的特定情况下,我选择将 750 HDD 保留为辅助驱动器,并通过 UUID 在 /mnt 下的 fstab 中安装该驱动器以进行备份和数据收集。
就是这样。这是 2017 年 7 月使用 Ubuntu 14.04 Install/LiveCD 的答案
答案2
不,这样做是不行的,如果你这样做,你会丢失数据。问题基本上是数据不一定存储在磁盘的第一部分。dd / cat 从头到尾复制。包括文件系统的空白区域。
如果这样做,dd/cat 将仅从源复制目标文件系统的大小。如果磁盘的最后区域有任何数据,这可能会成为一个问题,此外磁盘副本上的文件系统数据也将不正确。
但是,如果您只对存储在磁盘第一部分的数据感兴趣 - 例如启动/根分区,那么这样做可能没问题。(我以前曾这样做过,例如使用 iso 映像中的启动分区)。
如果您的数据适合较小的磁盘,那么一个选项是调整较大磁盘上的文件系统大小。该过程如下:
0) 备份分区表(使用 p 打印出 fdisk 数据并将其保存到文件中)。如果您删除了磁盘分区,只要您不格式化磁盘,就可以按照与之前完全相同的方式重新分区磁盘并恢复大部分(如果不是全部)数据。如果您想将较大的磁盘备份到较小的磁盘上,一种选择可能是将源分区 dd/cat 到 iso 文件中,然后放到较小的驱动器上 - 如果合适。如果您的所有源分区都小于目标驱动器,则可以进行这样的备份。
1)彻底卸载驱动器,包括所有分区。
2)e2fsck 分区以确保没有错误。
3)resize2fs源磁盘上的分区。
4)将分区缩小到包含数据的适当大小(删除并重新创建原始分区)。不要改变任何源分区的起始位置。改变分区的起点是危险的,因为数据会留在同一个地方,但是相对于分区起始位置的相对偏移量不会保持不变,这样做的后果是整个分区可能变得无法读取。分区之间有间隙是可以的,操作系统并不介意。
5)对目标磁盘进行分区,使得分区与源分区大小相同。
6)将源分区 dd 或 cat 到目标分区上。
7)e2fsck 目标分区。
8)祈祷。
这是一个非常危险的过程,我不推荐这样做。特别是如果没有源磁盘的备份。话虽如此,我喝醉后做过更糟糕的事情,而且我仍然在这里,还有我的大部分数据。
在执行此操作之前,请先使用一些消耗性数据进行练习。
概括:通过调整文件系统的大小,您可以强制将数据集中在一起并挤出每个分区上的空白空间,然后您可以在驱动器之间复制数据,使用 dd 或 cat 一次复制一个分区,然后使用目标系统上的文件系统检查,您应该能够解决分区上的任何异常。实际上,您必须有比查克·诺里斯更大的勇气才能尝试这样的事情。
答案3
视情况而定。(假设您要复制整个驱动器及其所有分区,而不仅仅是单个分区。)
当然,大磁盘末尾的“剩余”空间不能被分区占用,否则数据就放不下。因此,正如您已经做的那样,您需要调整分区大小并将其移动到驱动器的开头。
第二个要考虑的因素是分区表。msdos
分区表位于驱动器的起始位置。因此,一旦您处理好分区大小,dd
复制驱动器并删除未使用的空间就可以了。我已经用这种方法成功复制了几个驱动器。
如果涉及分区表,情况会稍微复杂一些gpt
。在这种情况下,分区表存储在两个位置:驱动器的开头和结尾。如果新驱动器太小,末尾的副本将丢失——我试过,但之后 GParted 无法识别目标驱动器上的任何分区。对我而言,有效的方法是首先gpt
在目标驱动器上创建一个新的分区表(使用 GParted),然后使用 GParted 复制各个分区。这样,GParted 将负责更新分区表条目。
答案4
是的,但是如果您只是复制分区,则需要指定分区。
因此,如果较大驱动器上的分区号为 1,则
sudo dd if=/dev/LargerDrive1 of=/dev/SmallDrive bs=4M
您可以为小驱动器提供一个编号,以决定是否要将其覆盖现有分区。
另外,考虑在命令中添加块大小,以加快速度。