为什么 mount 对我来说默默失败?

为什么 mount 对我来说默默失败?

我正在尝试安装设备但没有成功。奇怪的是mount命令成功并返回退出代码0,但是设备没有挂载。知道为什么会发生这种情况或如何调查它吗?请看下面的例子:

[root@mymachine ~]# blkid -o list
device         fs_type  label     mount point        UUID
-----------------------------------------------------------------------------------------
/dev/xvda1     xfs                /                  29342a0b-e20f-4676-9ecf-dfdf02ef6683
/dev/xvdy      ext4               /vols/data         72c23c30-2704-42ec-9518-533c182e2b22
/dev/xvdb      swap               <swap>             990ff722-158c-4ad5-963a-0bc9e1e2b17a
/dev/xvdx      ext4               (not mounted)      956b5553-d8b4-4ffe-830c-253e1cb10a2f
[root@mymachine ~]# grep /dev/xvdx /etc/fstab
/dev/xvdx /vols/data5 ext4 defaults 0 0
[root@mymachine ~]# mount -a; echo $?
0
[root@mymachine ~]# blkid -o list
device         fs_type  label     mount point        UUID
-----------------------------------------------------------------------------------------
/dev/xvda1     xfs                /                  29342a0b-e20f-4676-9ecf-dfdf02ef6683
/dev/xvdy      ext4               /vols/data         72c23c30-2704-42ec-9518-533c182e2b22
/dev/xvdb      swap               <swap>             990ff722-158c-4ad5-963a-0bc9e1e2b17a
/dev/xvdx      ext4               (not mounted)      956b5553-d8b4-4ffe-830c-253e1cb10a2f
[root@mymachine ~]# mount /dev/xvdx /vols/data5; echo $?
0
[root@mymachine ~]# blkid -o list
device         fs_type  label     mount point        UUID
-----------------------------------------------------------------------------------------
/dev/xvda1     xfs                /                  29342a0b-e20f-4676-9ecf-dfdf02ef6683
/dev/xvdy      ext4               /vols/data         72c23c30-2704-42ec-9518-533c182e2b22
/dev/xvdb      swap               <swap>             990ff722-158c-4ad5-963a-0bc9e1e2b17a
/dev/xvdx      ext4               (not mounted)      956b5553-d8b4-4ffe-830c-253e1cb10a2f
[root@mymachine ~]#

完整的 fstab:

[root@mymachine ~]# cat /etc/fstab

#
# /etc/fstab
# Created by anaconda on Mon May  1 18:59:01 2017
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
UUID=29342a0b-e20f-4676-9ecf-dfdf02ef6683 /                       xfs     defaults        0 0
/dev/xvdb swap swap defaults,nofail 0 0
/dev/xvdy /vols/data ext4 defaults 0 0
/dev/xvdx /vols/data5 ext4 defaults 0 0

答案1

如果出现问题,通常 mount 不会返回 0。当我遇到类似的问题时,原因是 systemd 在挂载后立即卸载了文件系统。

您可以尝试strace mount /dev/xvdx /vols/data5查看系统调用的结果。您还可以尝试mount /dev/xvdx /vols/data5; ls -li /vols/data5查看在 mount 命令之后是否立即安装了某些内容。

答案2

除了已接受的答案之外,该答案指出某些东西(可能是 systemd)正在卸载文件系统 - 让我更详细地解释我的案例中发生的情况。

正如journalctl所示,它确实是systemd。

在我的场景中,我的 fstab 中有这个

/dev/sda6 /fasthome           ext4    defaults        0       2
/dev/sda7 /mnt/vms  ext4 defaults 0 2

(fasthome,如果您想知道是一个无需加密即可执行磁盘密集型操作的地方)。

因此,当我插入外部 USB 驱动器启动时,它变成了 sda,而我的内部驱动器变成了 sdb。显然这些挂载点不起作用,所以我更正它们如下:

/dev/disk/by-uuid/<some uuid> /fasthome ext4 defaults 0 2
/dev/disk/by-uuid/<other uuid> /mnt/vms ext4 defaults 0 2

然后我运行mount -a并且命令完成,没有错误,但似乎它们没有安装。所以我尝试mount /dev/disk/by-uuid ...同样的事情,最后我提出了这个问题。

是的,它是 systemd 卸载它们的,就我而言,这是因为之前 /fasthome曾经是尝试过要安装到/dev/sda6,systemd 完全挂在非活动设备上。因此,尽管我的 uuid 路径符号链接正确指向/dev/sdb6systemd,但不喜欢这里发生的情况。

在这种特殊情况下,答案很简单,就是重新启动,这样错误的设备引用就消失了。

我确信有 1001 种相似但不同的情况可能会导致这个问题,希望这里的细节能为人们提供足够多的线索来了解他们的具体情况。

答案3

它有助于运行systemctl daemon-reload或重新启动。

Systemd 认为缺少依赖项并立即卸载该卷。

我发现这个在https://github.com/systemd/systemd/issues/1741这是在之前的回答中提到的。

答案4

当我忘记删除旧条目时,同样的情况也发生在我身上/etc/fstab

这是非常不合理的行为,因为 fstab 条目指定了错误的 FS 类型,而 cli 命令是正确的。 mount 命令忽略了两者。

相关内容