我以前使用 LVM 通过软件 RAID1 安装服务器,并将 grub 安装在两个驱动器的 MBR 上。现在我有一台 UEFI 服务器,兼容 (BIOS) 模式似乎不起作用。
因此我选择了使用 UEFI 安装的方式。
首次测试,单驱动器安装工作正常。
然后我尝试使用 RAID1 + LVM 进行安装。我以相同的方式对两个驱动器进行了分区:
- EFI 系统分区,200MB
- 物理 RAID 分区
然后我进行了设置: - 使用两个磁盘 RAID 分区的 RAID 1 - RAID 1 阵列上的 LVM 卷组 - 三个逻辑卷:/、/home 和 swap
安装继续进行,但重新启动时,我得到了 grub shell 并且卡住了。
那么,是否可以让 grub2-efi 在 RAID1 上的 LVM 上工作?如何实现这一点?还有其他引导加载程序替代方案吗(直接从 EFI 加载 Linux?)?等等...
答案1
好的,我找到了解决方案,可以回答我自己的问题了。
1)我可以在 UEFI 机器上使用 RAID1 上的 LVM 吗?
是的,当然。即使两个磁盘中的一个发生故障,它也能启动。
2)如何做到这一点?
似乎有一个漏洞在安装程序中,因此仅使用安装程序会导致启动失败(grub shell)。
以下是工作流程:
1) 在两个磁盘上手动创建以下分区: - 磁盘开头为 UEFI 类型的 512MB 分区 - 之后为 RAID 类型的分区
2)使用两个 RAID 分区创建 RAID 1 阵列,然后使用该阵列创建 LVM 卷组和逻辑卷(我为 root 创建了一个,为 home 创建了一个,为 swap 创建了一个)。
3) 继续安装,然后重新启动。失败!您应该得到一个 grub shell。
4) 可能可以从 grub shell 启动,但我选择从救援 usb 磁盘启动。在救援模式下,我在目标根文件系统(即根 lvm 逻辑卷上的文件系统)上打开了一个 shell。
5) 使用“blkid”获取此目标根分区的 UUID。记下来或用手机拍照,下一步您将需要它。
6) 挂载 EFI 系统分区(“mount /boot/efi”)并编辑 grub.cfg 文件:vi /boot/efi/EFI/ubuntu/grub.cfg 在这里,将错误的 UUID 替换为您在第 5 点获得的 UUID。保存。
7) 为了能够从第二个磁盘启动,请将 EFI 分区复制到第二个磁盘:dd if=/dev/sda1 of=/dev/sdb1(将 sda 或 sdb 更改为适合您的配置的内容)。
8) 重启。在 UEFI 设置屏幕中,将两个 EFI 分区设置为可启动,并设置启动顺序。
大功告成。您可以测试一下,拔掉其中一个磁盘,它应该可以工作!
答案2
我自己在一年多前就这样做过,虽然确实遇到了问题,但不是这里列出的问题。我不确定我当时在哪里找到了建议,所以我会在这里发布我所做的事情。
1)在启动时创建 128MB efi 分区(其中只有一个会挂载在 /boot/efi)
2)创建 1 GB /boot RAID1 阵列,无 LVM
3)使用 LVM 创建大型 RAID1 阵列
将 /boot 放在单独的分区/RAID1 阵列上可解决 efi 分区无法找到适当内容的问题。
对于那些像我当时一样想要了解更多细节的人来说,更准确地说,这就是我如何完成设置的:
6x 3TB Drives
Have 4 RAID arrays:
/dev/md0 = 1GB RAID1 across 3 drives
--> /boot (no LVM)
/dev/md1 = 500GB RAID1 across 3 drives
LVM:
--> / = 40GB
--> /var = 100GB
--> /home = 335GB
--> /tmp = 10GB
/dev/md2 = 500GB RAID1 across 3 drives (for VM's/linux containers)
LVM:
--> /lxc/container1 = 50GB
--> /lxc/container2 = 50GB
--> /lxc/container3 = 50GB
--> /lxc/container4 = 50GB
--> /lxc/extra = 300GB (for more LXC's later)
/dev/md3 = 10TB RAID6 across 6 drives (for media and such)
--> /mnt/raid6 (no LVM)
Disks are setup thus:
/sda => /boot/efi (128 MB) | /dev/md0 (1 GB) | /dev/md1 (500GB) | /dev/md3 (2.5TB)
/sdb => /boot/efi (128 MB) | /dev/md0 (1 GB) | /dev/md1 (500GB) | /dev/md3 (2.5TB)
/sdc => /boot/efi (128 MB) | /dev/md0 (1 GB) | /dev/md1 (500GB) | /dev/md3 (2.5TB)
/sdd => ----- left empty for simplicity ---- | /dev/md2 (500GB) | /dev/md3 (2.5TB)
/sde => ----- left empty for simplicity ---- | /dev/md2 (500GB) | /dev/md3 (2.5TB)
/sdf => ----- left empty for simplicity ---- | /dev/md2 (500GB) | /dev/md3 (2.5TB)
请注意,/boot/efi 中只有一个会实际挂载,后两个是克隆;我这样做是因为我希望当 RAID1 中的 3 个磁盘中的任何一个丢失时,机器仍能启动。如果我仍然具有完全冗余,我不介意在降级模式下运行,这让我有时间在机器仍在运行时更换驱动器。
此外,如果我没有第二个 RAID1 阵列来放置 LXC 容器和基本上所有的数据库等,/var 就必须大得多。但是,将每个 LXC 作为自己的逻辑卷是一种很好的解决方案,可以防止一个 VM/网站因失控的错误日志而破坏其他 VM/网站……
最后要说的是,我使用 Ubuntu 备用安装 USB 安装了 12.04.01(12.04.02 发布之前),一切都运行良好。在花了 72 小时思考之后。
希望这对某人有帮助!
答案3
我有同样的问题,efi 启动有两个磁盘和软件 raid
/dev/sda
- /dev/sda1 - 200MB efi 分区
- /dev/sda2 - 用于 raid 的 20G 物理空间
- /dev/sda3 - 980G 物理磁盘用于 raid
/dev/sdb
- /dev/sdb1 - 200MB efi 分区
- /dev/sdb2 - 20G 物理磁盘用于 raid
- /dev/sdb3 - 980G 物理用于 raid
/dev/md0 上的交换(sda2 和 sdb2) /dev/md1 上的根(sda3 和 sdb3)
如果你进入 grub-rescue shell,请使用以下命令进行启动:
set root=(md/1)
linux /boot/vmlinuz-3.8.0-29-generic root=/dev/md1
initrd /boot/initrd.img-3.8.0-29-generic
boot
之后,下载此补丁文件 -https://launchpadlibrarian.net/151342031/grub-install.diff(如解释https://bugs.launchpad.net/ubuntu/+source/grub2/+bug/1229738)
cp /usr/sbi/grub-install /usr/sbi/grub-install.backup
patch /usr/sbin/grub-install patch
mount /dev/sda1 /boot/efi
grub-install /dev/sda1
umount /dev/sda1
mount /dev/sdb1 /boot/efi
grub-install /dev/sdb1
reboot