You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Ubuntu Server添加iSCSI磁盘至卷组后无法启动的故障修复求助

Ubuntu Server添加iSCSI磁盘至卷组后无法启动的故障修复求助

这种情况我之前帮朋友排查过好几次,核心问题就是系统在启动到挂载根文件系统的早阶段,iSCSI磁盘还没完成连接,导致依赖它的LVM卷组没法激活,直接卡进initramfs了。下面给你一步步落地的排查和修复方法:

一、先进入chroot环境操作系统配置

因为现在直接启动进不了系统,我们还是用之前的Live CD启动,先挂载根逻辑卷并进入chroot(相当于直接操作原系统的环境):

  1. 挂载你的根逻辑卷到/mnt,替换成你的卷组和逻辑卷名:
    mount /dev/your_vg_name/your_root_lv_name /mnt
    
  2. 挂载系统必要的虚拟文件系统,保证chroot后能正常执行命令:
    mount --bind /dev /mnt/dev
    mount --bind /proc /mnt/proc
    mount --bind /sys /mnt/sys
    
  3. 进入chroot环境:
    chroot /mnt
    

二、让initramfs包含iSCSI启动所需的组件

启动早期的initramfs环境里如果没有iSCSI的驱动和连接脚本,就会导致系统还没连上iSCSI磁盘就尝试挂载根分区,这是核心问题。我们来修复这个:

  1. 确保open-iscsi工具包已安装(你之前用了应该有,保险起见再装一次):
    apt install --reinstall open-iscsi
    
  2. 重新配置open-iscsi,让它自动把iSCSI的启动钩子加入initramfs:
    dpkg-reconfigure open-iscsi
    
  3. 更新initramfs,把iSCSI相关的组件打包到启动镜像里:
    update-initramfs -u -k all
    

    这里-k all是更新所有内核版本的initramfs,避免因为GRUB选旧内核出问题。

三、配置iSCSI目标在启动时自动连接

接下来要确保系统启动时会自动连接你的iSCSI存储目标:

  1. 编辑iSCSI的主配置文件/etc/iscsi/iscsid.conf,确认以下参数(没有的话添加):
    node.startup = automatic
    node.session.timeo.replacement_timeout = 120
    node.conn[0].timeo.login_timeout = 15
    
    这些参数是保证iSCSI连接超时时间合理,避免启动时因为短暂网络问题连接失败。
  2. 重新发现你的iSCSI目标(替换成你的iSCSI服务器IP):
    iscsiadm -m discovery -t st -p 你的iSCSI服务器IP
    
  3. 把发现到的目标设置为自动启动(替换成你的目标名和服务器IP):
    iscsiadm -m node -T 你的iSCSI目标IQN -p 你的iSCSI服务器IP --op update -n node.startup -v automatic
    
  4. 验证配置:执行iscsiadm -m node --list,找到对应的iSCSI目标,确认node.startup字段是automatic

四、检查GRUB和LVM配置

  1. 编辑GRUB配置文件/etc/default/grub,确保GRUB_CMDLINE_LINUX里没有阻止存储设备扫描的参数,反而可以添加scsi_mod.scan=sync来强制同步扫描SCSI设备(包括iSCSI):
    把原有的GRUB_CMDLINE_LINUX改成类似这样:
    GRUB_CMDLINE_LINUX="scsi_mod.scan=sync"
    
  2. 更新GRUB生效:
    update-grub
    
  3. 确保LVM的卷组在启动时能自动激活:执行vgchange -ay 你的卷组名,然后检查/etc/lvm/lvm.conf里的auto_activation_volume_groups是否包含你的卷组名。

五、测试重启

  1. 退出chroot环境:exit
  2. 卸载所有挂载的目录:
    umount /mnt/sys /mnt/proc /mnt/dev /mnt
    
  3. 重启服务器,看是否能正常进入系统。

如果还是进initramfs,你可以在initramfs里执行dmesg | grep iscsi查看iSCSI模块的加载和连接日志,排查具体是模块没加载还是连接失败;也可以执行iscsiadm -m node --login手动尝试连接iSCSI目标,看是否能成功。

备注:内容来源于stack exchange,提问作者JoBo

火山引擎 最新活动