Debian 9(CSM启动)在线把系统盘转成RAID

需求

服务器上装了两块硬盘,其中一块上装了一个Debian,现在需要把两块硬盘做成软RAID。比较坑的地方在于,服务器只有SSH访问,没有任何带外管理。

环境

开了台类似配置的虚拟机做了个实验。系统是Debian 9,CSM方式启动,用GRUB作为bootloader。虚拟机的硬盘配置如下:

配置方法

这一方案的基本原理是,先在空硬盘上建立一个degraded的RAID阵列,把系统复制进去,重启从RAID阵列启动,再把原来的系统盘加入RAID阵列。

在开始之前,我们需要确认以下几点:

  • 系统可以使用root用户远程登录
  • 你到该服务器有稳定的网络连接,SSH不会频繁掉线

以下所有操作需要使用root用户进行。

安装所有必要的程序。

首先我们给空硬盘分区,建立一个FD00(Linux RAID autodetect)类型的分区。记得不要用完整个盘的空间,后面稍微留一点,以防不同硬盘的可用空间不同导致添加硬盘时出现问题。

创建RAID 1阵列

给RAID阵列分区,创建文件系统。

关掉系统上能关掉的非关键服务。(全新安装的Debian 9上应该只有这么多,如果有别的服务的话一并关掉。)

卸载掉所有能卸载的文件系统。

这里报错是正常的。这一步完成以后,请确认除了根文件系统和虚拟文件系统以外的所有分区已经卸载;如果还有程序在占用这些分区,可以使用fuser来找到这些程序,然后手工关闭它们。

开一个tmpfs,做我们一会儿移动系统时候使用的根文件系统。这里你可以选择复制现有的系统进去,但是一个全新安装的Debian 9怎么也有1GiB左右,考虑到内存占用问题,我们从LXC那儿偷一个315MiB的根文件系统。

然后我们悄悄把现在的根文件系统换下来。

在新的根文件系统里面装一个SSH daemon,替换掉外面那个。

在不断开原有SSH会话的情况下再连接一次服务器,确认能够正常连接。如果一切正常,那么断开原来的SSH会话。

最后检查一次原来的根文件系统还有谁在用,然后把它们一一关闭(kill -15 $PID):

最后应该只剩下一个systemd。

这时候我们重启一下systemd本身,这样原来的根文件系统就完全不会被占用了。(daemon-reexec的时候可能因为某些unit导致卡住,Ctrl+C即可。)

复制原来的文件系统到RAID阵列上。

重建fstab:打开/newroot/etc/fstab,找到原来的根文件系统,改成/dev/md0p1或者UUID。

chroot进新系统:

创建正确的mdadm配置:

重建initramfs:

重建GRUB配置:打开/etc/default/grub,把GRUB_DEVICE(如有)改成/dev/md0p1,然后创建新的GRUB配置。

安装GRUB到新的物理硬盘。

为了让系统即使仍然从原系统盘引导,仍然能从新的mdadm阵列启动,我们需要把新的GRUB配置文件复制到原系统盘上。

重启。如果一切正常的话,你将会看到RAID阵列被挂载到根上。

清空原系统盘数据并加入RAID阵列:

mdadm会开始重建RAID阵列。

至此,迁移工作结束。


参考:

发表评论

电子邮件地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据