谜题拼图逐渐完整,Linux 一键重装处理不规则 IPv4 + 多盘 raid 0 大 BOSS 终极挑战

论坛主贴:

https://www.nodeseek.com/post-9383-1

github:

https://github.com/leitbogioro/Tools

图库为 imgur.com,国内用户需挂梯子全局才能查看。

前两天隔壁论坛 mjj zhazhahui(渣渣辉,以下简称“辉哥”)给我发了个私信,说他手上有一台 SuperMicro 家的独服,重装时出了一些问题,叫我帮忙看看咋整。

这家的独服可以说是纯粹的“独服”,可定制型非常高,甚至可以通过 web 面板访问到 BIOS,主配置如下:

  • CPU: 按摩店(AMD)皓龙(Opteron)6272,16 核心 16 threads,老推土机架构,28nm 按摩店女朋友(GF Global Foundries)代工,能效比和 IPC 多少有点跟不上时代,关键是老推土机架构由于设计问题,多核共享单个缓存,所以又有“多核单线程”的“美誉”,不过无所谓了,只是闲谈,当服务器够用;
  • 内存:4 条 ddr3 1333Mhz,每条容量 16 GB,好像有 ECC 纠错,共 64 GB;
  • 主板:AMI(America Megatrends),BIOS firmware 最后一更新是 2016 年,每次开机时需要对内存做校验,导致开机速度较慢;
  • 存储:3 块 2TB 机械硬盘,第一块和第三块对应的 OEM 型号分别为:HUA7230 和 HUA 7220,相近的零售款是日立(Hitachi)Ultrastar 7K3000 2TB,缓存 64MB,7200 RPM,第二块是希捷的 Barracuda ST2000DM001,核心参数缓存和 RPM 与两块日立盘一致,无固态硬盘,随机读写可谓是垃圾中的战斗鸡,机械硬盘的通病。三块 hdd 通过 LSI 阵列卡连接,非通过 sata 直通在主板上;
  • 网卡:两块 Intel gigabit,第一块承担 IPv4 和 IPv6 访问的职责,第二块无作用,暂不直到干啥用。IPv4 不规则静态,IPv6 dhcp 动态。

最开始,辉哥说这机器能进 BIOS 的时候,我是很震惊的,这年头能有这么大自由度配置的机器着实不多见了。而且它家面板也不太好进,得先配置一个 OpenVPN,通过内网 IP 访问 web 面板,最骚的是 VNC 界面不是常见的 noVNC,而是用 JAVA 写的,需要在机器上装一个 JAVA 库,而且系统重装、运维等 tickets,客服最起码 2 天之内才能回应,而且一切都是手动的,全是感情,不带一丝技巧。

本贴一切操作都在辉哥提供的 Windows 虚拟机里进行,直到用脚本重装前,一切流程纯手动,包括调整 LSI 阵列卡,给第一块硬盘先安装系统,这一系列操作给我找回了最初玩机时,最原始、最纯粹、最充足的快乐,我好久都没有这么开心过了。

首先是解决网络配置问题,之前这个 https://www.nodeseek.com/post-15633-1 帖子里,面对不规则 IPv4 IPv6 配置,我已经有了解决方案,即向 Debian installer 写入 IPv6 配置,以 IPv6 栈完成系统的安装、静态 IPv4 配置(不管原系统中 IPv4 是 dhcp 还是静态,统一按静态配置,避免出现 Hetzner 那种 dhcp 服务器挂掉的情况)刷入等工作。

但百密一疏,我还是漏了一个地方,就是没考虑到不规则 IPv4 IPv6 dhcp 这种情况,看代码就知道:

红框框出来的部分是脚本检查到了机器为双栈,且 IPv4 不规则,需要用 IPv6 配置,但这台机器的 IPv6 部分是 dhcp 配置的,结果就是跳过了判断式“[[ "$Network6Config" == "isStatic" ]]”写入 IPv6 静态配置的操作,解决方法很简单,检查 IPv6 配置地方,这里加一条:

因为检查 IPv6 栈总是在检查 IPv4 栈之后进行的,所以从检查 IPv4 栈获取到的 "$BiStackPreferIpv6" 变量,就会影响到在新安装系统内是否用静态或动态配置 IPv6 网络,目前的策略显然是用静态配置 IPv6,因为如果 d-i preseed/netcfg 部分如果不给某 IP 栈配置,Debian installer 是按 IPv4 dhcp 优先配置的。

在本次案例中,由于 IPv4 部分是静态配置,不支持 dhcp 配置,所以重装会失败,经过修改后,此问题已解决。

然后接下来的问题才逐渐重量级。

我发现机器原生硬盘的配置是在 LSI 阵列卡里已经用 3 块硬盘组建了硬 raid 0 array,所以在系统中看到的硬盘只有 5.5 TB 的一块 /dev/sda,硬 raid 的抽象层级比系统级 raid 要高,所以硬 raid 后的阵列对任何操作系统而言都是一整块单独的硬盘。

加上之前修改的 bug,我本以为重装应该没问题了,结果看着 Debian installer 进度条跑完,发现 grub 挂了,进入恢复模式:

辉哥说在这种硬 raid 上装过的系统,要做个什么设置,反正我看得是头昏眼花,完全不懂:

