一、先诊断:RHEL 9 虚拟机进入紧急模式的 5 大核心原因

在进入修复操作前,需先明确紧急模式的触发逻辑 ——RHEL 9 启动时会依次加载 “内核→initramfs→文件系统→关键服务”,任何环节出错都会触发紧急模式。结合 Synology 官方文档及实际案例,DSM 环境下的常见原因可归纳为 5 类,对应不同排查方向:
触发原因
具体表现(紧急模式提示信息)
常见场景
1. /etc/fstab 配置错误
提示 “mount: /mnt/data: can't find in /etc/fstab.” 或 “invalid filesystem type”
手动修改 fstab 添加挂载点、UUID 写错、文件系统类型填错(如 xfs 写成 ext4)
2. 虚拟磁盘文件损坏
提示 “XFS filesystem corruption”“ext4 filesystem error” 或 “can't access block device”
虚拟机异常关机(如 DSM 断电、强制关闭虚拟机)、虚拟磁盘扩容失败
3. initramfs 镜像损坏
提示 “error while loading shared libraries” 或 “initramfs not found”
内核更新失败(如 yum update kernel 中断)、initramfs 重建不完整
4. 虚拟磁盘挂载点丢失
提示 “mount point /mnt/backup does not exist”
手动删除挂载目录(如 rm -rf /mnt/data)、目录权限被修改(如 chmod 000 /mnt/data)
5. SELinux 策略冲突
提示 “SELinux is preventing mount from mounton access on the directory”
开启 SELinux 后,挂载点无正确安全上下文(如未执行 chcon 命令)
关键提醒:进入紧急模式后,系统会提示 “Give root password for maintenance (or press Control+D to continue):”,此时输入 RHEL 9 的 root 密码即可进入命令行维护模式(只读权限,需手动挂载为可写),所有修复操作均需在此模式下执行。

二、4 步修复流程:从进入紧急模式到恢复正常启动

修复的核心逻辑是 “先定位错误原因→再针对性修复→最后验证启动”,以下分 4 步操作,覆盖所有常见原因的解决方案,每步均标注 DSM 虚拟机特有的注意事项:

第一步:进入紧急模式,将根文件系统挂载为可写(基础操作)

紧急模式下默认根文件系统(/)为 “只读权限”,无法修改配置文件(如 fstab)或执行修复命令,需先挂载为可写,步骤:
  1. 输入 root 密码进入维护模式:
