NTFS-3G

出自 ArchWiki

NTFS-3GMicrosoft NTFS 的开源实现,包含读取写入支持。NTFS-3G 开发者使用 FUSE 文件系统来促进开发并帮助提高可移植性。

安装

安装 ntfs-3g 软件包。

手动挂载

手动挂载 NTFS 分区有两种选择。传统的方式是

# mount /dev/your_NTFS_partition /mount/point

在 Arch 中不需要显式指定挂载类型 ntfs-3g。默认情况下,mount 命令将使用 /usr/bin/mount.ntfs,在安装 ntfs-3g 软件包后,它被符号链接到 /usr/bin/ntfs-3g

第二种选择是直接调用 ntfs-3g

# ntfs-3g /dev/your_NTFS_partition /mount/point

请参阅 ntfs-3g(8) 以获取可用选项。

格式化

警告: 始终仔细检查设备路径。
# mkfs.ntfs -Q -L diskLabel /dev/sdXY
注意: -Q 通过不归零驱动器和不检查坏扇区来加速格式化。

配置

可以设置 NTFS 分区在启动时自动挂载,或者预先配置为在您希望挂载时以某种方式挂载。此配置可以在静态文件系统配置 (fstab) 中完成,也可以通过使用 udev 规则来完成。

默认设置

使用默认设置将在启动时挂载 NTFS 分区。使用此方法,如果挂载到的父文件夹具有适当的用户或群组权限(例如 /run/media/username/),那么该用户或群组将能够在该分区上进行读写操作。

/etc/fstab
# <file system>		<dir>		<type>	<options>	<dump>	<pass>
/dev/NTFS-part		/mnt/windows	ntfs-3g	defaults	0	0

Linux 兼容权限

Linux 系统上的权限通常设置为文件夹 755 和文件 644。如果经常使用 NTFS 分区,建议也为 NTFS 分区保持这些权限。以下示例为普通用户分配上述权限

# Mount internal Windows partition with linux compatible permissions, i.e. 755 for directories (dmask=022) and 644 for files (fmask=133)
/dev/NTFS-partition  /mnt/windows  ntfs-3g uid=userid,gid=groupid,dmask=022,fmask=133 0 0

或者,如果 Windows 权限对您很重要,可以使用 ntfsusermap(8) 命令将 Windows 用户映射到 Linux 用户。ntfs-3g 将处理这些权限的转换。

提示: 您可能希望将多个 NTFS SID 映射到同一个 Linux UID,例如在存在 Syncthing SyncthingServiceAcct 的情况下。从 Windows 到 Linux 这样做很简单,但是从 Linux 到 Windows,您需要确保 Linux 用户创建的文件显示为属于您的 Windows 用户,而不是任何服务帐户。

首先,您需要知道所需 Windows 用户的 SID。您可以使用 ntfsusermap 向导从文件路径猜测,或者在 Windows 系统上执行 wmic useraccount get 以获取明确的用户列表来确定这一点。然后,重新排序您的 UserMapping 文件,使 Windows 用户 SID 位于服务帐户 SID 之上。

允许群组/用户

/etc/fstab 中,您还可以指定其他选项,例如允许谁访问(读取)分区。例如,要允许 groupid 组中的人访问

/dev/NTFS-partition  /mnt/windows  ntfs-3g   gid=groupid,umask=0022    0       0

默认情况下,上面的行将仅为 root 用户启用写入支持。要启用用户写入,您必须指定应授予写入权限的用户。将 uid 参数与您的用户 ID 一起使用以启用用户写入

/dev/NTFS-partition  /mnt/windows  ntfs-3g   uid=userid,gid=groupid,umask=0022    0       0

如果您在单用户计算机上运行,您可能希望自己拥有文件系统并授予所有可能的权限

/dev/NTFS-partition  /mnt/windows  ntfs-3g   uid=userid,gid=groupid    0       0

基本 NTFS-3G 选项

对于大多数人来说,以上设置应该足够了。以下是一些其他选项,这些选项是各种 Linux 文件系统的通用常见选项。有关完整列表,请参阅 ntfs-3g(8) § OPTIONS

umask
umask 是一个内置的 shell 命令,它自动设置新创建文件的文件权限。对于 Arch Linux,root 用户和用户的默认 umask 为 0022。使用 0022,新文件夹的目录权限为 755,新文件的权限为 644。您可以在此处阅读有关 umask 权限的更多信息。
fmask 和 dmask
umask 类似,但分别定义文件和目录。
noauto
如果设置了 noauto,则 /etc/fstab 中的 NTFS 条目在启动时不会自动挂载。
uid
用户 ID。这允许特定用户拥有对分区的完全访问权限。您的 uid 可以使用 id 命令找到。

