NFS 循环依赖问题排查(Found ordering cycle)

文章描述了如何处理NFS服务器因循环依赖而无法启动的问题。首先,通过系统日志识别出循环依赖涉及的服务,然后使用dot工具分析依赖关系。如果发现rpc-statd-notify.service是循环依赖的一部分,可能需要删除该依赖。同时,检查/etc/exports和/etc/fstab文件,避免重复目录导致的循环依赖。最后,执行systemctldaemon-reload和systemctlstartnfs来重启NFS服务。
5月 10 13:08:46 hf-node-02 systemd[1]: Found ordering cycle on nfs-server.service/start 
5月 10 13:08:46 hf-node-02 systemd[1]: Found dependency on usr-local-kubeiaas-data-data\x2dvolumes.mount/start 
5月 10 13:08:46 hf-node-02 systemd[1]: Found dependency on nfs-server.service/start

日志显示循环依赖,nfs无法启动

排查循环项

查看依赖图

systemd-analyze dot nfs-server.service | dot -Tsvg > graph.svg

没有dot?

# - CentOS 
sudo yum install graphviz
export PATH="$PATH:/usr/bin/dot"
# - Ubuntu 
apt install graphviz

在这里插入图片描述
在这里插入图片描述

删除循环项

一般都是这个rpc-statd-notify.service
需要删掉这个依赖

 vi /usr/lib/systemd/system/nfs-server.service

在这里插入图片描述

亦有可能是人为配置出来的循环依赖:
如果在上方的依赖图中看到了手动配置依赖,请检查

  • /etc/exports(用于表示开放挂载)
  • /etc/fstab(用于表示进行挂载)

如果包含重复目录,则产生循环依赖
需要删除,修改文件,重载、启动

重启NFS

sudo systemctl daemon-reload
sudo systemctl start nfs

在这里插入图片描述

