更新:事实证明,这是由于 libmount 中的错误造成的,现已在上游修复。https://github.com/karelzak/util-linux/issues/1235
原问题如下
当我运行时,mount -r /media/sdd1
设备以读写方式安装,没有警告或迹象表明该-r
选项失败。
$ egrep sdd1 /etc/fstab
/dev/sdd1 /media/sdd1 auto user,noauto,exec,nodev 0 0
$ umount /media/sdd1
umount: /media/sdd1: not mounted
$ mount -r /media/sdd1
$ touch /media/sdd1/file.tmp
$ umount /media/sdd1
$ mount -r /media/sdd1
$ ls /media/sdd1/file.tmp
/media/sdd1/file.tmp
$ rm -f /media/sdd1/file.tmp
$ umount /media/sdd1
$ mount -r /media/sdd1
$ ls /media/sdd1/file.tmp
ls: cannot access '/media/sdd1/file.tmp': No such file or directory
这可能具有破坏性,例如,如果我忘记不应该写入文件系统。我尝试过的文件系统类型是 FAT16(如果有的话)。
除了移除旗帜以强迫自己始终使用之外,我还能做些什么来mount
尊重旗帜吗?-r
user
sudo
答案1
以普通用户身份运行mount
不允许指定自定义挂载选项(运行mount -r
相当于添加ro
挂载选项),在这种情况下所有自定义挂载选项都将被删除,并且仅fstab
使用默认选项 + 选项。
运行时结果sudo mount -r /mnt/test
:
/dev/sdb /mnt/test vfat ro,nosuid,nodev,noexec,relatime,fmask=0022,dmask=0022,codepage=437,iocharset=ascii,shortname=mixed,errors=remount-ro 0 0
与普通用户相同,您可以看到该ro
选项被忽略:
/dev/sdb /mnt/test vfat rw,nosuid,nodev,noexec,relatime,uid=1000,gid=1000,fmask=0002,dmask=0002,allow_utime=0020,codepage=437,iocharset=ascii,shortname=mixed,errors=remount-ro 0 0
无法更改此设置,因此您需要指定该ro
选项fstab
或以 root 身份运行该mount
命令。
mount
使用和进行“非特权”挂载fstab
通常具有很大的限制性,并且这是有道理的——您不希望允许非 root 用户更改 中指定的选项fstab
。在这种情况下,它可能是“安全的”,因为当您从 切换到 时,您正在“降低”您的权限,rw
但ro
它仍然会更改您不允许更改的内容。
答案2
当您双启动系统且操作系统之一是 Windows 时,就会发生这种情况。 Windows 操作系统无法正确卸载磁盘,因为 Windows 操作系统中有有助于 Windows 更快启动的配置。
第一个解决方案: 您可以启动至 Windows 操作系统,然后按照以下步骤操作:(适用于 Windows 10)
- 右键单击任务栏上的 Windows 按钮,然后单击“电源选项”。
- 单击窗口右侧窗格中的“其他电源设置”。
- 单击控制面板左侧窗格中的“选择电源按钮的功能”。
- 单击“更改当前不可用的设置”。
- 如果出现提示,请接受 UAC 对话框,然后取消选中“打开快速启动”。
- 保存更改并启动到您的 Linux 发行版。
现在,自动安装将在驱动器上具有读写访问权限。
第二种解决方案: 解决此问题的第二种方法是在终端中使用以下命令:
sudo apt-get install ntfs-3g -y
sudo ntfsfix /dev/drive-name
执行完上述命令后,再次尝试重新挂载。
第三种解决方案: 这个可以工作,但是每次启动 Linux 发行版时都需要执行此操作。