NTFS-3G
NTFS-3G 是 Microsoft NTFS 的开源实现,支持读和写。NTFS-3G 开发人员使用 FUSE 文件系统来简化开发并提高可移植性。
安装
安装以下软件包
手动挂载
手动挂载 NTFS 分区时有两种选择。传统的
# mount /dev/your_NTFS_partition /mount/point
在 Arch 中,不需要显式指定挂载类型 ntfs-3g。安装 ntfs-3g 软件包后,mount 命令默认会使用 /usr/bin/mount.ntfs,该文件已符号链接到 /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 分区上也保持这些权限。以下示例将上述权限分配给普通用户
# 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 在内部有一个硬编码的限制,如果使用了外部 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 是一款适用于 Windows 的免费(GPL3 协议)CD/DVD 刻录应用程序。如果您更愿意使用可启动 USB 介质,请参阅 USB flash installation media 获取创建方法。
有许多可启动的 CD/USB 映像可用。此列表并不详尽,但是一个很好的起点
- GParted — 适用于 x86 计算机的小型可启动 GNU/Linux 发行版。它使您能够使用最新版本 GParted 应用程序的所有功能。不包含 System Rescue CD 可能包含的其他软件包,且可能不支持磁盘加密方案。
- Parted Magic — 非常优秀的完整硬盘管理解决方案。通过分区编辑器,您可以调整、复制和移动分区。您可以扩大或缩小 C: 驱动器,为新操作系统创建空间,尝试从丢失的分区中恢复数据。
请注意,用于调整 NTFS 分区大小的重要程序包括 ntfs-3g 和像 (G)parted 或 util-linux 软件包提供的 fdisk 等工具。除非您是“高级”用户,否则建议使用 GParted 之类的工具来执行任何调整大小的操作,以最大程度地减少因人为错误导致数据丢失的可能性。
如果您已经安装了 Arch Linux 并且只是想调整现有的 NTFS 分区,则可以使用 parted 和 ntfs-3g 软件包来执行此操作。安装 GParted 软件包后,也可以选择使用 GParted 图形界面。调整大小的核心是 ntfsresize(8) 命令。
故障排除
不支持的重解析点 (Reparse point)
当挂载 Windows 10 的 NTFS 文件系统并读取文件或目录时,您可能会
- 看到指向 'unsupported reparse point' 的损坏符号链接,或者
- 看到错误消息
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 引入的一项名为 “快速启动 (fast startup)” 的功能导致的。启用快速启动后,所有已挂载分区的元数据部分会被恢复到上次关闭时的状态。因此,在 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 挂载失败
如果 NTFS 分区没有相应的分区类型,Windows 将无法识别它。在创建 NTFS 分区以在 Windows 中使用时,一个常见的陷阱是忘记将分区类型设置为 NTFS。请参阅 fdisk 或其他分区工具。