<think> 我们之前讨论了vmdk.lck文件的作用和处理方法,现在用户遇到了新的问题:在虚拟机中出现了'ordering cycle found,skipping GRUB failed boot detection'错误,并且虚拟机关不了机。 这个错误通常与Linux系统的启动过程(特别是GRUB引导)有关,同时虚拟机无法正常关机。我们需要结合这两个现象来解决问题。 步骤分析: 1. 错误信息解读:'ordering cycle found, skipping GRUB failed boot detection' - 这通常发生在系统启动时,GRUB在检测操作系统时遇到了依赖循环(ordering cycle),导致启动失败。 - 可能原因:系统更新后内核或initramfs镜像损坏、GRUB配置错误、文件系统错误等。 2. 虚拟机关机失败:可能是由于系统在启动过程中卡住,导致无法响应关机指令。 解决方案: 由于虚拟机无法正常启动且无法正常关机,我们需要从外部干预。 步骤: 1. 强制关闭虚拟机:由于无法正常关机,我们可以通过VMware的管理界面强制关闭虚拟机(相当于物理机的断电)。 - 在VMware vSphere Client或Workstation中,选择虚拟机,然后选择“关闭”或“强制关闭”(如果正常关闭无效)。 2. 检查虚拟机磁盘锁:在强制关机后,检查虚拟机目录下是否有残留的.vmdk.lck文件(按照之前讨论的方法),如果有则删除,避免影响后续启动。 3. 启动虚拟机进入恢复模式: - 强制关闭后,重新启动虚拟机,并在启动时快速按下`Shift`键(对于GRUB2)以进入GRUB菜单。 - 如果GRUB菜单没有出现,可能是启动过程太快,可以尝试在虚拟机启动时连续按`Esc`键(具体取决于VMware的BIOS设置)来进入GRUB。 4. 在GRUB菜单中选择“Advanced options for Ubuntu”(以Ubuntu为例,其他发行版类似),然后选择一个较旧的内核版本(recovery mode)启动。 5. 进入恢复模式菜单后,选择“root”进入root shell。 6. 在root shell中,我们可以执行以下修复操作: a. 检查文件系统:`fsck -f /dev/sda1`(请根据实际分区调整,通常根分区是sda1,可以使用`df -h`查看) b. 重新生成initramfs:`update-initramfs -u` c. 更新GRUB配置:`update-grub` d. 如果怀疑是最近安装的内核有问题,可以尝试卸载最新内核(谨慎操作,保留至少一个可用内核) 7. 重启虚拟机:执行`reboot`命令,看是否能够正常启动。 8. 如果上述步骤无法解决,可能需要考虑从备份恢复或重装系统。 注意事项: - 在强制关机虚拟机之前,确保没有其他程序正在写入磁盘(尽可能避免,但此时虚拟机已经无响应,只能强制)。 - 如果虚拟机有快照,可以尝试恢复到之前的状态。 如果问题依然存在,则可能需要更深入的排查,比如检查虚拟机磁盘是否损坏(使用VMware工具修复)等。 相关问题: 1. 如何修复GRUB引导失败? 2. 虚拟机无法正常关机有哪些常见原因? 3. 如何进入Linux系统的恢复模式? 4. 如何修复损坏的initramfs镜像? </think> ### 🔧 解决 `ordering cycle found, skipping GRUB failed boot detection` 错误及虚拟机关机失败问题 此错误通常发生在 **GRUB 引导顺序冲突** 导致系统无法正常启动,同时可能因 **进程死锁** 或 **磁盘锁残留** 造成虚拟机关机失败。以下是系统化解决步骤: --- ### 🛠️ **解决步骤** #### 1. **强制关闭虚拟机** 通过 VMware 底层命令强制终止进程: ```bash # 列出所有运行中的虚拟机 vim-cmd vmsvc/getallvms # 获取目标虚拟机 ID(如 123) vim-cmd vmsvc/getallvms | grep <虚拟机名> # 强制关闭虚拟机(ID替换为实际值) vim-cmd vmsvc/power.off 123 ``` > ⚠️ **注意**:此操作等效于物理机断电,可能需后续磁盘修复[^1]。 --- #### 2. **清理残留锁文件** 检查并删除残留的 `.lck` 文件(包括 GRUB 和磁盘锁): ```bash # 进入虚拟机存储目录 cd /vmfs/volumes/datastore1/<虚拟机目录> # 删除所有锁文件(确认虚拟机已关闭) rm -f *.lck ./*/*.lck ``` > 📌 典型锁文件位置: > - `*.vmdk.lck`(虚拟磁盘锁) > - `vmware.log.lck`(日志锁) > - `/boot/grub/` 下的临时锁(如 `grub.cfg.lck`) --- #### 3. **修复 GRUB 引导配置** 从 **Linux 恢复模式** 重建引导: ```bash # 挂载根分区(假设 /dev/sda1 为根分区) mount /dev/sda1 /mnt mount --bind /dev /mnt/dev mount --bind /proc /mnt/proc mount --bind /sys /mnt/sys chroot /mnt # 重装 GRUB 并重建配置 grub-install /dev/sda update-grub ``` > 💡 若无法进入恢复模式,使用 **Live CD** 启动后执行上述操作。 --- #### 4. **检查内核依赖冲突** 排查引发 `ordering cycle` 的内核模块或服务: ```bash # 查看启动失败的服务日志 journalctl -b -1 --priority=3 | grep "ordering cycle" # 禁用冲突服务(例:NetworkManager-wait-online) systemctl disable NetworkManager-wait-online.service ``` 常见冲突源: - 并行启动的服务依赖循环 - 内核驱动加载顺序错误 - 损坏的 `initramfs` 镜像 --- #### 5. **重建 initramfs 镜像** ```bash # 更新 initramfs(适配当前内核) update-initramfs -u -k $(uname -r) # 若指定内核版本(例:5.4.0-100) update-initramfs -u -k 5.4.0-100-generic ``` --- #### 6. **验证虚拟机配置** 在 VMware 中检查关键设置: - **BIOS 引导模式**:确保为 `EFI` 或 `Legacy BIOS`(与系统安装时一致) - **虚拟硬件版本**:升级到最新兼容版本 - **磁盘控制器类型**:`LSI Logic SAS` 或 `NVMe` 优于 IDE --- ### 🛡️ **预防措施** | **场景** | **操作** | |------------------------|------------------------------| | 系统更新前 | 创建虚拟机快照 | | 修改 GRUB 配置后 | 运行 `grub-validate` 检查语法 | | 频繁异常关机 | 定期执行 `fsck` 磁盘检查 | --- ### ❓ **相关问题** 1. 如何修复 `initramfs` 镜像损坏导致的启动失败? 2. VMware 虚拟机 BIOS 与 EFI 引导模式切换的正确方法? 3. `journalctl` 日志分析中哪些关键字段指示引导依赖冲突? 4. 如何自动化检测并清理 VMware 残留锁文件? [^1]: VMware 强制关闭虚拟机操作指南 [^2]: GRUB2 引导修复官方
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值