当前位置: 首页 > news >正文

Ubuntu 22.04 硬件RAID1安装指南:手动分区与GRUB配置实战

1. 项目缘起:为什么要在RAID1上安装Ubuntu?

最近给一台老旧的Dell PowerEdge服务器做系统迁移,原计划是直接装到一块新的NVMe SSD上。但在安装Ubuntu 22.04 LTS的引导过程中,我遇到了一个不大不小的麻烦:系统安装程序(Ubiquity)在识别和配置RAID1阵列时,表现得相当“固执”。它要么是找不到阵列,要么是找到了却无法正确创建引导加载器(GRUB),最终导致安装失败,卡在“安装系统引导器”这一步。这让我意识到,虽然Ubuntu的桌面安装程序对普通单盘安装已经非常友好,但面对服务器上常见的硬件RAID配置,尤其是像RAID1(镜像)这样的基础冗余阵列,它依然存在一些“盲区”和预设逻辑上的冲突。

这个经历促使我决定,彻底梳理一遍在Ubuntu 22.04时代,将系统干净利落地部署到硬件RAID1阵列上的完整流程。这不仅仅是点击“下一步”那么简单,它涉及到对Linux引导机制、RAID控制器驱动以及Ubuntu安装程序底层逻辑的理解。无论是用于家庭NAS、小型企业服务器,还是作为开发测试环境,在RAID1上安装系统都能提供最基本的数据冗余保障,避免因单块硬盘故障导致系统瘫痪和数据丢失。对于运维人员、开发者或者任何希望构建稳定基础系统的用户来说,掌握这项技能都很有必要。

接下来,我将以一台配置了PERC H730硬件RAID控制器的Dell服务器为例,但其中涉及的核心原理和排查思路,同样适用于其他品牌(如HPE、浪潮、华为)的硬件RAID卡,以及在某些场景下的软件RAID配置。我们会从最底层的RAID配置开始,一直讲到系统安装完成后的收尾工作,把每一个可能踩坑的环节都摊开来讲清楚。

2. 战前准备:理解硬件RAID与安装程序的“认知差”

在动手之前,我们必须先理清一个关键概念:对于操作系统而言,一个配置好的硬件RAID1阵列,看起来就像一块普通的硬盘。RAID卡(或主板集成的RAID功能)负责管理底层的多块物理磁盘,将它们组织、虚拟化成一块逻辑磁盘(Logical Drive),然后呈现给操作系统。这是所有后续操作的基础。

然而,Ubuntu 22.04的图形化安装程序(Ubiquity)在设计时,优先考虑的是通用性和易用性。它内置的磁盘分区工具parted和引导安装逻辑,在面对由硬件RAID卡虚拟出来的“单盘”时,有时会做出错误的判断。一个最常见的问题是:安装程序可能会试图将GRUB安装到某一块物理硬盘(例如/dev/sda)上,而不是安装到由RAID卡虚拟出来的、代表整个阵列的逻辑设备(例如/dev/sdb)上。这是因为在安装程序的设备探测阶段,它可能同时“看到”了物理磁盘和逻辑磁盘,从而产生了混淆。

因此,我们的核心策略可以概括为:引导安装程序正确地识别出RAID阵列这块“虚拟单盘”,并强制将GRUB安装到这个正确的设备上。为了实现这个目标,通常有两种主流路径:

  1. 使用“服务器版”镜像:Ubuntu Server 22.04的安装程序(Subiquity)对硬件RAID的支持通常更好,因为它更偏向于服务器环境。
  2. 在桌面版安装中使用“手动分区”:这是更通用、也更可控的方法。通过手动指定分区方案和引导设备,我们可以完全掌控安装过程,避免安装程序的自动决策出错。

考虑到很多用户更熟悉桌面环境,或者需要在桌面版上完成安装,本文将重点详述第二种方法——在Ubuntu 22.04 Desktop安装中,通过手动分区搞定RAID1。同时,我也会穿插说明如果选择服务器版,有哪些需要注意的差异点。