以下选项是 ntfs-3g 特有的

windows_names
防止创建 Windows 不允许的文件、目录和扩展属性名称。

允许用户挂载

默认情况下,即使在 /etc/fstab 中使用 user 选项,ntfs-3g 也需要 root 权限才能挂载文件系统(如果它是块设备)。有关详细信息,请参阅 ntfs-3g-faqfstab 中的 user 选项仍然是必需的。

注意
  • ntfs-3g 软件包没有内部 FUSE 支持。使用 ABS 重建软件包以启用 FUSE 支持。
    • 完整的解释是,“user”和“users”通过 setuid mount 工作,它不会放弃其 setuid 权限,以便可以在没有 root 权限的情况下使用块设备。但是,ntfs-3g 在 ntfs-3g 中有一个硬编码的限制,如果使用外部 libfuse,则会终止 setuid。
    • 除了对库的不信任之外,没有充分的技术理由不允许外部 FUSE 使用 setuid。此补丁删除了上述限制。
  • 卸载权限似乎存在问题,因此如果您需要卸载文件系统,仍然需要 root 权限。您也可以使用 fusermount -u /mnt/mountpoint 在没有 root 权限的情况下卸载文件系统。此外,如果您在 /etc/fstab 中使用 users 选项(复数)而不是 user 选项,您将能够使用 mountumount 命令挂载和卸载文件系统。

对于非块文件(如普通镜像),命令行上的 ntfs-3g 应该可以直接使用普通用户权限,因为当直接内核交互不可用时,底层 FUSE 调用会重定向到 setuid-root fusermount

调整 NTFS 分区大小

注意: 如果您的数据很重要,请在尝试此操作之前确保您已备份!

大多数购买的系统都已安装 Windows,并且有些人不希望在安装 Arch Linux 时完全擦除它。由于这个原因以及其他原因,调整现有 Windows 分区的大小以腾出空间用于一个或两个 Linux 分区非常有用。这通常通过 Live CD 或可启动 USB 闪存驱动器来完成。

对于 Live CD,典型的过程是下载 ISO 文件,将其刻录到 CD,然后从中启动。InfraRecorder 是一个免费(在 GPL3 意义上)的 Windows CD/DVD 刻录应用程序,非常适合。如果您更愿意使用可启动 USB 介质,请参阅 USB 闪存安装介质,了解创建可启动 USB 闪存盘的方法。

有许多可启动 CD/USB 镜像可用。此列表并非详尽无遗,但它是一个不错的起点

  • GParted — 用于基于 x86 计算机的小型可启动 GNU/Linux 发行版。它使您能够使用最新版本的 GParted 应用程序的所有功能。不包含 System Rescue CD 可能包含的其他软件包,并且可能不支持磁盘加密方案。
https://gparted.sourceforge.net/ || gparted
  • Parted Magic — 非常好的完整硬盘管理解决方案。使用分区编辑器,您可以调整大小、复制和移动分区。您可以增大或缩小您的 C: 盘。为新的操作系统创建空间。尝试从丢失的分区中恢复数据。
https://partedmagic.com/ ||

请注意,调整 NTFS 分区大小的重要程序包括 ntfs-3g 和像 (G)parted 或 fdisk 这样的实用程序,由 util-linux 软件包提供。除非您是“高级”用户,否则建议使用像 GParted 这样的工具来执行任何调整大小操作,以最大限度地减少因用户错误导致的数据丢失的风险。

如果您已经在系统上安装了 Arch Linux,并且只想调整现有 NTFS 分区的大小,则可以使用 parted 和 ntfs-3g 软件包来完成。或者,您可以在安装 GParted 软件包后使用 GParted GUI。调整大小的核心是 ntfsresize(8) 命令。

故障排除

不支持的重解析点

当挂载 Windows 10 的 NTFS 文件系统并读取文件或目录时,您可能会

  1. 看到指向“不支持的重解析点”的损坏的符号链接,或者
  2. 看到错误消息 cannot access some_file: Input/output error(在这种情况下,您在 日志中看到 Could not load plugin /usr/lib64/ntfs-3g/ntfs-plugin-80000017.so: Success)。

