选项“用户”适用于挂载,不适用于 umount

bab*_*bou 9 linux mount fstab

我正在试验我正在编写的程序的安装选项。我正在运行 Linux Mageia 2。

我添加了以下行 /etc/fstab

/dev/sr0 /mem  auto user,noauto, 0 0
Run Code Online (Sandbox Code Playgroud)

我删除了所有其他关于/dev/sr0哪个是我的 DVD 驱动器设备的条目。

然后,作为普通用户,我可以成功

$ mount /dev/sr0
Run Code Online (Sandbox Code Playgroud)

但随后我收到一条错误消息(“只有 root 可以...”)

$ umount /dev/sr0
Run Code Online (Sandbox Code Playgroud)

当然,设备不忙:我在mount和umount之间什么都不做。

解决后补充如果你只对解决那个问题感兴趣,你可以跳过剩下的问题,直接进入接受的答案。剩下的问题是关于我寻找解决方案或更好地记录问题的工作。但是,在问题的最后有一个事后分析部分,用我自己的评论补充了答案。

文件的所有权:

$ ls -ld /mem /dev/sr0
brw-rw----+  1 root cdrom 11, 0 mai   14 01:01 /dev/sr0
drwxr-xr-x  12 root root   4096 janv. 21 22:34 /mem/
Run Code Online (Sandbox Code Playgroud)

我是“cdrom”组的成员

使用循环设备挂载文件系统映像时,我遇到了同样的问题。

但是,当我用选项“用户”替换“用户”时,一切正常,这似乎表明系统在记住谁安装了文件系统时感到困惑。

Rahul Patil 的第一个回复并没有带来进一步的见解,因为如果我对卸载程序的理解是正确的,它本质上与我使用的相同。然而,它让我进一步思考这个过程(因此一个赞成票)并获得更多细节。Hauke Laging 的评论更支持这一点。据我了解,总而言之, umount 命令采用其参数(设备或安装点)并尝试识别适用的条目/etc/mtab,然后检查它/etc/fstab是否可以执行请求。

根据该对支架(8)用户手册安装用户的名称[应]写入mtab中,使他可以再次卸载文件系统。 当我/etc/mtab安装后检查时,我找不到这样的信息。我不知道它应该如何存储以及它应该是什么样子。

因此,问题实际上是 withmount而不是 with umount

为了绝对确定问题不是/etc/fstab用于安装的另一个条目(这可以解释对“用户”选项的无知),我删除了 中的所有其他条目/etc/fstab,只保留问题开头的一行。然后我重复了 mount-umount 序列,不幸的是结果相同。

$ grep sr0 /etc/mtab
/dev/sr0 /mem udf ro,nosuid,nodev,noexec,relatime,utf8 0 0

$ mount | grep sr0
/dev/sr0 on /mem type udf (ro,nosuid,nodev,noexec,relatime,utf8)
Run Code Online (Sandbox Code Playgroud)

Hauke Laging 要求ls -l /etc/mtab,我认为这是一个错误,而且他确实要求cat /etc/mtab。但我还是做了...

$ ls -l /etc/mtab
lrwxrwxrwx 1 root root 12 juin  25  2012 /etc/mtab -> /proc/mounts
$ ls -l /proc/mounts
lrwxrwxrwx 1 root root 11 mai   19 13:21 /proc/mounts -> self/mounts
$ ls -l /proc/self/mounts
-r--r--r-- 1 myself mygroup 0 mai   19 13:22 /proc/self/mounts
Run Code Online (Sandbox Code Playgroud)

这最后的信息让我感到惊讶。虽然我本质上是那台计算机上的唯一用户,但我看不出为什么这个文件应该属于我,或者除了 root 本身之外的任何其他用户。非常感谢豪克,但你为什么问这个问题?

其实这个文件不属于我。我猜它一定是一个虚拟文件。我以用户“朋友”的身份重复了该请求,然后以“root”的身份重复了该请求:

$ ls -l /proc/self/mounts
-r--r--r-- 1 friend users 0 mai   19 14:10 /proc/self/mounts

# ls -l /proc/self/mounts
-r--r--r-- 1 root root 0 mai   19 14:10 /proc/self/mounts
Run Code Online (Sandbox Code Playgroud)

我欢迎任何有关问题可能是什么或尝试进行实验的建议。

谢谢

事后分析:以下是 Hauke Laging 解决问题后的一些最终评论。

我在网上跟着 Hauke 的解释。

显然这是一个老问题。它在2000 年 10 月旧文档中进行了解释,提到了其他选项的一些问题,但没有提到user. 希望一些内核可靠性问题现在得到纠正。

mount手册页的错误部分简要提到了该问题, 但不够详细,尤其是关于替代设置和对选项的影响。

但是,在那个很长的手册页中丢失了以下信息:

When the proc filesystem is mounted (say at /proc), the files
/etc/mtab and /proc/mounts have very similar contents. **The
former has somewhat more information, such as the mount options
used**, but is not necessarily up-to-date (cf. the -n option
below). It is possible to replace /etc/mtab by a symbolic link to
/proc/mounts, and especially when you have very large numbers of
mounts things will be much faster with that symlink, but **some
information is lost that way, and in particular using the "user"
option will fail**.
Run Code Online (Sandbox Code Playgroud)

user描述选项的地方有一个提示肯定会很有用,这是我看到的第一个地方。

Hau*_*ing 4

问题是您的/etc/mtab不是文件而是/proc/mounts. user这有优点,但也有不起作用的缺点。您已经猜对了原因:“系统在记住谁安装了文件系统时会感到困惑”。此信息被写入mtab,但在您的情况下不能写入其中。内核不关心(甚至不知道)用户挂载(这是用户空间功能)。因此,此信息不包含在/proc/mounts.

做这个:

cd /etc
cp mtab mtab.file
rm mtab
mv mtab.file mtab
Run Code Online (Sandbox Code Playgroud)

umount用户应该在再次安装该卷后才能工作。