NAS挂载NTFS格式磁盘无法写入?问题可能在这

前面在写PVE(或其他Linux系统)挂载移动硬盘的时候提到,如果使用NTFS/exFAT文件系统,需在挂载参数中指定驱动(如 ntfs-3g),否则可能会造成挂载成功的文件只读无法写入,出现Read-only file system错误。

我前面准备备份PVE的时候就遇到了这个问题,因为大家平时用移动硬盘,还是接Windows电脑比较多,估计大部分人的移动硬盘分区可能都是NTFS,所以这个问题可能会比较普遍。

寻求Deepseek帮助,它解释的还是比较详细的,新手朋友也可以mark一下收藏留着备用。

挂载操作

第一步需要先安装一下ntfs-3g或者exFAT驱动,命令如下:

1
2
apt install ntfs-3g  # NTFS
apt install exfat-fuse exfat-utils # exFAT

然后指定参数挂载。永久挂载时写入fstab文件的示例为:

1
UUID=XXX /mnt/usb_disk ntfs-3g defaults,uid=0,gid=0,umask=007 0 0

参数解释

写入的格式前面也讲了,其中的ntfs-3g,是指定分区文件系统,如果是exFAT文件系统,需要改成exfat

关于后面几个参数 uid=0, gid=0, umask=007 ,可以控制挂载后文件的默认权限和归属。这些参数的具体含义和作用如下:

uid=0

  • 含义:设置挂载后文件和目录的 所有者用户ID(User ID)。0 是 Linux 中 root 用户的默认 UID。
  • 作用:所有挂载的 NTFS 文件和目录的默认所有者会被设为 root。如果没有这个参数,默认所有者可能是挂载时的当前用户(取决于系统配置)。

gid=0

  • 含义:设置挂载后文件和目录的 所属组ID(Group ID)。0 是 Linux 中 root 组的默认 GID。
  • 作用:所有挂载的 NTFS 文件和目录的默认所属组会被设为 root。如果没有这个参数,默认所属组可能与挂载用户的组相关。

**umask=007

  • 含义:设置挂载后文件和目录的 权限掩码(Umask),用于屏蔽默认权限。
    • umask 值的计算方式为:默认权限(如 777) - umask 值 = 实际权限
    • 007 对应 所有者(Owner)和所属组(Group)拥有完整权限,其他用户(Others)无权限

这个可能对于新手来说有点不太好懂,知道怎么用就行了。

那么采用文章开头的那种参数挂载,

1
UUID=XXXX /mnt/ntfs_disk ntfs-3g uid=0,gid=0,umask=007 0 0

效果就是:

  • 挂载的磁盘所有文件和目录的所有者为 rootuid=0)。
  • 挂载的磁盘所有文件和目录的所属组为 rootgid=0)。
  • 权限为 660(文件)和 770(目录),即仅 root 用户和 root 组可读写,其他用户无权限。

活学活用

场景1:允许所有用户读写

  • 参数uid=1000,gid=1000,umask=000, 假设用户 UID=1000(普通用户),权限为 777(所有用户可读写)。
  • 风险:权限过于开放,可能引发安全问题。

场景2:仅特定用户组访问

  • 参数gid=1001,umask=002,设置所属组为 GID=1001(如 users 组),权限为 775(组内用户可读写)。
    • 需要将用户加入该组:usermod -aG 1001 username

场景3:严格权限控制

  • 参数uid=0,gid=0,umask=077,仅 root 用户可读写(权限 600/700),其他用户无权限。

验证权限

挂载后可通过以下命令检查权限:

1
2
3
4
5
6
# 查看挂载点权限
ls -ld /mnt/ntfs_disk

# 测试文件权限示例
touch /mnt/ntfs_disk/test.txt
ls -l /mnt/ntfs_disk/test.txt

注意事项

  1. NTFS 权限与 Linux 原生权限的差异
    NTFS 本身不支持 Linux 权限模型,这些参数仅是 ntfs-3g 驱动模拟的权限控制。
  2. Windows 兼容性
    在 Windows 中修改 NTFS 文件后,Linux 挂载时的权限可能需重新应用。
  3. 安全建议
    避免使用过度开放的权限(如 umask=000),尤其是对可移动存储设备。