造成这种情况的原因是 NTFS 重解析点,Microsoft 使用它来扩展文件系统。默认情况下,NTFS-3G 不支持某些类型的重解析点。NTFS-3G 插件可用于提供与以下重解析点定义的部分功能兼容性

  • 系统压缩:也称为“Compact OS”,此功能提供比 NTFS 旧的 LZ77 更强大的、可执行文件优化的转换类型。使用 ntfs-3g-system-compression-gitAUR 插件进行只读支持,或者在 Windows 中运行 compact.exe /CompactOS:never 以禁用。
  • 重复数据删除文件:这是 Windows Server 2012 功能,提供块级离线重复数据删除。尚未在 AUR 中打包。
  • OneDrive 文件:OneDrive 文件作为 Windows 上的特殊卷存储。ntfs-3g-onedrive-binAUR 插件为标记为“本地可用”的文件提供读写访问权限。

有关更多详细信息,请参阅此页面,以及archive.org 以下载。

损坏的 NTFS 文件系统

如果 NTFS 文件系统存在错误,NTFS-3G 将以只读方式挂载它。要修复 NTFS 文件系统,请加载 Windows 并运行其磁盘检查程序 chkdsk

请注意,ntfsfix 只能修复某些错误。如果它失败,chkdsk 可能会成功。

要修复 NTFS 文件系统,设备必须已卸载。例如,要修复位于 /dev/sda2 中的 NTFS 分区

# umount /dev/sda2
# ntfsfix /dev/sda2
Mounting volume... OK
Processing of $MFT and $MFTMirr completed successfully.
NTFS volume version is 3.1.
NTFS partition /dev/sda2 was processed successfully.
# mount /dev/sda2

如果一切顺利,该卷现在将可写。

Windows 分区下中文文件名乱码

请参阅字符编码#不正确的挂载编码

元数据保存在 Windows 缓存中,拒绝挂载

当与 Windows 8 或 10 双启动时,尝试挂载 Windows 可见的分区可能会产生以下错误

The disk contains an unclean file system (0, 0).
Metadata kept in Windows cache, refused to mount.
Failed to mount '/dev/sdc1': 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 中引入的名为“快速启动”的功能。启用快速启动后,所有已挂载分区的部分元数据将恢复到上次关闭时的状态。因此,在 Linux 上所做的更改可能会丢失。当在 Windows 8 或 10 下选择“关机”或“休眠”时,任何 NTFS 分区都可能发生这种情况。但是,通过选择“重启”离开 Windows 显然是安全的。

要启用对其他操作系统上的分区进行写入,请确保禁用快速启动。可以通过以管理员身份发出以下命令来实现

powercfg /h off

您可以在控制面板 > 硬件和声音 > 电源选项 > 系统设置 > 选择电源按钮的功能中检查当前设置。启用快速启动框应禁用或缺失。

删除 Windows 休眠元数据

作为上述干净关机方法的替代方法,有一种方法可以完全销毁在休眠后保存的 NTFS 元数据。如果您无法或不愿意启动到 Windows 并完全关闭它,则此方法才是可行的。这是通过运行 ntfs-3g 提供的 ntfsfix 来实现的。

# ntfsfix /dev/your_NTFS_partition
警告: 请注意,此方法意味着保存的 Windows 会话将完全丢失。请您自行承担使用此选项的责任。

挂载失败

如果即使按照本指南操作,您也无法挂载 NTFS 分区,请尝试在 /etc/fstab 中对所有 NTFS 分区使用 UUID 而不是设备名称。有关示例,请参阅 fstab#文件系统 UUID

Windows 挂载失败

Windows 将无法识别没有相应分区类型的 NTFS 分区。创建与 Windows 配合使用的 NTFS 分区时,一个常见的陷阱是忘记将分区类型设置为 NTFS。请参阅 fdisk分区工具之一。

Beta 功能和发布

Jean-Pierre André(NTFS-3G 作者之一)维护了一个关于“高级功能”的 网页[死链 2024-10-19 ⓘ]。它提供

  • 有关 NTFS-3G 中 NTFS 功能处理的文档,包括
    • 符号链接、junction 和其他重解析点
    • 扩展属性 (xattrs) 作为 ADS 流和特殊 NTFS 属性的接口
    • 安全和权限,包括 POSIX 映射和 ACL 映射
  • 用于解析特殊重解析点的插件。

文档中提供的信息也适用于 Tuxera 版本 (2017.3.23)。系统压缩和重复数据删除插件与 Tuxera 版本配合使用,但 onedrive 插件需要对插件加载系统进行调整,这仅在高级版本中可用。

自 2021 年 8 月 30 日起,NTFS-3G AR 已合并回主线 NTFS-3G,后者已转移到 GitHub 并重新开始积极开发。但是,插件源代码尚未合并。

参见