如何在/etc/fstab中挂载NTFS分区?

我有两个分区,我想在启动时挂载它们。
/dev/sda3   /mnt/devel  ext4    defaults    0   2
/dev/sda2   /mnt/excess ntfs    defaults    0   2
ext4 分区挂载正常(由我拥有,只能由我写入),但 NTFS 分区由 root 拥有,并且所有用户都具有读写权限。
如何修复这个问题?
drwxr-xr-x  7 amanda amanda 4096 2012-03-14 19:07 devel
drwxrwxrwx  1 root   root   4096 2012-03-14 22:38 excess

1选项"noatime"或"relatime"可用且推荐用于永久挂载ntfs(参见man mount.ntfs)。我在ext3/4和ntfs上都遇到了一些硬盘忙碌的问题! - user259044
7个回答

ntfs和vfat文件系统的权限必须使用dmaskfmaskumask选项进行设置。dmask控制目录的权限,fmask控制文件的权限,umask同时控制两者。由于这些选项设置了掩码,所以它们应该是您所需权限的补集。例如,所有者的rwx和其他用户的rx是022,而不是755。

要设置所有者,请分别使用uidgid选项进行用户和组。您可以使用命令id -u找到自己的UID。要找到您的GID,请使用id -g。这些值通常都是1000。

用于ntfs的常见挂载选项是uid=1000,gid=1000,dmask=027,fmask=137。这将把您设置为驱动器的所有者,并将权限设置为drwxr-x---

以下是一个有效的/etc/fstab示例:

UUID=EEA2B69CA2B668AB        /WIN_C     ntfs-3g   defaults,nls=utf8,umask=000,dmask=027,fmask=137,uid=1000,gid=1000,windows_names 0 0 
UUID=65AEC0E830EA0497        /WIN_D     ntfs-3g   rw 0 0