准备工作清单:

  • 硬件:确保RAID1阵列已在RA卡配置界面(如开机按Ctrl+R进入Dell PERC配置)中创建完毕,并处于“Optimal”状态。准备好Ubuntu 22.04 LTS的安装U盘。
  • 镜像:从Ubuntu官网下载ubuntu-22.04.x-desktop-amd64.isoubuntu-22.04.x-live-server-amd64.iso,并使用Rufus、BalenaEtcher等工具以“DD模式”或“ISO模式”写入U盘,确保UEFI引导兼容性。
  • 心态:准备好可能会经历一次失败的安装,并进入“试用Ubuntu”环境进行调试。这是解决问题的最佳入口。

3. 核心实战:从U盘引导到手动分区的完整流程

现在,我们开始正式的安装过程。请将制作好的安装U盘插入服务器,并从U盘引导。

3.1 引导进入安装环境与关键模式选择

服务器启动后,你会看到Ubuntu的GRUB菜单。这里有一个至关重要的步骤:不要直接按回车启动“Install Ubuntu”

  1. 在GRUB菜单中,高亮选中“Install Ubuntu”。
  2. 按下键盘上的E键,进入引导参数编辑模式。你会看到一串以linux开头的行。
  3. 在这行参数的末尾(在---之前),先添加一个空格,然后输入以下参数:
    nomodeset
    nomodeset参数的作用是禁止内核在安装初期加载显卡驱动,这对于很多服务器集成的显卡或老旧独立显卡非常有用,可以避免因显卡驱动问题导致的安装界面黑屏、卡死。这是服务器安装的常见技巧。
  4. 按下Ctrl+XF10来使用这些参数引导。这样,我们就进入了图形化安装界面。

注意:对于某些非常新的硬件或特定RAID卡,如果发现安装程序无法识别到任何磁盘,你可能还需要尝试添加raid=noautodetect参数,或者尝试使用“安全图形模式”启动。但大多数情况下,nomodeset已足够。

3.2 连接网络与抵达分区十字路口

安装程序启动后,按照提示选择语言、键盘布局。在“更新和其他软件”这一步,我强烈建议先不要连接网络,也不要选择“安装中下载更新”和“安装第三方软件”

为什么?因为网络下载可能会引入不可预知的延迟或错误,在解决核心的磁盘识别问题之前,这些步骤都是次要的。我们首要目标是让系统先“站”起来。我们可以等系统安装完成后,再在稳定的环境下进行更新。所以,这两个选项都不要勾选,直接点击“继续”。

接下来,我们就来到了整个安装过程中最关键的环节——“安装类型”。安装程序通常会检测到你的RAID阵列,并可能显示为一块大容量的磁盘(比如“/dev/sdb - 1.8 TB”)。但它也可能显示多块磁盘。这里,我们必须选择“其他选项”(Something else),也就是手动分区。点击“继续”,进入手动分区编辑器。

3.3 手动分区:为RAID阵列规划Linux家园

现在,你看到了所有存储设备列表。你应该能看到你的RAID阵列设备(例如/dev/sdb),以及你的U盘(例如/dev/sda)。请务必仔细核对设备大小和型号,确保你操作的是目标RAID阵列,而不是安装U盘

选中代表RAID阵列的那行(/dev/sdb),然后点击下方的“新建分区表”。在弹出的对话框中选择分区表类型为GPT(GUID Partition Table)。对于现代UEFI系统和大于2TB的磁盘,GPT是必须的。点击“确定”后,磁盘状态变为“空闲”。