虚拟机启动到紧急模式提示后,输入 RHEL 9 的 root 密码(若忘记密码,需通过 RHEL 9 安装介质进入救援模式重置,后续 FAQ 会说明),按 Enter 键进入命令行(提示符为 “sh-5.1#” 或 “root@localhost:~#”)。
  1. 查看当前根文件系统挂载状态:
执行命令 mount | grep /,查看根分区的挂载参数,若显示 “ro,relatime”(ro=read-only),说明当前为只读,需执行下一步挂载为可写。
  1. 将根文件系统重新挂载为可写:
执行命令 mount -o remount,rw /,无报错则表示挂载成功;再次执行 mount | grep /,确认参数变为 “rw,relatime”(rw=read-write),此时可修改任何系统配置文件。
DSM 虚拟机注意:若执行mount -o remount,rw /提示 “device is busy”,需先关闭虚拟机内可能占用根分区的服务(如systemctl stop NetworkManager),或重启虚拟机重新进入紧急模式(避免 DSM 后台进程占用虚拟磁盘)。

第二步:定位错误原因(3 个核心排查命令)

挂载根分区为可写后,需通过日志和配置文件定位具体错误,推荐使用以下 3 个命令,覆盖 90% 以上的故障场景:

1. 查看启动日志,定位最新错误(最直接)

RHEL 9 的启动日志存储在/var/log/boot.log,执行命令 cat /var/log/boot.log | tail -50(查看最后 50 行日志),重点关注含 “error”“failed”“can't” 的条目,示例:
  • 若日志显示 “mount: /mnt/data: can't find in /etc/fstab.”→对应 “fstab 配置错误”;
  • 若显示 “XFS error -5 occurred at line 123 of file fs/xfs/xfs_buf.c”→对应 “XFS 文件系统损坏”;
  • 若显示 “SELinux: avc:  denied  { mounton} for  pid=123 comm="mount" name="data" dev="vda3" ino=456 scontext=system_u:system_r:init_t:s0 tcontext=unconfined_u:object_r:default_t:s0 tclass=dir”→对应 “SELinux 策略冲突”。

2. 验证 /etc/fstab 配置正确性(高频错误点)

fstab 是启动时自动挂载文件系统的配置文件,90% 的挂载相关错误源于此,执行命令 cat /etc/fstab 查看配置,按以下标准核对每一行(格式:UUID=xxx 挂载点  文件系统类型  挂载参数  0 0):
  • UUID 正确性:执行 blkid 查看所有磁盘分区的 UUID,对比 fstab 中的 UUID 是否一致(如 fstab 中UUID=1234-ABCD,blkid 显示/dev/vda3: UUID="1234-ABCD"),UUID 错 1 个字符都会导致挂载失败;
  • 挂载点存在性:执行 ls -ld 挂载点(如ls -ld /mnt/data),若提示 “No such file or directory”,说明挂载目录被删除,需重建;
  • 文件系统类型匹配:执行 lsblk -f 查看分区的文件系统类型(如 vda3 为 xfs),对比 fstab 中的类型是否一致(如 fstab 中写 “xfs” 而非 “ext4”)。

3. 检查虚拟磁盘文件系统完整性

若日志提示文件系统损坏,需检查对应分区的完整性,执行命令 fsck /dev/vda3(将vda3替换为故障分区,可通过lsblk查看分区列表),注意:
  • XFS 文件系统:需用xfs_repair /dev/vda3(xfs 不支持 fsck,专用修复命令),执行前需确保分区未挂载(紧急模式下默认未挂载除根分区外的其他分区,可通过mount | grep vda3确认);
  • ext4 文件系统:用fsck.ext4 /dev/vda3,若提示 “clean, 1234/5678 files”,说明无损坏;若提示 “errors detected”,按提示输入 “y” 确认修复(修复过程中可能会删除损坏的文件,建议先备份)。

第三步:针对性修复(按原因分类操作)

根据第二步定位的错误原因,执行对应修复操作,以下是 5 类常见原因的具体解决方案:

场景 1:/etc/fstab 配置错误(最常见)

  • 错误 1:UUID 写错 / 文件系统类型错:
执行 nano /etc/fstab 打开配置文件,找到错误行(如UUID=wrong-uuid /mnt/data ext4 defaults 0 0),参考blkid和lsblk -f的结果,修改为正确的 UUID 和文件系统类型(如UUID=correct-uuid /mnt/data xfs defaults 0 0),按Ctrl+O保存,Ctrl+X退出。
  • 错误 2:挂载点不存在:
执行 mkdir -p 挂载点(如mkdir -p /mnt/data),重建挂载目录;若权限错误,执行 chmod 755 /mnt/data(设置默认权限),chown root:root /mnt/data(设置所有者)。
  • 验证修复:执行 mount -a(测试 fstab 所有配置是否能正常挂载),无报错则修复成功;若报错,根据提示进一步修改(如 “bad superblock” 说明文件系统类型仍错)。

场景 2:虚拟磁盘文件系统损坏

  • XFS 文件系统修复:
    1. 执行 umount /dev/vda3(确保分区未挂载,若提示 “device is busy”,执行fuser -m /dev/vda3查看占用进程,用kill -9 进程ID结束);
    1. 执行 xfs_repair /dev/vda3,若提示 “log needs replaying”,按提示输入 “y” 开始修复,修复完成后显示 “Phase 6 - check inode connectivity: done”;
    1. 执行 mount /dev/vda3 /mnt/data(手动挂载测试),无报错则修复成功。
  • ext4 文件系统修复:
    1. 执行 umount /dev/vda3;
    1. 执行 fsck.ext4 -f /dev/vda3(-f强制检查,即使系统认为文件系统干净),按提示输入 “y” 确认修复;
    1. 执行 mount /dev/vda3 /mnt/data 测试挂载。
DSM 虚拟机注意:若虚拟磁盘是通过 DSM“存储池→虚拟机” 创建的,修复前建议在 DSM 中对虚拟磁盘文件(通常在/volume1/@VirtualMachine/目录下)执行 “检查完整性”(DSM 控制面板→存储→存储池→操作→检查),排除 DSM 侧的磁盘错误。

场景 3:initramfs 镜像损坏

  • 执行 dracut -f /boot/initramfs-$(uname -r).img $(uname -r)(重建当前内核的 initramfs 镜像,$(uname -r)自动获取当前内核版本,如5.14.0-xxx.el9.x86_64);
  • 重建完成后,执行 ls -l /boot/initramfs-$(uname -r).img,确认文件大小不为 0(正常约 100-200MB);
  • 若重建失败(提示 “missing kernel modules”),需重新安装内核:yum reinstall kernel,再执行上述 dracut 命令。

场景 4:SELinux 策略冲突

  • 临时关闭 SELinux 测试:执行 setenforce 0(临时关闭,重启后恢复),然后执行 mount -a,若挂载成功,说明是 SELinux 冲突;
  • 永久配置 SELinux 上下文:执行 chcon -R -t filesystem_t 挂载点(如chcon -R -t filesystem_t /mnt/data,给挂载点添加正确的安全上下文);
  • 验证:执行 restorecon -v /mnt/data(恢复 SELinux 上下文并显示结果),再执行 mount -a,无报错则修复成功;若需永久关闭 SELinux(不推荐,影响安全性),可修改/etc/selinux/config,将SELINUX=enforcing改为SELINUX=disabled,重启生效。

第四步:验证修复效果,确保虚拟机正常启动

修复完成后,需通过 “重启测试” 和 “启动后检查” 确认问题彻底解决,步骤:
  1. 重启虚拟机:
执行 reboot 命令,退出紧急模式并重启虚拟机;在 DSM “虚拟机管理器” 中,观察虚拟机启动状态(从 “启动中” 变为 “运行中”,无报错提示)。
  1. 启动后检查关键项:
虚拟机正常启动后,登录 RHEL 9 系统(图形或命令行),执行以下命令验证:
    • mount | grep /mnt/data(确认 fstab 中的挂载点已自动挂载,参数含 “rw”);
    • df -h(查看磁盘空间,确认虚拟磁盘正常识别);
    • cat /var/log/boot.log | grep -i error(查看启动日志,无新的 error 条目);
    • systemctl is-active NetworkManager(确认关键服务正常运行,显示 “active”)。
  1. DSM 侧额外检查:
进入 DSM“虚拟机管理器→虚拟机”,选中 RHEL 9 虚拟机,点击 “详情→存储”,确认虚拟磁盘 “状态” 为 “正常”,无 “损坏”“未挂载” 提示;若之前有虚拟磁盘扩容操作,执行 lsblk 确认扩容后的分区已正常识别(如 vda3 从 20GB 变为 50GB)。

三、数据安全保障:修复前的备份技巧(避免数据丢失)

若虚拟磁盘包含重要数据(如业务文件、数据库),修复前建议先备份,避免修复过程中文件损坏,DSM 环境下有 2 种安全备份方式:

1. 通过 DSM 虚拟机快照备份(推荐,快速便捷)

  1. 进入 DSM“虚拟机管理器→虚拟机”,选中 RHEL 9 虚拟机,确保其处于 “关闭” 状态(若在紧急模式,先执行poweroff关闭);
  1. 点击 “操作→创建快照”,输入快照名称(如 “RHEL9_备份_20240520”),勾选 “拍摄内存快照”(可选,保留当前系统状态),点击 “确定”;
  1. 快照创建完成后,在 “快照” 标签页可看到备份记录,若修复失败,可点击 “恢复” 将虚拟机还原到备份状态。

2. 挂载虚拟磁盘文件到 DSM,手动备份数据(适用于无法创建快照的情况)

  1. 关闭 RHEL 9 虚拟机,在 DSM “File Station” 中找到虚拟磁盘文件(默认路径:/volume1/@VirtualMachine/[虚拟机名称]/[磁盘名称].vmdk 或 .qcow2);
  1. 安装 DSM “Virtual Disk Manager” 套件(套件中心搜索安装),打开后点击 “挂载”,选择虚拟磁盘文件,设置挂载点(如/mnt/vm_disk),点击 “确定”;
  1. 挂载成功后,在 DSM “File Station” 中进入/mnt/vm_disk,找到 RHEL 9 的分区(如/dev/vda3对应的挂载目录),将重要数据(如/home、/var/www)复制到 DSM 其他共享文件夹中,完成手动备份;
  1. 备份完成后,在 “Virtual Disk Manager” 中点击 “卸载”,再启动虚拟机进行修复。

四、常见问题 FAQ:解决修复过程中的高频疑问

1. Q:进入紧急模式后,忘记 RHEL 9 的 root 密码,无法进行修复,怎么办?

A:需通过 RHEL 9 安装介质进入救援模式重置密码,步骤:
  1. 在 DSM 虚拟机管理器中,编辑 RHEL 9 虚拟机的 “CD/DVD” 设置,选择 RHEL 9 ISO 镜像文件(需提前上传到 DSM),设置 “启动顺序” 为 “CD/DVD 优先”;
  1. 启动虚拟机,在 RHEL 9 启动界面按 “e” 编辑启动参数,找到 “linuxefi /vmlinuz-xxx ro root=UUID=xxx”,将 “ro” 改为 “rw init=/sysroot/bin/sh”,按Ctrl+X启动;
  1. 进入单用户模式后,执行 chroot /sysroot(切换到根文件系统),passwd root(输入新 root 密码,按提示确认);
  1. 执行 touch /.autorelabel(更新 SELinux 上下文,避免密码修改后无法登录),exit,reboot,重启后用新密码进入紧急模式。

2. Q:修复 fstab 后,执行mount -a提示 “mount: /mnt/data: permission denied”,怎么解决?

A:大概率是权限或 SELinux 问题,分 2 步排查:
① 检查目录权限:执行 ls -ld /mnt/data,确保权限为 “drwxr-xr-x”(755),若不是,执行 chmod 755 /mnt/data;
② 检查 SELinux:执行 getsebool -a | grep mount,确保 “mount_anyfile” 为 “on”,若为 “off”,执行 setsebool -P mount_anyfile on(-P永久生效);或临时关闭 SELinux(setenforce 0)后再测试。

3. Q:修复后虚拟机能正常启动,但重启 DSM 后 RHEL 9 再次进入紧急模式,原因是什么?

A:可能是 DSM 虚拟磁盘挂载顺序变化,导致 RHEL 9 识别的磁盘设备名改变(如 vda3 变为 vdb3),解决方案:
  1. 进入 RHEL 9 系统,执行 blkid 获取目标分区的 UUID(如/dev/vda3的 UUID);
  1. 执行 nano /etc/fstab,将所有 “/dev/vda3” 这类设备路径改为 “UUID=xxx”(用 blkid 获取的 UUID),保存退出;
  1. 执行 mount -a 测试,后续即使 DSM 磁盘顺序变化,RHEL 9 也能通过 UUID 正确挂载分区,避免复发。

总结:RHEL 9 虚拟机紧急模式的预防与修复原则

DSM 环境下 RHEL 9 虚拟机进入紧急模式,本质是 “启动环节的配置或文件异常”,遵循 “预防优先,修复有序” 的原则可大幅减少故障:
  1. 预防措施:修改 fstab 后先执行mount -a测试;虚拟机正常关机(避免强制关闭);内核更新时确保网络稳定(避免 initramfs 损坏);
  1. 修复原则:先通过日志定位原因(不盲目执行修复命令);修复前备份数据(快照或手动备份);修复后必做重启验证(确保问题彻底解决)。
按本文步骤操作,无论是 fstab 错误、文件系统损坏还是 SELinux 冲突,都能高效解决,让 RHEL 9 虚拟机快速恢复正常运行。若遇到复杂场景(如虚拟磁盘物理损坏),可联系 Synology 官方支持,提供 DSM 系统日志和虚拟机配置信息,获取进一步协助。
Synology DSM RHEL 9 虚拟机进入紧急模式?4 步排查 + 修复教程(含 fstab 配置)

新闻中心

联系我们

技术支持

  • ·

    Synology 无法访问共享文...

  • ·

    Synology NAS Win...

  • ·

    如何用 DiXiM Media ...

  • ·

    Synology DSM常规设置...

  • ·

    Active Backup fo...

  • ·

    Synology NAS打开Of...

  • ·

    Synology Migrati...

  • ·

    Synology Office多...

相关文章

地址:北京市海淀区白家疃尚品园             1号楼225

北京群晖时代科技有限公司

微信咨询

新闻中心