如何使用桌面安装程序在Ubuntu 14.04上安装RAID 1?

很多人声称使用桌面CD将Ubuntu安装到RAID 1是不可能的。这是真的吗?如果不是,应该如何操作?
3个回答

编辑:本指南不考虑UEFI引导。如果需要UEFI引导,则可能需要额外或不同的步骤。本指南假设使用传统引导!

事实是,ubiquity安装程序不知道mdadm软件RAID设备。同样,事实是,Live CD中缺少mdadm RAID管理工具。然而,通过手动操作,完全可以在RAID1上安装Ubuntu。

接下来,我将假设有两个相同的硬盘(/dev/sd[ab]),它们将完全用于我们的新安装。为了简化恢复过程,如果一个驱动器故障,只会有一个mdadm/dev/md0,然后将其分区为/swap和数据存储,例如/home

启动Live CD并(如果必要)配置网络访问后,在终端中打开并获取root访问权限sudo -s

apt-get install mdadm

现在我们从扇区2048到磁盘末尾为/dev/sda和/dev/sdb各创建一个主分区,例如使用sudo fdisk命令。我还喜欢将分区类型设置为fd以便Linux RAID自动检测。如果磁盘一开始是空的,即没有分区,那么在fdisk中的按键序列是n <return> p <return> 1 <return> 2048 <return> <return> t <return> fd <return> w <return>
现在我们创建mdadm卷:
mdadm --create /dev/md0 --bitmap=internal --level=1 -n 2 /dev/sd[ab]1

我注意到,ubiquity 安装程序似乎也无法在 /dev/md0 中创建分区,所以我手动完成了这一步骤 - 再次使用 fdisk。因此,在 /dev/md0 上创建以下分区:

  • /dev/md0p1 用于根文件系统,大小当然取决于您要安装多少软件。
  • /dev/md0p2 用于交换空间,大小当然也取决于您将如何使用计算机以及它的内存量。
  • /dev/md0p3 用于 /home,使用剩余的所有空间。

完成后,我们可以开始安装。请确保从终端启动安装程序,并使用 -b 选项,因为安装引导加载程序无论如何都会失败:

ubiquity -b

确保选择手动分区,并“使用”刚刚创建的3个分区,勾选format复选框以创建文件系统。

安装完成后,系统还不能启动,所以不要立即重新启动。我们需要chroot进入已安装的系统并修复一些问题:

sudo -s
mount /dev/md0p1 /mnt
mount -o bind /dev /mnt/dev
mount -o bind /dev/pts /mnt/dev/pts
mount -o bind /sys /mnt/sys
mount -o bind /proc /mnt/proc
cat /etc/resolv.conf >> /mnt/etc/resolv.conf
chroot /mnt
apt-get install mdadm
nano /etc/grub.d/10_linux  # change quick_boot to 0
grub-install /dev/sda
grub-install /dev/sdb
update-grub
exit

现在新安装的系统已经准备好启动了。玩得开心!