接下来,我们将在这块“空闲”空间上创建必要的分区。一个典型的、适用于UEFI启动的Ubuntu服务器/桌面系统,至少需要以下三个分区:

  1. EFI 系统分区

    • 大小:至少512MB,建议1GB。为未来可能的多系统引导或大型引导文件留足空间。
    • 新分区的类型:主分区
    • 新分区的位置:起始
    • 用于:EFI系统分区
    • 挂载点/boot/efi
    • 说明:这个分区用于存放UEFI引导加载器。至关重要:在页面最下方,“安装启动引导器的设备”下拉菜单中,必须选择这个分区对应的设备(例如/dev/sdb1)。这是确保GRUB被安装到RAID阵列上的关键一步!
  2. 交换分区(可选,但建议)

    • 大小:根据你的物理内存大小决定。对于服务器,如果内存足够大(如64GB以上),可以省略或设置一个较小的交换空间(如4-8GB)。对于内存较小的系统,可以设置为物理内存的1-2倍。
    • 新分区的类型:逻辑分区(在扩展分区内创建)或主分区
    • 用于:交换空间
    • 挂载点:(无需指定)
    • 说明:用于内存交换。虽然现代系统有时使用交换文件(swapfile),但在独立分区上设置交换空间仍然是服务器上的常见做法,性能和管理上更清晰。
  3. 根分区

    • 大小:占用所有剩余空间。
    • 新分区的类型:逻辑分区(在扩展分区内创建)或主分区
    • 用于:Ext4 日志文件系统(或其他你喜欢的,如XFS)
    • 挂载点/
    • 说明:这是系统的主分区,所有文件和目录(除了/boot/efi)都将存放在这里。

分区方案示例表格:

设备大小类型文件系统挂载点备注
/dev/sdb11GBEFI系统分区FAT32/boot/efi引导器安装位置
/dev/sdb216GB交换空间swap(无)根据内存调整
/dev/sdb3剩余所有Linux文件系统Ext4/根目录

