问题描述
我的计算机上有两个具有以下配置的驱动器:
Drive 1: 160GB, /home
Drive 2: 40GB, /boot and /
不幸的是,驱动器 2 似乎快要死了,因为尝试写入它会给我带来错误,并且检查 SMART 设置显示了一种可悲的事态。
我在驱动器 1 上有足够的空间,所以我想做的是将 /和 /boot 分区移到它,从系统中删除驱动器 2,用新驱动器替换驱动器 2,然后反转该过程。
我想我需要对 grub 进行一些更新,并且我需要移动一些东西,但我很困惑如何准确地做到这一点。由于这是我的主计算机,所以我要小心不要把事情搞砸,所以我无法启动。
最佳办法
您需要从 live cd 启动。为它们添加分区到磁盘1,将所有内容复制过来,然后使用sudo blkid
获取每个分区的UUID。在磁盘 1 的新 /上,编辑 /etc/fstab 以使用您刚刚查找的新 UUID。
更新 GRUB 取决于它是 GRUB1 还是 GRUB2。如果是 GRUB1,则需要编辑 /boot/grub/device.map
如果是 GRUB2,我认为您需要像在真实情况下那样挂载您的分区。例如:
sudo mkdir /media/root
sudo mount /dev/sda1 /media/root
sudo mount /dev/sda2 /media/root/boot
sudo mount /dev/sda3 /media/root/home
(当然,填写您将内容复制到的任何实际分区)
然后在/media/root下绑定mount /proc和/dev:
sudo mount -B /proc /media/root/proc
sudo mount -B /dev /media/root/dev
sudo mount -B /sys /media/root/sys
现在 chroot 进入驱动器,这样您就可以强制 GRUB 根据新布局自行更新:
sudo chroot /media/root
sudo update-grub
第二个命令会发出一个抱怨(虽然我忘记了它是什么……),但可以忽略。
通过移除坏驱动器来测试它。如果它不起作用,坏驱动器应该仍然能够引导系统,但我相信这些都是必要的步骤。
次佳办法
如果您立即更换驱动器,则可以使用 dd
(几个月前在我的服务器上尝试过,效果很好)。
为此,您还需要一个 boot-CD。
-
开始 boot-CD
-
仅安装驱动器 1
-
运行
dd if=/dev/sdb1 of=/media/drive1/backuproot.img
– sdb1 作为您的根 (/
) 分区。这会将整个分区保存在一个文件中。-
/boot
相同
-
-
关机,更换磁盘,开机
-
运行
dd if=/media/drive1/backuproot.img of=/dev/sdb1
– 将其写回。-
/boot
相同
-
以上将创建 2 个分区,其大小与以前完全相同。您可能需要调整 grub(查看 macos 帖子)。
如果您想调整分区大小(就像我一样):
-
在新驱动器上创建 2 个分区(用于
/
和/boot
;大小随意) -
安装 backup-image:
mount /media/drive1/backuproot.img /media/backuproot/
-
挂载空的
/
分区:mount /dev/sdb1 /media/sdb1/
-
将其内容复制到新分区(我不确定这个命令,保留所有权非常重要,
cp -R
不会这样做!)cp -R --preserve=all /media/backuproot/* /media/sdb1
-
/boot/
相同
-
这应该这样做。
第三种办法
我对此的最终解决方案是结合了多种技术:
-
我同时将垂死的驱动器及其替换件连接到计算机。
-
新驱动器比旧驱动器小,所以我使用 GParted 缩小了旧驱动器上的分区。
-
之后,我复制了旧驱动器上的分区,并将它们粘贴到新驱动器上(也使用 GParted)。
-
接下来,我将引导标志添加到新驱动器上的正确分区,因此它实际上是旧驱动器的镜像。
这一切都很好,但我需要按照 here 的说明更新 grub2。
在这一切完成之后,事情似乎奏效了。