4它将来会被默认支持吗?有没有任何理由不提供这个功能。在完美的世界里,应该有RAID安装选项。 - umpirsky
@Mwithii说:“这个指南还不错,除了在chroot中的“apt-get install mdadm”无法正常工作。我不得不像这里描述的那样“cp /etc/resolv.conf /mnt/etc/resolv.conf”来解决问题:http://ubuntuforums.org/showthread.php?t=1268160&p=7960338#post7960338”。 - MadMike
1可能比较容易的做法是在进入chroot环境之前,将已经下载好的mdadm .deb文件从/var/cache/apt/archives移动到/mnt目录中,然后使用dpkg -i命令进行安装。 - Peter Cordes
我没有找到一种方法让Ubiquity直接在md设备上放置文件系统。我不想分区我的md设备;我宁愿为不同的文件系统设置多个RAID。这样,我可以潜在地使用一个旧的小型驱动器来保持//home的冗余性,而将我放置大文件的/data目录降级,直到我有时间购买一个与原始驱动器一样大的替代品。(半虚构的例子,其他各种情况应该很明显。) - Peter Cordes
@PeterCordes:仅复制mdadm deb文件是不够的,它还需要拉取一些依赖项。我真的应该在原始帖子中添加关于resolv.conf的内容。替换它(就像@Mwithii建议的那样)可能会破坏resolvconf软件包的自动配置。最好执行以下操作:cat /etc/resolv.conf >> /mnt/etc/resolv.conf - Sunday
@PeterCordes:如果Ubiquity不会在那里放置一个文件系统,那么在启动Ubiquity之前手动创建一个可能会起作用。否则,为整个md创建一个分区也是一个完全可行的解决方案。 - Sunday
mdadm没有任何depends:,只有recommends:。我将.deb文件复制到U盘上,在启动Live CD/USB后安装它(以及smartmontools)。 - Peter Cordes
我想测试在RAID10,f2上引导文件系统的GRUB。GRUB需要跨越RAID分区上的分区这个额外的障碍有点过于复杂。 - Peter Cordes
@星期天:很好的建议,先尝试制作文件系统。Ubiquity注意到了这一点,并让我告诉它将/放在现有的md0上,而无需对其进行分区甚至重新做mkfs。(这还允许使用非默认选项,如mkfs.xfs -m crc=1,finobt=1,这些选项直到内核对它们的支持已经存在多年后才会被mkfs忽略。)总之,安装完成后,grub-install失败了。正在解决这个问题。 - Peter Cordes
2我的Grub安装失败了:grub-install: 警告:这个GPT分区标签不包含BIOS引导分区,无法嵌入。 grub-install: 错误:无法嵌入,但RAID和LVM安装需要此功能。看起来启动分区丢失了?也许在sda和sdb上创建BIOS引导分区会有帮助,就像在http://serverfault.com/questions/386041/ubuntu-server-gpt-partition-table-mdadm-grub-boot-fail中所述。 - umpirsky
我按照这些指示安装了grub,没有出现任何错误。一切都进行得很顺利,但是重新启动后,没有出现引导选项。我被提示进入BIOS,但没有可供选择的引导选项。唯一与我的情况不同的是RAID级别为0,而不是1。@Sunday 有什么提示吗? - umpirsky
在进行这项工作时,我并没有考虑到GPT/UEFI。也许有一些需要调整的地方,特别是在引导加载程序安装方面。也许你的系统处于只能以UEFI的BIOS兼容模式启动的状态。 - Sunday
@星期天:我和你一样在寻找解决方案,只不过我使用的是UEFI系统。你说得对,UEFI需要进行一些微调(详细信息请参考:http://askubuntu.com/questions/660023/how-to-install-ubuntu-14-04-64-bit-with-a-dual-boot-raid-1-partition-on-an-uefi)。此外,我还需要在local-premount脚本中插入一个延时操作,否则当我断开其中一块硬盘进行测试时,会出现grub rescue提示符!如果你拔掉其中一块硬盘,你的解决方案是否能正常工作,而无需延时操作呢? - Niclas Börlin
@星期日可能吧,我对此不太熟悉。我有一台华硕(Asus)Zenbook笔记本电脑,在BIOS中有一些与UEFI相关的选项。 - umpirsky
你的步骤对我来说有效,只需做一个修改。在启动安装程序并配置挂载点后,我会打开一个 root shell 并执行 chroot /target 命令。然后将 mdadm.conf 从活动系统复制到已安装的系统中。完成这些步骤后,我可以继续进行正常的安装,甚至安装 GRUB 也能成功。 - kasperd
我还有一个问题。在启动过程中,我收到一个错误消息,上面写着“错误:不支持磁盘过滤器写入”。 - kasperd
啊,原来quick_boot设置是为了这个。将它改为0并运行update-grub解决了我的问题。 - kasperd
RAID0适用吗? - umpirsky
可能吧。但是我会将交换分区排除在RAID0之外,并创建两个单独的交换分区,因为内核会自动在多个交换空间之间进行负载均衡,这样可能比在RAID0上使用单个交换空间性能更好。 - Sunday
@星期日 看起来有些变化了,这个指令需要更新,安装后我遇到了一些错误。它还能工作,但修复一下会更好,我在几个月后无法启动时遇到了麻烦。如果您能看一下我的问题http://askubuntu.com/questions/766355/error-unknown-command-hwmatch,我将不胜感激。提前感谢。 - umpirsky
1@umpirsky,我在指南中添加了一个警告,请查看http://askubuntu.com/questions/660023/how-to-install-ubuntu-14-04-64-bit-with-a-dual-boot-raid-1-partition-on-an-uefi。 - Sunday
@Sunday 是的,我有点意识到这个问题了,但一年前当我安装15.04时,我创建了一份指南https://gist.github.com/umpirsky/6ee1f870e759815333c8,这是两者的结合,并且完美运行。现在使用16.04的UbuntuGnome,我遇到了这个问题http://askubuntu.com/questions/766355/error-unknown-command-hwmatch。所以我正在尝试确定在我的指南中应该改变什么或如何修复这个错误。谢谢! - umpirsky

不要使用RAID 1安装Ubuntu桌面版CD。我的建议:

  1. 使用Ubuntu服务器版CD进行引导式RAID 1安装。此操作的手册在这里(忽略LVM部分,不需要):
    https://help.ubuntu.com/lts/serverguide/advanced-installation.html
  2. 之后,使用以下命令安装Ubuntu桌面环境:
    sudo apt-get install ubuntu-desktop
  3. 重新启动,您将拥有一个已使用服务器CD安装的Ubuntu桌面。

1我认为这是众所周知的(也是可以预料的),服务器安装程序具备RAID支持。不过,这个问题特别是想澄清桌面安装程序是否可以以某种方式使用。无论如何,还是感谢您让我们知道! - Sunday

我还没有尝试过,但刚刚发现了http://www.salamander-linux.com/
Salamander是Ubuntu Linux的默认安装程序Ubiquity的修改版本。这个修改后的安装程序允许用户轻松地将Ubuntu Linux安装到软件RAID阵列上。不需要特殊的硬件--Salamander安装程序可以在任何具有多个硬盘的系统上使用。

这似乎相当过时,来自2010年的。 - therealmarv
@therealmarv 是的,必须找到新的解决方案。 - umpirsky
我认为整体上更好的解决方案是使用具有非常好的RAID1支持的Ubuntu Server CD,并按照官方文档中的步骤进行安装:https://help.ubuntu.com/lts/serverguide/advanced-installation.html,然后最后安装`sudo apt-get install ubuntu-desktop`,这样服务器也可以作为桌面使用。 - therealmarv
@therealmarv 或许吧,但我在某处读到这种方法有一些缺点。桌面分发方式有所不同。 - umpirsky