mount -r(只读)挂载读写

mount -r(只读)挂载读写

更新:事实证明,这是由于 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尊重旗帜吗?-rusersudo

答案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。在这种情况下,它可能是“安全的”,因为当您从 切换到 时,您正在“降低”您的权限,rwro它仍然会更改您不允许更改的内容。

答案2

当您双启动系统且操作系统之一是 Windows 时,就会发生这种情况。 Windows 操作系统无法正确卸载磁盘,因为 Windows 操作系统中有有助于 Windows 更快启动的配置。

第一个解决方案: 您可以启动至 Windows 操作系统,然后按照以下步骤操作:(适用于 Windows 10)

  • 右键单击任务栏上的 Windows 按钮,然后单击“电源选项”。
  • 单击窗口右侧窗格中的“其他电源设置”。
  • 单击控制面板左侧窗格中的“选择电源按钮的功能”。
  • 单击“更改当前不可用的设置”。
  • 如果出现提示,请接受 UAC 对话框,然后取消选中“打开快速启动”。
  • 保存更改并启动到您的 Linux 发行版。

现在,自动安装将在驱动器上具有读写访问权限。

第二种解决方案: 解决此问题的第二种方法是在终端中使用以下命令:

sudo apt-get install ntfs-3g -y
sudo ntfsfix /dev/drive-name

执行完上述命令后,再次尝试重新挂载。

第三种解决方案: 这个可以工作,但是每次启动 Linux 发行版时都需要执行此操作。

Nevena Pavlicic 的解决方案

相关内容