创建完所有分区后,请再次仔细检查页面最下方的“安装启动引导器的设备”是否已经正确设置为你的EFI分区(如/dev/sdb1。确认无误后,点击“现在安装”。

3.4 完成安装与首次重启

之后的过程就是常规设置:选择时区、创建用户名和密码。设置完成后,安装程序开始复制文件。这个过程在RAID1上可能会比单盘稍慢一点,因为数据需要同步写入两块硬盘。

安装完成后,点击“现在重启”。系统会提示你拔掉安装介质(U盘),然后按回车重启。

4. 疑难排坑:当安装程序“找不到磁盘”或引导失败时

事情并不总是一帆风顺。如果你在“安装类型”页面根本看不到你的RAID阵列磁盘,或者安装完成后重启无法进入系统(黑屏、卡在GRUB或直接进入BIOS),那么我们需要进入“高级调试”模式。

4.1 进入“试用Ubuntu”环境进行侦查

在安装开始时,GRUB菜单中有一个“Try Ubuntu”选项。当安装失败后,我们可以通过这个选项引导进入一个完整的、运行在内存中的Ubuntu桌面环境。这是一个强大的故障排查工具。

进入试用桌面后,打开终端(Ctrl+Alt+T)。

第一步,确认系统是否识别到了RAID卡和阵列:

sudo lspci | grep -i raid

这条命令会列出所有RAID控制器。你应该能看到你的RAID卡信息(例如“Broadcom / LSI MegaRAID SAS-3 3108 [Invader]”)。

第二步,查看磁盘设备:

sudo fdisk -l

或者使用更清晰的lsblk命令:

lsblk -o NAME,SIZE,FSTYPE,MOUNTPOINTS,MODEL

仔细查看输出。你的RAID阵列应该显示为一个容量正确的设备(如/dev/sdb),而两块成员硬盘可能显示为/dev/sda/dev/sdc(假设/dev/sdb是U盘)。如果根本看不到/dev/sdb这样的大容量设备,问题可能出在RAID卡驱动上。

第三步,检查RAID阵列状态(如果使用megaclistorcli工具):对于Dell PERC(基于LSI)的卡,可以尝试安装storcli工具来查看。首先下载对应版本的storclideb包,然后用dpkg安装并查看:

# 假设你已经下载了storcli_xxx_all.deb sudo dpkg -i storcli_xxx_all.deb sudo storcli /c0 show

这个命令会显示控制器0(/c0)上所有虚拟驱动器和物理磁盘的状态。确保你的RAID1状态是“Optimal”。

4.2 安装缺失的RAID卡驱动(罕见但关键)

绝大多数主流硬件RAID卡(如LSI/Broadcom/Avago系列、Intel VROC)的驱动都已集成在Ubuntu 22.04的内核中。但如果你的卡非常新或非常旧,有可能需要手动安装驱动。

如果在试用环境中使用lspci看到了RAID卡,但lsblk却看不到阵列磁盘,这很可能就是驱动问题。你需要去服务器或RAID卡制造商的官网,查找适用于Ubuntu 22.04 (内核5.15) 的驱动程序,通常是一个.deb包或源码包。在试用环境中,你可以联网下载并安装它。

例如,对于某些较新的PMC-Sierra(Adaptec)卡,可能需要安装aar驱动。安装驱动后,再次执行lsblk,应该就能看到阵列磁盘了。

4.3 使用chroot修复引导(最后的救命稻草)

如果你能确认磁盘和分区都存在(/dev/sdb1,/dev/sdb3等),但重启后就是无法引导,很可能是GRUB安装位置不正确或配置损坏。这时,我们可以在试用环境中“钻入”已安装的系统,重新安装和配置GRUB。

  1. 挂载已安装系统的根分区和EFI分区:

    sudo mount /dev/sdb3 /mnt sudo mount /dev/sdb1 /mnt/boot/efi

    (请根据你的实际分区设备号调整/dev/sdb3/dev/sdb1

  2. 挂载必要的虚拟文件系统,并chroot进入目标系统:

    for i in /dev /dev/pts /proc /sys /run; do sudo mount -B $i /mnt$i; done sudo chroot /mnt

    执行chroot后,你的终端环境就“切换”到了已经安装在硬盘上的那个Ubuntu系统。

  3. chroot环境中重新安装和配置GRUB:

    # 更新initramfs,确保包含必要的RAID模块 update-initramfs -u -k all # 重新安装GRUB到EFI分区 grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=Ubuntu --recheck # 更新GRUB配置,扫描所有可引导的系统 update-grub
  4. 退出并重启:

    exit sudo umount -R /mnt sudo reboot

    拔掉U盘,让服务器从硬盘启动。这次,GRUB菜单应该能正常出现了。

5. 安装后优化与验证:确保阵列健康运行

系统成功启动后,我们的工作还没完。我们需要验证RAID1阵列是否在操作系统中被正确识别,并处于健康状态。

5.1 安装RAID管理工具

对于Dell PERC (LSI) 卡,megacli或它的继任者storcli是必备的管理工具。它们通常不包含在默认仓库中。

# 添加Dell/EMC的仓库并安装storcli (以Dell为例,具体包名请查询官网) wget -qO - https://linux.dell.com/repo/hardware/dsu/bootstrap.cgi | sudo bash sudo apt-get update sudo apt-get install storcli

安装后,可以使用sudo storcli /c0/e252/s0 show(具体路径请根据sudo storcli /c0 show的输出调整)来查看指定物理磁盘的详细信息,或者使用sudo storcli /c0/v0 show查看虚拟驱动器状态。

5.2 监控阵列状态与配置告警

一个健康的RAID1阵列,其状态应该始终显示为“Optimal”。你可以将storcli的命令加入crontab定期运行,或者配置smartd来监控硬盘的S.M.A.R.T.状态。

更重要的是一块硬盘故障时的处理。当RAID1中的一块硬盘失效时,阵列会进入“Degraded”状态,但系统仍可正常运行。此时,你需要:

  1. 通过storcli或服务器管理界面(iDRAC、iLO)确认故障硬盘位置。
  2. 在关机状态下,热插拔更换故障硬盘(如果服务器支持)。
  3. 开机进入RA卡配置界面(Ctrl+R),将新硬盘加入到原有的RAID1阵列中,阵列会自动开始“重建(Rebuild)”。
  4. 在操作系统中,你可以通过storcli /c0/v0 show rebuild来查看重建进度。

一个非常重要的经验:对于硬件RAID,在更换硬盘前,强烈建议在BIOS或管理界面中确认硬盘的“Foreign State”(外来状态)是否被清空。有时新硬盘会被识别为“外来配置”,需要先清除此状态才能用于重建。

5.3 性能与稳定性考量

RAID1提供了冗余,但写入性能理论上与单盘相同(因为数据要写两份)。对于Ubuntu系统盘来说,这通常不是瓶颈。为了最大化稳定性和兼容性,我有几点建议:

  • 定期更新:保持系统内核和storcli等管理工具更新,以获得最新的驱动和Bug修复。
  • 备份EFI分区:虽然RAID1保护了数据,但EFI分区的内容相对独立。在重大系统变更前,可以手动备份/boot/efi目录下的内容。
  • 测试灾难恢复:在非生产环境,模拟一块硬盘故障,练习更换和重建流程。这比任何文档都管用。

整个流程走下来,在RAID1上安装Ubuntu 22.04更像是一次对Linux存储栈和引导过程的深入理解。它要求你跳出图形化安装程序的“舒适区”,直接与磁盘、分区和引导加载器对话。一旦掌握了这套方法,无论是面对更复杂的RAID5、RAID10,还是不同的硬件品牌,你都能做到心中有数,从容应对。毕竟,对于服务器而言,稳定性和可控性,远比点击几下鼠标完成安装要重要得多。

http://www.jsqmd.com/news/1378856/

相关文章:

  • Fan Control完全指南:Windows风扇控制软件从入门到精通
  • Windows注册表命令行管理:Reg命令查询、诊断与实战应用详解
  • # (实验室招新版)大津法与 OpenCV 图像基础:新手完整教程(基于 C++ 实例)
  • 终极微信工具箱:5分钟快速上手,彻底告别微信手动整理烦恼
  • DeepSeek大肥鱼本地部署指南:从环境准备到API集成的完整实践
  • 免费矢量图转换终极指南:5分钟将普通图片升级为无限放大矢量图
  • 猫抓浏览器扩展:如何突破网页资源封锁,实现专业级媒体内容智能捕获
  • 打造便携版Postman:免安装、数据随身的API测试解决方案
  • Pygame性能优化:脏矩形技术原理与实战避坑指南
  • Roboto字体完全指南:如何在你的项目中免费使用谷歌官方字体
  • MySQL连接查询:从笛卡尔积到INNER/LEFT JOIN实战详解
  • Service Mesh 服务网格落地经验:按资源、延迟和人工成本拆账
  • 终极开源资产管理系统:如何用Ralph轻松管理数据中心与IT资产
  • 服装工位AI质检:人机判定分歧的标准化上报与闭环处理机制
  • 如何快速配置WandEnhancer:3步实现客户端增强与远程控制
  • Linux文件时间戳操作指南:mtime、atime、ctime查看与修改
  • FIFA 23实时编辑器终极指南:打造专属足球世界
  • Agent死循环:五大成因、排查心法与架构免疫实践
  • Aider:本地命令行AI编程助手,无缝集成Git工作流
  • 2026四向穿梭车自动化立体库厂家盘点:五家实力派深度评测
  • UE4 3D UI防穿模:双组件架构与深度材质实战方案
  • 免费开源AI图像放大神器:5分钟学会Upscayl终极指南
  • 从Prompt Engineering到Loop Engineering:构建AI智能循环系统的编码范式革命
  • 你的青春回忆需要备份吗?GetQzonehistory自动化归档QQ空间记忆
  • 从CC Switch到Token Router:微服务流量治理的架构演进与实践
  • 如何用3步快速修复损坏的MP4视频?Untrunc专业视频修复指南
  • 从Bloodshed到小熊猫:Dev-C++现代化升级与项目迁移实战指南
  • Git Commit规范与AI辅助实践指南
  • FastJson AutoType漏洞深度解析:从原理到实战的纵深防御体系
  • Windows自动备份与清理:批处理脚本+任务计划程序实战指南