跳转至内容

NTFS-3G

来自 ArchWiki

NTFS-3GMicrosoft NTFS 的开源实现,支持读写。NTFS-3G 开发人员使用 FUSE 文件系统来简化开发并提高可移植性。

安装

安装以下软件包

  • ntfs-3g — 用于挂载 NTFS 分区的 FUSE 驱动程序。
  • ntfsprogs — 用于执行如 #格式化 等操作的用户空间工具。

手动挂载

手动挂载 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 将处理这些权限的转换。

提示 您可能希望将多个 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-faq。fstab 中的 user 选项仍然是必需的。

  • ntfs-3g 软件包本身不具备内部 FUSE 支持。请使用 ABS 重新构建软件包以启用 FUSE 支持。
    • 完整的解释是,“user” 和 “users” 是通过设置了 setuid 的 mount 命令工作的,它不会放弃 setuid 特权,以便在没有 root 的情况下使用块设备。然而,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 是一款适用于 Windows 的免费(GPL3 协议)CD/DVD 刻录应用程序。如果您更愿意使用可启动 USB 介质,请参阅 USB flash installation media 获取创建方法。

有许多可启动的 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 或 util-linux 软件包提供的 fdisk 等工具。除非您是“高级”用户,否则建议使用 GParted 之类的工具来执行任何调整大小的操作,以最大程度地减少因人为错误导致数据丢失的可能性。

如果您已经安装了 Arch Linux 并且只是想调整现有的 NTFS 分区,则可以使用 parted 和 ntfs-3g 软件包来执行此操作。安装 GParted 软件包后,也可以选择使用 GParted 图形界面。调整大小的核心是 ntfsresize(8) 命令。

故障排除

不支持的重解析点 (Reparse point)

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

  1. 看到指向 'unsupported reparse point' 的损坏符号链接,或者
  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 引入的一项名为 “快速启动 (fast startup)” 的功能导致的。启用快速启动后,所有已挂载分区的元数据部分会被恢复到上次关闭时的状态。因此,在 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 挂载失败

如果 NTFS 分区没有相应的分区类型,Windows 将无法识别它。在创建 NTFS 分区以在 Windows 中使用时,一个常见的陷阱是忘记将分区类型设置为 NTFS。请参阅 fdisk 或其他分区工具

参见

© . This site is unofficial and not affiliated with Arch Linux.

Content is available under GNU Free Documentation License 1.3 or later unless otherwise noted.