不过无所谓,既然硬 raid 搞不定,用软 raid 就行了,这才是我擅长的主场,把 LSI 里的 3 块硬 raid 0 array 删了,让硬盘逻辑上以直通形式连接到主机(物理上还是得走 LSI 阵列卡,除非让机房网管把连接到主板 PCIE 上的 LSI 阵列卡上的三根 sata 线拔了,直接接到主板 sata 口上)。

强制关机,重启。直接进 VNC,观察主机启动时显示的画面,到“Ctrl C to start LSI......” 时,就要多按几次 Ctrl C ,才能确保进入 LSI 阵列卡配置界面:

继续等待阵列卡完成自检工作:

到了蓝底界面,才算真正进入了 LSI 阵列卡配置界面,默认项回车:

保持 Enabled BIOS & OS 选项不变:

方向键选择“RAID Properties”,回车

此时是能看到连接到阵列卡上 3 块硬盘的型号和容量的,回车“Manage Array”:

按方向键,选择到最后一项“Delete Array”,即删除阵列,数据有风险,操作需谨慎,请勿在任何有重要数据的计算机上,进行硬盘阵列的删除操作!

按“Y”确认删除:

此时 LSI 界面又回到了最开始进入时的,再回车选择“RAID Properties”:

发现提示创建各种 RAID 阵列,说明已有的硬 Raid 0 阵列已被删除。

选择 SAS Topology,可看到 3 块硬盘目前都是以逻辑直通形式连接到系统。

然后按几次 Esc 键,从各三级二级菜单退出,直到退出 LSI 阵列卡配置

此时所有硬盘上的数据由于已经被全部擦除,且未安装任何操作系统,所以独服是无法启动的。所以可以选择强制关机,再开机,按“Del”键进 BIOS 设置,查看一下 3 块硬盘连接到系统的情况:

有三个 SCSI 设备连接到了主板,可见硬 Raid 阵列已取消,否则这里仅能看到一块设备。

此时停留在 BIOS 界面先不要动,把 Debian netinstall ISO 挂载到机器上,ISO 文件来自 Debian.org: https://cdimage.debian.org/debian-cd/current/amd64/iso-cd/

挂载好光盘后,再从 BIOS 中重启系统,SuperMicro 的机器是优先以 ISO 启动,即使硬盘上有操作系统,所以不需要设置启动设备顺序。

稍等片刻,熟悉的安装界面来了:

网络配置步骤未展示,因为这台机器的 IPv6 支持 dhcp,当尝试 dhcp IPv4 配置网络失败后,安装程序自动用 IPv6 dhcp 配置好了网络。

选择单盘模式安装:

此时由于光盘本身占着 sda 设别名,所以识别到的硬盘按顺序变成了 sdb sdc sdd,不过只要在安装后重启前把光盘拔掉,重启后的硬盘顺序就还原成了 sda sdb sdc。

分区也都保持默认,怎么简单怎么来:

手动安装的时候也只选择“SSH server”,保证能通过 ssh 连接到服务器,桌面环境和 standard system utilities 都不需要。

安装 grub,并将 grub 安装到默认第一块硬盘:

弹出对话框是否重启前,应当先将 ISO 弹出,否则系统重启后还是会选择从光盘启动。

手搓 IPv4 静态部分网络配置中…… 在 /etc/network/interfaces 里写入相关配置,退出后 systemctl restart networking 重启下网络服务,双栈网络就配置好了,看图里网络配置文件,很明显 IPv6 部分是以 dhcp 配置的:

能进 ssh 就方便多了,执行脚本重装,软 raid 0:

bash InstallNET.sh -debian 12 -raid "0"

显然,脚本按照预期去配置网络了,即发现 IPv4 部分不规则 IPv6 dhcp,并在 preseed.cfg 中写入 IPv6 静态配置,强制让 Debian installer 读取 IPv6 静态配置完成第一阶段的网络配置工作。

sda sdb sdc 三盘软 raid 0 recipe 也按预期的效果写入 preseed:

不规则 IPv4 配置也按预期在系统主要文件安装好后到重启前的 late_command 阶段写入:

系统安装好后,查看 /etc/network/interfaces 网络配置文件里的参数、lsblk 查看分区详情,IPv4/IPv6 ping google.com,完全没有任何问题。终极大考圆满成功。

一些缺陷:

  1. 在已 Raid 0 的 Debian 12 重装为红帽系,经测试仅 Fedora 38 成功,其他红帽系全部失败,据说是因为一个不识别硬盘的 bug 导致的。Fedora 37 的时候才有人报告了这一 bug:

https://bugzilla.redhat.com/show_bug.cgi?id=2088113

恐怕至少得重装成未来的红帽 10,才不会有问题。

  1. 在已 Raid 0 的 Debian 12 上指定任何单盘,单盘重装成任何脚本支持的 Linux 发行版,都会出问题,据推测是原硬盘上的分区表未被删除干净 LSI 阵列卡驱动识别有问题导致的,该问题在虚拟机中测试并未发现。
点赞
  1. hostlocmjj说道:

    前排支持大佬脚本

  2. Kyoma说道:

    大佬太牛了

发表回复

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

×
订阅图标按钮