我正在试验我正在编写的程序的安装选项。我正在运行 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描述选项的地方有一个提示肯定会很有用,这是我看到的第一个地方。
问题是您的/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用户应该在再次安装该卷后才能工作。
| 归档时间: |
|
| 查看次数: |
8923 次 |
| 最近记录: |