您可以使用 ntfs-3g 模拟 Windows 文件系统大小写语义吗?

您可以使用 ntfs-3g 模拟 Windows 文件系统大小写语义吗?

对于 Windows 计算机上的 NTFS,如果您创建目录“ABC”,然后尝试创建目录“abc”,它将被拒绝,因为 Windows 认为它​​们同名。

现在,在 Linux 上,标准 ntfs-3g 文件系统不会遇到这种情况(NTFS 本身允许两者......只是 Windows 不允许)。

我发现这-t lowntfs-3g -o ignore_case会产生错误,但它是通过强制所有内容都小写来实现的。 mkdir ABC结果是abc

有没有一种在 Linux 上使用 NTFS 的方法可以遵循 Windows 的做法?出于显示目的保留大小写,但对于操作不区分大小写?

答案1

有没有一种在 Linux 上使用 NTFS 的方法可以遵循 Windows 的做法?出于显示目的保留大小写,但对于操作不区分大小写?

显示目的是系统不知道的,它只是从文件系统读取目录条目。所以不可能既保留案例又忽略它同时

openat()/fstat()这是因为文件系统实现无法知道它是否正在读取(例如通过) forls或 for 的信息cat

请注意,虽然-t lowntfs-3g -o ignore_case展示小写,它将保留原始大小写。您可以通过两个安装会话来检查:

创建文件系统:

# dd if=/dev/zero of=/tmp/ntfs bs=1M count=100
# mkfs.ntfs -F /tmp/ntfs

现在,使用ignore_case(和小写)创建AbC

# mount.lowntfs-3g -o ignore_case /tmp/ntfs /mnt
# mkdir /mnt/AbC
# ls /mnt
abc
# umount /mnt

之后,卸载并重新安装相同的文件系统,无需进行大小写转换:

# mount.ntfs  /tmp/ntfs /mnt
# ls /mnt
AbC
# umount /mnt

不过,您想要实现的目标是可行的。从我看来,ntfs-3g目前的实施情况并非如此。您可以使用自定义的ls或文件资源管理器来实现这种行为(毕竟 Windows 会这样做) 。例如,预加载readdir()看起来也可能有效。

相关内容