我有一个虚拟机,它有一个附加的带有 fstab 条目的 raid 设备:
/dev/md127 /mnt/blah ext4 nofail 0 2
RAID 磁盘已损坏,并且在启动过程中设备进入紧急/维护模式,这意味着只有本地主机用户才能退出此模式并正常启动。在正常启动期间,系统日志中发生以下情况:
systemd-fsck[1272]: /dev/md127 contains a file system with errors, check forced.
systemd-fsck[1272]: /dev/md127: Inodes that were part of a corrupted orphan linked list found.
systemd-fsck[1272]: /dev/md127: UNEXPECTED INCONSISTENCY; RUN fsck MANUALLY.
systemd-fsck[1272]: #011(i.e., without -a or -p options)
systemd-fsck[1272]: fsck failed with exit status 4.
systemd-fsck[1272]: Running request emergency.target/start/replace
systemd[1]: [email protected]: Main process exited, code=exited, status=1/FAILURE
systemd[1]: [email protected]: Failed with result 'exit-code'.
systemd[1]: Failed to start File System Check on /dev/md127.
systemd[1]: Dependency failed for /mnt/blah.
systemd[1]: Dependency failed for Provisioner client daemon.
我的猜测是,由于袭击磁盘损坏,操作系统进入紧急/维护模式:
systemctl --state=failed
UNIT LOAD ACTIVE SUB DESCRIPTION
● [email protected] loaded failed failed File System Check on /dev/md127
我想要的是无论被攻击的驱动器是否损坏/无法安装,虚拟机都会启动,因此它不应该进入紧急/维护模式。我按照这些帖子尝试禁用紧急/维护模式:
我必须首先local-fs.target.d
在 中创建目录/etc/systemd/system/
,这感觉不对。然后我创建了一个nofail.conf
包含/etc/systemd/system/local-fs.target.d/nofail.conf
:
[Unit]
OnFailure=
加载该放置文件后,我能够确认 local-fs.target 找到了该放置文件:
sudo systemctl status local-fs.target
● local-fs.target - Local File Systems
Loaded: loaded (/lib/systemd/system/local-fs.target; static; vendor preset: enabled)
Drop-In: /etc/systemd/system/local-fs.target.d
└─nofail.conf
Active: active since Tue 2019-01-08 12:36:41 UTC; 3h 55min ago
Docs: man:systemd.special(7)
但是,重新启动后,虚拟机仍然处于紧急/维护模式。我错过了什么吗? nofail.conf 解决方案不适用于 raid 磁盘吗?
编辑:当系统启动到紧急模式时,我能够从日志中打印出来(抱歉,这是一个屏幕截图,因为我无权访问主机,不得不向所有者询问):
这是以下的输出systemctl for systemd-fsck@dev-md127
:
sudo systemctl status --no-pager --full systemd-fsck@dev-md127
● [email protected] - File System Check on /dev/md127
Loaded: loaded (/lib/systemd/system/[email protected]; static; vendor preset: enabled)
Active: failed (Result: exit-code) since Thu 2019-01-10 12:05:44 UTC; 2h 57min ago
Docs: man:[email protected](8)
Process: 1025 ExecStart=/lib/systemd/systemd-fsck /dev/md127 (code=exited, status=1/FAILURE)
Main PID: 1025 (code=exited, status=1/FAILURE)
systemd[1]: Starting File System Check on /dev/md127...
systemd-fsck[1025]: /dev/md127 contains a file system with errors, check forced.
systemd-fsck[1025]: /dev/md127: Inodes that were part of a corrupted orphan linked list found.
systemd-fsck[1025]: /dev/md127: UNEXPECTED INCONSISTENCY; RUN fsck MANUALLY.
systemd-fsck[1025]: (i.e., without -a or -p options)
systemd-fsck[1025]: fsck failed with exit status 4.
systemd-fsck[1025]: Running request emergency.target/start/replace
systemd[1]: [email protected]: Main process exited, code=exited, status=1/FAILURE
systemd[1]: [email protected]: Failed with result 'exit-code'.
systemd[1]: Failed to start File System Check on /dev/md127.
正如我之前指出的,我已经nofail
开始了/etc/fstab
。现在的问题是:
- 截图中失败的依赖项中的依赖项是什么?
- 如果 fsck 失败
/dev/md127
,为什么会进入紧急模式以及如何禁用它?
编辑2:
我可以添加的其他一些内容是:
- 该虚拟机是一个 kvm 虚拟机
- 这是一次软件袭击
亲切的问候,安库尔
答案1
你的系统尝试过修复损坏并自动启动,但它不能。这就是它进入紧急模式的原因。
这不是您可以覆盖的内容,因为文件系统无法在此状态下挂载,并且您指定在引导时挂载文件系统。
您可以尝试以下方法之一:
- 不要损坏文件系统。在数据仍在写入时,正常卸载它,而不是硬关闭虚拟机。
- 不要自动挂载文件系统(
noauto
在 中设置/etc/fstab
)。 VM 将启动,但您仍然需要稍后手动进入并挂载文件系统。 - 切换到更具弹性的文件系统,例如 XFS。
答案2
nofail
由于 bug,systemd 不支持fsck 失败。我有固定的它适用于 systemd 250 及更高版本。
如果您坚持使用旧版本的 systemd,我认为您唯一的选择就是不使用/lib/systemd/systemd-fsck
二进制文件。也许不要在 中列出文件系统/etc/fstab
,而是使用您自己的 systemd 单元来 fsck 并挂载它。