NTFS-3G
NTFS-3G 是 Microsoft NTFS 的开源实现,包含读取和写入支持。NTFS-3G 开发者使用 FUSE 文件系统来促进开发并帮助提高可移植性。
安装
手动挂载
手动挂载 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 将处理这些权限的转换。
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-faq。fstab
中的 user
选项仍然是必需的。
- ntfs-3g 软件包没有内部 FUSE 支持。使用 ABS 重建软件包以启用 FUSE 支持。
- 完整的解释是,“user”和“users”通过 setuid
mount
工作,它不会放弃其 setuid 权限,以便可以在没有 root 权限的情况下使用块设备。但是,ntfs-3g 在 ntfs-3g 中有一个硬编码的限制,如果使用外部 libfuse,则会终止 setuid。 - 除了对库的不信任之外,没有充分的技术理由不允许外部 FUSE 使用 setuid。此补丁删除了上述限制。
- 完整的解释是,“user”和“users”通过 setuid
- 卸载权限似乎存在问题,因此如果您需要卸载文件系统,仍然需要 root 权限。您也可以使用
fusermount -u /mnt/mountpoint
在没有 root 权限的情况下卸载文件系统。此外,如果您在/etc/fstab
中使用users
选项(复数)而不是user
选项,您将能够使用mount
和umount
命令挂载和卸载文件系统。
对于非块文件(如普通镜像),命令行上的 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 可能包含的其他软件包,并且可能不支持磁盘加密方案。
- Parted Magic — 非常好的完整硬盘管理解决方案。使用分区编辑器,您可以调整大小、复制和移动分区。您可以增大或缩小您的 C: 盘。为新的操作系统创建空间。尝试从丢失的分区中恢复数据。
请注意,调整 NTFS 分区大小的重要程序包括 ntfs-3g 和像 (G)parted 或 fdisk 这样的实用程序,由 util-linux 软件包提供。除非您是“高级”用户,否则建议使用像 GParted 这样的工具来执行任何调整大小操作,以最大限度地减少因用户错误导致的数据丢失的风险。
如果您已经在系统上安装了 Arch Linux,并且只想调整现有 NTFS 分区的大小,则可以使用 parted 和 ntfs-3g 软件包来完成。或者,您可以在安装 GParted 软件包后使用 GParted GUI。调整大小的核心是 ntfsresize(8) 命令。
故障排除
不支持的重解析点
当挂载 Windows 10 的 NTFS 文件系统并读取文件或目录时,您可能会
- 看到指向“不支持的重解析点”的损坏的符号链接,或者
- 看到错误消息
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
挂载失败
如果即使按照本指南操作,您也无法挂载 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 并重新开始积极开发。但是,插件源代码尚未合并。