要获取分区的UUID,您可以使用ls -l /dev/disk/by-uuid/lsblk -f | grep -v loopgnome-disks
如果重新启动后没有出现明显的错误,并且分区仍然是只读的,或者出现类似的错误:
    Error mounting /dev/sda6 at /media/WindowsDrive: 
    Command-line `mount -t "ntfs" -o "uhelper=udisks2,nodev,nosuid,uid=1000,gid=1000,dmask=0077,fmask=0177" "/dev/sda6" "/media/rolindroy/Media Center"' exited with non-zero exit status 14: The disk contains an unclean file system (0, 0). 
    Metadata kept in Windows cache, refused to mount. 
    Failed to mount '/dev/sda6': Operation not permitted The NTFS partition is in an unsafe state. 
    Please resume and shutdown Windows fully (no hibernation or fast restarting), or mount the volume read-only with the 'ro' mount option

这是因为Windows 8和10提供了一个依赖于“非完全”关机的“快速启动”选项。您可以按照“电源选项”下的这些步骤来禁用快速启动。
UUID=01D9318DD8A39810  /run/media/$user/Win11   ntfs-3g uid=$user,gid=$user,umask=0022 0 0
UUID=01D9317B8D647610  /run/media/$user/Storage ntfs-3g uid=$user,gid=$user,umask=0022 0 2

在上面的例子中,win11将以只读方式挂载,而存储设备则以读写方式挂载。
它们将作为驱动器显示在文件管理器中,因为它们被挂载在文件夹/run/media/$user下。 同时,请不要忘记用您的用户名替换$user。

https://help.ubuntu.com/community/Fstab#ntfs - Amanda
谢谢。"masking"中的"mask"部分让我有点困惑。111得到的是-rw-rw-rw-而不是---x--x--x - Amanda
4你能否提供一个更完整的示例,展示那些选项在/etc/fstab文件中的使用方式? - puk
3@puk,我有UUID=3030BD846F74E514 /media/iam/ntfspartition ntfs-3g uid=1000,gid=1000,dmask=022,fmask=133 0 0,这是我在http://askubuntu.com/a/507326/221448中提到的(我还提到了`bind`)。 - Brady Trainor
如何在fstab中将驱动器所有者设置为root? - Scorb
2@ScottF uid=0,gid=0 - wjandrea
2这些参数适用于我:"defaults, rw, nls=utf8, umask=000, dmask=027, fmask=137, uid=1000, gid=1000, windows_names"。之后,还要运行"sudo ntfsfix /dev/sdXX"来修复分区。 - jordiburgos
5将文件系统类型设置为ntfs还是ntfs-3g更好? - Aaron Franke
2@AaronFranke https://serverfault.com/q/304354/333603 - jarno
2这两个示例行之间有什么区别?如果它们在功能上相似,第二个看起来要简单得多。 - craq
1mount显示此挂载点的类型是什么?fuseblk? - jarno

如果您使用权限选项挂载NTFS分区,那么chmod/chown将会起作用。

/dev/sda2   /mnt/excess ntfs-3g    permissions,locale=en_US.utf8    0   2

你可以然后。
sudo chown your_user:your_user /mnt/excess

比uid、dmask和fmask更容易。


1那个sudo chown命令有什么副作用吗?它究竟是做什么的? - ReneSac
7chown命令用于将挂载点(/mnt/excess)的所有者更改为所需的用户。根据我的经验,每次挂载分区时都需要重复执行此步骤(至少在每次重新启动后)...因此,请正确设置uid/gid/umask ... 我一直以为fmask和dmask是可选的 - 就像当您希望为文件和目录设置不同权限时。 - thecarpy

我在这方面遇到了一些麻烦,因为当我重新启动时,磁盘名称会发生变化...(sda0至sdb2

我通过在fstab中使用UUID进行挂载来解决了这个问题,您可以通过输入以下命令查看硬盘的UUID:sudo blkid

备份您的fstab文件:

sudo cp /etc/fstab /etc/fstab.orig

确保你三次检查“>>”,如果你放一个“>”就会覆盖你的fstab!
sudo blkid >> /etc/fstab

如果你还是搞砸了,你可以用原始的fstab文件替换它。
sudo cp /etc/fstab.orig /etc/fstab

下一步,创建一个文件夹:
sudo mkdir /media/mydrivename

配置fstab文件:
sudo vim /etc/fstab

不要忘记在blkid的输出结果前面加上'#'来进行注释!
将此内容添加到fstab文件中,你可以在上述命令插入的底部块中找到UUID。media/mydrivename是应该挂载分区的位置。
UUID=xxxxxxxxxxxxxxxxx   /media/mydrivename ntfs    permissions,locale=en_US.utf8    0   2

以下是我的fstab文件:
# /etc/fstab: static file system information.
#
# Use 'blkid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
# <file system> <mount point>   <type>  <options>       <dump>  <pass>
# / was on /dev/sda2 during installation
UUID=5d4940cf-5cf5-443a-be11-1f7e551962d1 /               ext4    errors=remount-ro 0       1
# swap was on /dev/sda1 during installation
UUID=84b7e5e9-08c3-4641-b28b-99e0255e604d none            swap    sw              0       0

# 500 GB Webserver harddisk from lr-serv-01
UUID=BA9A48D39A488E37 /media/hdd1 ntfs permissions,locale=en_US.utf8 0 2

# 2 TB Movie share harddisk from lr-serv-01
UUID=7EB09666B09624A5 /media/hdd2 ntfs permissions,locale-en_US.utf8 0 2

#/dev/sda1: UUID="10EC004DEC003010" TYPE="ntfs" 
#/dev/sda2: LABEL="system" UUID="88A4FE47A4FE3772" TYPE="ntfs" 
#/dev/sda3: LABEL="storage_01" UUID="BA9A48D39A488E37" TYPE="ntfs" 
#/dev/sdb1: LABEL="storage_02" UUID="7EB09666B09624A5" TYPE="ntfs" 
#/dev/sdc1: UUID="84b7e5e9-08c3-4641-b28b-99e0255e604d" TYPE="swap" 
#/dev/sdc2: UUID="5d4940cf-5cf5-443a-be11-1f7e551962d1" TYPE="ext4" 
#/dev/sdd1: LABEL="storage_spotnet" UUID="EC6E8F416E8F0394" TYPE="ntfs" 
#/dev/sdd2: LABEL="storage_backup_pcs" UUID="6C2699D026999BA0" TYPE="ntfs" 
#/dev/sdd5: LABEL="storage_series" UUID="7670ABF770ABBC6D" TYPE="ntfs" 
#/dev/sdd6: LABEL="storage_winmx" UUID="564AB81B4AB7F5B9" TYPE="ntfs" 

重新启动系统,输入以下命令:
sudo reboot

要检查分区是否已挂载,您可以输入df -k
将所有权交给您自己:
sudo chown -R USERNAME:USERNAME /media/mydrivename

在Ubuntu Server 14.04.01上完成了这件事

希望这个答案能帮助到某人;-)


5虽然这听起来是一条通常可靠的建议,但我觉得更优雅的做法是直接从sudo blkid的输出中复制UUID,而不是将整个内容倾倒到/etc/fstab并临时破坏它。另一种方法是从GParted分区的属性对话框中获取UUID。 - David Foerster
由于我是在我的服务器上进行操作,所以我并没有找到复制它的方法... 我只有一个键盘和Bash。 - rotgers
大多数终端仿真器都允许你复制东西(假设你使用的是远程访问或类似于screentmux的终端仿真器,而不是原始虚拟终端)。 - David Foerster
哈哈,这个假设不对。我并没有使用终端模拟器。不过,为了防止有人搞砸,我在我的回答中添加了一些内容,用于复制fstab文件。 :) - rotgers
我之前使用UUID,但后来改用LABEL。因为有一次我调整了一个分区后,UUID发生了变化,但是标签名称没有变。而且,我发现在fstab中使用LABEL="some-name"比UUID="long random string"更容易看清楚正在发生的事情。 - Elliptical view

你可以使用ntfs-config图形界面工具在fstab中挂载NTFS分区。

Mount NTFS Windows Partition FSTAB

ntfs-3g驱动程序需要提供对NTFS分区的完全读写支持,而gksu则用于以root权限运行NTFS配置GUI。

sudo apt-get install ntfs-3g ntfs-config
sudo apt-get install gksu

在Unity Dash中搜索并打开“NTFS配置工具”。 在出现的窗口中选择要配置的分区。这里,我希望只挂载我的存储分区。只需勾选“启用对内部设备的写入支持”。

NTFS-Config实用程序将备份原始fstab文件,因此我们可以轻松地查看应用程序所做的更改。要查看更改,请:

cat /etc/fstab-ntfs-config-save
cat /etc/fstab

我使用以下方法,在挂载时正确地给予我权限(从双启动系统设置的NTFS驱动器):
编辑/etc/fstab:
UUID可以在/dev/disk/by-uuid/中找到(通常映射到/dev/sd*)
用你的UUID替换 UUID= /mnt/e ntfs auto,users,uid=1000,gid=1000,dmask=027,fmask=137 0 0

也许不是一个好的解决方案,但你可以始终将用户ID映射到自己的ID或组ID:
这里只是一个例子,我的用户ID是1000
在这种情况下,所有挂载的文件都属于用户ID为1000的用户。

1可以这样做,但是无论是否使用"rw"选项,它仍然以drwxrwxrwx权限挂载。 - Amanda
这对我来说很有效。至于权限,我在fstab文件中添加了file_mode=0770,dir_mode=0770。 - Rui F Ribeiro

请注意,如果您使用标签挂载NTFS驱动器,并且希望能够更改该驱动器上的目录或文件的权限,则以下方法非常有效(编辑/etc/fstab,例如sudo nano /etc/fstab,然后添加):
LABEL=Portable_HD_2TB      /media/mintbox2/Portable_HD_2TB ntfs    permissions,defaults        0       2

以下内容不会允许您更改目录或文件的权限:
LABEL=Portable_HD_2TB      /media/mintbox2/Portable_HD_2TB ntfs    defaults        0       2