为什么将 LVM 内的根文件系统移动到 raid 后,我的服务器无法启动?

为什么将 LVM 内的根文件系统移动到 raid 后,我的服务器无法启动?

我正在尝试将我的根分区移动到基于 raid 的物理卷,但似乎失败了。

我使用的过程有些复杂,但那是因为我的托管服务提供商的安装能力非常有限,所以我无法从使用 lvm 在 raid 卷上创建的根文件系统开始。

为了测试我的情况,我在 VirtualBox 中创建了虚拟实例,有 4 个磁盘:

  • /dev/sda-8GB
  • /dev/sdb-8GB
  • /dev/sdc-20GB
  • /dev/sdd-20GB

并在那里安装了Linux(Debian 8.5)。最初,安装后,布局如下:

  • /dev/sd[bcd] – 未分区,未使用
  • /dev/sda - 有 1 个分区 (/dev/sda1),较小 (4GB),用作 LVM 的 PV
  • 在这个 PV 上,我创建了 VG 和 LV,现在用作 /:

它看起来是这样的:

=# mount /
mount: /dev/mapper/vg-root is already mounted or / busy
=# lvs
LV   VG   Attr       LSize Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
root vg   -wi-ao---- 3.72g
=# vgs
VG   #PV #LV #SN Attr   VSize VFree
vg     1   1   0 wz--n- 3.72g    0
=# pvs
PV         VG   Fmt  Attr PSize PFree
/dev/sda1  vg   lvm2 a--  3.72g    0

现在,我需要/想要的是在小磁盘和大磁盘上创建几个 raid,并将 / 放在它们上面。

因此,我首先创建分区。由于我需要重新分区 /dev/sda,因此它是中间布局,如下所示:

=# for a in /dev/sd[abcd]; do fdisk -l $a; done | grep ^/
/dev/sda1  *     2048 7813119 7811072  3.7G 8e Linux LVM
/dev/sdb1        2048 16777215 16775168   8G fd Linux raid autodetect
/dev/sdc1           2048 16777215 16775168   8G fd Linux raid autodetect
/dev/sdc2       16777216 41943039 25165824  12G fd Linux raid autodetect
/dev/sdd1           2048 16777215 16775168   8G fd Linux raid autodetect
/dev/sdd2       16777216 41943039 25165824  12G fd Linux raid autodetect

然后,我在 /dev/sd[cd]2 分区上创建 raid1:

=# mdadm -C /dev/md0 -l 1 --raid-devices 2 /dev/sd[cd]2

这使我成为 /dev/md0,我将使用它作为 / 文​​件系统的临时位置:

=# pvcreate /dev/md0
=# vgextend vg /dev/md0
=# pvmove /dev/sda1 /dev/md0
=# vgreduce vg /dev/sda1
=# pvremove /dev/sda1

此时,/dev/sda 是空闲的,所以我可以对其进行重新分区,以精确指定 /dev/sdb。(这一步不太重要,但只是为了完整性)。

现在,一切就绪,我更新 mdadm.conf:

=# mdadm --detail /dev/md0 --brief >> /etc/mdadm/mdadm.conf && update-initramfs -u

添加的这一行:

ARRAY /dev/md0 metadata=1.2 name=debian:0 UUID=55692d54:b0beedae:9d85bc20:324d7f9f

完成这些后,我重启系统,确保它能正常工作。但系统立即在 GRUB 上崩溃,并显示以下消息:

error: disk `lvmid/F9eO8I-PB9F-Dsli-ZOSY-rVA1-7a37-Faos46/1N3Ah7-wIjT-HFxc-MS9U-lAcw-tYZw-N7sRO8' not found.
Entering rescue mode...
grub rescue>

提示符中的 ls 显示:

(hd0) (hd0,msdos1) (hd1) (hd1,msdos1) (hd2) (hd2,msdos2) (hs2,msdos1) (hd3) (hd3,msdos2) (hd3,msdos1)

我做错了什么?我忘记了什么?

答案1

您需要更新您的 GRUB 并启动内核安装。

  1. update-initramfs -u

此命令将更新您的启动内核配置以匹配系统的当前状态。

  1. mdadm --detail --scan > /tmp/mdadm.conf

复制/tmp/mdadm.conf内容以/etc/mdadm/mdadm.conf替换任何先前的条目。这样 MD 设备配置信息将是正确的。

  1. update-grub

这将更新 GRUB 配置,以便它了解新设备。

  1. dpkg-reconfigure grub-pc

这会将 GRUB 安装到服务器的硬盘上。

相关内容