![将多重启动系统迁移到更大的磁盘而无需重新安装](https://linux22.com/image/190349/%E5%B0%86%E5%A4%9A%E9%87%8D%E5%90%AF%E5%8A%A8%E7%B3%BB%E7%BB%9F%E8%BF%81%E7%A7%BB%E5%88%B0%E6%9B%B4%E5%A4%A7%E7%9A%84%E7%A3%81%E7%9B%98%E8%80%8C%E6%97%A0%E9%9C%80%E9%87%8D%E6%96%B0%E5%AE%89%E8%A3%85.png)
我想用更大的系统驱动器替换我的系统驱动器,并且不想重新安装主操作系统 (OpenSUSE) 或 Windows(尽管很少使用)。安装 Windows 和 Suse 似乎需要很长时间,而且我不想为 Suse 安装重建我的首选项和自定义设置。
其他可启动系统对于测试来说是短暂的,因此它们的损失微不足道。我的系统在 BIOS 引导中使用 MBR 磁盘,并在引导加载程序的第一个磁盘的 MBR 中使用 GRUB2。所有 GRUB 节都使用LABEL=
而不是UUID=
这样,这不会成为问题。同样,我的/etc/fstab
用途LABEL=
,因此更改或重复的 UUID 不是问题。我相信我可以使用克伦齐拉直播迁移 Windows 分区。我使该分区保持相同的大小并位于相同的位置。如果我正确理解 Clonezilla,该克隆的 UUID 将是相同的,因此 Windows不应该知道发生了什么事,或者至少还不足以去关心。
我的问题或担忧是:
- 我认为,当 GRUB 安装在 MBR 上时,我无法直接克隆它,因为分区正在发生变化
- Suse 安装使用 BTRFS,我想使其根分区更大
- 我还想增加 Suse
/boot
分区的大小(有一些罕见的事件需要更多空间/boot
) - 我还没有找到已
partclone
安装 BTRFS 文件系统和驱动程序的Live USB 发行版 - 我只想拍一拍
我的理解partclone
是系统必须离线才能克隆 BTRFS 系统。我知道 Clonezilla Live 必须如此,因为无论如何它都是一个可启动的系统。数据丢失不是问题,因为所有数据都位于不涉及操作系统迁移的其他磁盘上。
我找到了一个工具,btrfs 克隆我希望这会简化流程,并增加我成功的机会。我已经测试过了,它会克隆实时系统。在此过程中保持系统相当安静当然是一个好主意。同样,分区的 UUID 对所有东西都无关紧要,除了 Windows 之外,无论如何 Windows 只能看到自己的分区。
问题的简短版本是需要对新磁盘和分区执行哪些步骤,以将现有系统克隆到新磁盘上并在交换电缆时使其可引导?
作为额外说明,有一个现有问题这似乎是正确的。我担心的是,rsync
在 BTRFS 系统上使用不会获得所有快照,并且系统在新系统上不会“保持原样”。仅仅使用btrfs-clone
代替就可以rsync
解决所有问题。由于它是我的主要(唯一)桌面系统,我想一次性完成它。
答案1
由于我需要完成这项工作,所以我必须使用一个我相当确定会起作用的流程,即使不是我所希望的理想状态。在有人有更好的答案之前,对于后来的用户,我会成功地回答我所做的事情。
最初的问题陈述包括正在使用 BIOS 引导以及磁盘以 DOS 或 MBR 格式分区的信息。因此,这里不考虑使用 UEFI 引导或 GPT 分区可能出现的复杂情况。
注意:几乎每个重要进程都需要root权限。这可以通过以 root 身份登录(某些发行版上没有此选项)、使用 切换到 root 用户sudo su
或在每个命令前面加上 来完成sudo
。这里的假设是一切都是以 root 身份使用前两个选项之一完成的。所有命令的编写方式就好像从 root 帐户执行,而不是从用户帐户执行。
为此需要:
- 现有系统处于运行状态
- 第二个磁盘,HDD 或 SSD,可供系统访问(内部或通过 USB)
- 可启动版本(CD 或 USB)克隆尼兹拉直播
- USB 驱动器的可启动光盘,具有实时发行版或能够进入恢复模式的功能。
如果最后一项是使用相同或非常接近的内核克隆的系统版本,则这是最好的。无论选择哪种工具,都需要能够安装并chroot
进入新系统。不需要光盘或 USB 驱动器中的其他工具。
1. 验证涉及的磁盘名称。
跑过mount | grep '/dev/sd'
。这将显示所有当前安装的分区。对于 BTRFS 文件系统,如问题中所示,可能会为给定的分区列出几个不同的安装点on / type btrfs
。所有此类分区都可以忽略,因为克隆根的过程也会克隆它们。如果其他分区是从不同的物理磁盘挂载的,并且该磁盘在迁移后仍将保留,则也可以跳过它们。
还需要但更难找到的是安装 Windows 的分区。如果像常见的那样,首先安装了 Windows,则 Windows 分区很可能是/dev/sda1
,特别是如果 Linux 系统也位于 的分区上/dev/sda
。
要查找的常见分区是/home
和/boot
。
2. 在新磁盘上创建所需的分区
如果新磁盘能够通过 USB 连接,事情就会变得容易一些。
- 在未连接磁盘的情况下运行命令
lsblk
- 连接磁盘并
lsblk
第二次运行 - 第二个列表中的设备不是第一个列表中的设备是要使用的设备
注意:如果您在此过程中随时重新启动,并且连接了多个 USB 磁盘,则设备名称很可能会更改。每次继续之前请检查以验证正确的设备名称,否则您可能会在某处丢失数据。
使用的工具是个人选择,取决于您的喜好。大多数系统中通常可用的一些选项可能包括parted
、、、、和。gparted
cfdisk
fdisk
gdisk
创建分区后,运行partprobe
以确保系统“知道”新分区。有些工具会通知内核它需要这样做,有些则不会。自己做可以确保它确实完成。
再次使用命令验证分区是否已创建并可由内核查看lsblk
。
3. 在新分区上创建 Linux 文件系统
BTRFS根分区可以通过该mkfs.btrfs
命令制作,并且mkfs.ext4
可以用来制作/boot
和/home
分区。为了方便起见,如果新磁盘有交换分区,可以使用该mkswap
命令准备新的交换分区。
4.清理BTRFS根分区以减少克隆操作所花费的时间
列出系统的快照,snapper list
并使用 删除尽可能多的快照snapper delete <number>
。因此,回滚选项将非常有限。如果系统正在被克隆,它可能处于稳定状态,并且不需要回滚到先前的条件。
在 BTRFS 文件系统上运行平衡操作。完全平衡可能非常耗时!将其限制为仅平衡利用率低于某个百分比的块可以完成很多工作,同时花费更少的等待时间。根据系统的脏程度,50% 可能是您耐心的极限。我的系统经常保持平衡,因此我可以使用更高的百分比 (90%) 并花费可忍受的时间。该-dusage
选项将平衡操作限制为使用少于给定百分比的数据块。
对于我的系统,命令是btrfs balance start -dusage=90 /
5. 创建挂载点并挂载新分区以进行克隆
根分区在所有情况下都是显而易见的。还需要的可能是/home
和/boot
分区。
6. 克隆非 BTRFS 文件系统
该rsync
命令比简单命令更好,cp
因为它可用于保留复制文件的所有权和权限。rsync
如果进程被中断,也可以重新启动该进程。
一个例子是rsync --archive -hh --hard-links --partial --info=stats1 --info=progress2 --modify-window=1 --one-file-system /boot/ /boot2/
7. 克隆根、BTRFS、分区
这btrfs-clone
程序是我决定信任的工具。文档表明最好的结果(就使用的空间而言)来自“生成”策略,所以这就是我选择的策略。
命令虽然很简单,但要做到这一点就是btrfs-clone --strategy generation / /mnt
预计手术需要一段时间。
8.修改“新”系统
您可能需要对文件进行更改,/etc/fstab
以适应对要在新系统中安装的分区的更改。整个系统不必保持完全相同。标签名称、UUID 甚至设备名称都可以在迁移过程中更改。
对于 openSUSE 来说,还有另一个可能的问题原因。系统设置包括一个在 GRUB 配置期间使用的文件,用于对grub.cfg
菜单中的某些内核参数进行硬编码。该文件/etc/default/grub
可能包含类似以下内容的行:
GRUB_CMDLINE_LINUX_DEFAULT="splash=silent resume=/dev/disk/by-label/Linux_swap quiet mitigations=auto"
值得关注的是该部分resume=....
。这指向用于挂起到磁盘操作的交换分区。如果该行未注释掉,resume=...
其中包含 ,并且新磁盘具有与当前磁盘不同的标签、UUID 或设备名称,则必须对其进行更改以反映新版本。这在后面的步骤中将变得很重要。
9. 使用克隆属克隆 Windows 分区。
我不是 Clonezilla 方面的专家。该选项似乎是使用克洛内兹拉直播在可启动 CD 上。除了语言/键盘选项之外,我遵循的步骤是:
device-device work directly from a disk or partition to a disk or partition
Expert Expert mode: choose your own options
part_to_local_part local_partition_to_local_partition
Select the source partition
Select the target partition
Options menu changes
add Reinstall grub on target hard disk
drop Automatically adjust geometry ...
drop sfdisk uses CHS ...
drop Resize filesystem ...
add No GUI ...
add Remove NTFS volume dirty flag ...
-sfck Skip checking/repairing source file system
-p choose Choose reboot/shutdown/etc when everything is finished
完成后,Windows 分区已被克隆,GRUB 也已完成可能添加到MBR。
10.用新磁盘替换旧磁盘
这就是锻炼身体的要点。卸载旧磁盘并安装新磁盘。如果两个磁盘都保持安装或连接状态,此后系统可能会感到困惑。作为一种替代方案,如果要使用两个磁盘,并以新磁盘作为启动磁盘,则需要更改或重新格式化不再需要的旧分区,以为其提供新的 UUID 和标签。
11.重建启动过程
根据我的实验,Clonezilla 添加到 MBR 的引导加载程序(如果有的话)是不完整的。由于上述设置,旧系统的版本initrd
可能与新系统不兼容,尤其是在 openSUSE 上/etc/default/grub
。最后,该grub.cfg
文件可能包含与新系统不兼容的元素。如果前面的步骤已成功完成,则纠正所有这三个步骤是一个直接的过程。
启动实时光盘,如果需要,请选择恢复选项。如果使用 Live CD,例如 Ubuntu,则可以一直进入 Live 系统,然后打开终端。在实时系统上使用终端还需要具有sudo su
root 权限。大多数系统上的恢复模式已经处于 root 状态。
以下假设磁盘具有/dev/sdx
以下分区:
/dev/sdx1 Windows
/dev/sdx2 `/boot`
/dev/sdx3 `/`
/dev/sdx4 swap
您的系统上的分区号,甚至设备名称可能有所不同,需要修改以下步骤以适应情况
步骤
- 创建一个工作目录,通常是
/mnt
,该目录可能已经存在 - 挂载新系统的根分区:
mount /dev/sdx3 /mnt
- 挂载新系统的启动分区:
mount /dev/sdx2 /mnt/boot
- 将现有系统的流程连接到新系统
for item in proc sys dev run; do
mount /$item --rbind /mnt/$item
done
- 切换到挂载的系统
chroot /mnt
- 挂载新系统通常挂载的任何其他分区
mount -a
- 创建新的
initrd
mkinitrd
- 将 GRUB 安装到 MRB
grub2-install /dev/sdx
- 生成新的
grub.cfg
grub2-mkconfig -o /boot/grub2/grub.cfg
- 退出
chroot
并重新启动
exit
reboot
- 取出带有实时或恢复系统的 USB 驱动器磁盘。
- 检查新磁盘是否可以启动到 Window 和 Linux 系统。