所以我刚刚买了一个新的三星 T7 便携式 SSD。我最初打算将其格式化为 exFAT,以便在 Windows、MacOS 和 Linux 上使用,但经过检查,该磁盘附带了默认文件系统HPFS/NTFS/exFAT
.我不知道这是一回事,但我决定测试一下。
为了测试它,我只是将一些 ASCII 文本文件复制到磁盘上,但无论复制方法和文件扩展名如何,它们都会设置可执行标志。我不明白为什么。为什么会这样,怎样才能避免呢?我希望文件按原样复制。
显示更改的权限的完整输出。
user@ubuntu:~$ echo "test text file" > test.txt
user@ubuntu:~$ echo "test test test" > test
user@ubuntu:~$ echo "print('test')" > test.py
user@ubuntu:~$
user@ubuntu:~$ ls -l test*
-rw-rw-r-- 1 user user 15 July 18 01:20 test
-rw-rw-r-- 1 user user 14 July 18 01:20 test.py
-rw-rw-r-- 1 user user 15 July 18 01:20 test.txt
user@ubuntu:~$
user@ubuntu:~$ mkdir /media/user/T7/testdir
user@ubuntu:~$ cp test /media/user/T7/testdir/
user@ubuntu:~$ rsync test.txt /media/user/T7/testdir/
user@ubuntu:~$ rsync -a test.py /media/user/T7/testdir/
user@ubuntu:~$
user@ubuntu:~$ ls -l /media/user/T7/testdir
total 384
-rwxr-xr-x 1 user user 15 July 18 01:23 test
-rwxr-xr-x 1 user user 14 July 18 01:20 test.py
-rwxr-xr-x 1 user user 15 July 18 01:23 test.txt
在这里您可以看到我已经尝试了cp
、rsync
和rsync -a
,但它们每次都最终作为可执行文件。为什么?
编辑:
我尝试对默认情况下带有 NTFS 的 WD HDD 执行完全相同的操作。在那里,文件获得 777 权限 ( rwxrwxrwx
)。和磁盘本身有关系吗?显然我的知识在这里缺乏。
答案1
HPFS/NTFS/exFAT
是一种分区类型。它索赔该分区包含指定的文件系统类型之一,但这不一定是完整的事实。
尝试lsblk -o +FSTYPE
或在挂载分区时查看 /proc/mounts 以查看实际的文件系统类型。
无论如何,HPFS 不太可能,因此 SSD 很可能已经使用 NTFS 或 exFAT 文件系统进行格式化。
就 Linux 的使用而言,这两种文件系统类型都缺乏某种属性:他们不支持 Unix 风格的所有权/组/权限信息。
NTFS 具有 ACL,可用于实现 Unix 风格的所有权和权限;如有必要,它甚至可以支持 Linux 的 ACL。但在此之前,Linux NTFS 驱动程序需要一个换算表Unix 风格的用户和组 ID(UID 和 GID,基本上只是简单的数字)和 Windows 风格的安全 ID(SID:由破折号分隔的长串数字组)之间。如果未提供此功能,驱动程序将无法知道应如何在文件系统上记录文件权限信息,并且它会像使用根本无法支持用户和权限概念的文件系统一样工作。
exFAT 是专为可移动媒体设计的文件系统:假定物理上拥有该媒体的人都能够读取存储在其上的所有内容,因此权限没有多大意义。因此,与 FAT32 和 FAT 系列中的其他文件系统一样,它根本没有真正的文件所有权和权限概念,也没有办法存储它们。
但是 Linux - 或任何类 Unix 系统 - 从根本上要求每个文件都必须与一些用户和一些组,以及必须至少具有一组经典的用户/组/其他权限,或更复杂的 ACL。所有系统调用和操作系统命令都期望每个文件都具有这些。因此,如果文件系统不支持这些,文件系统驱动程序需要伪造它们。
为了在文件系统没有所有权和权限时提供虚假所有权和权限,NTFS-3G 和 exFAT 文件系统驱动程序都支持一组安装选项,您可以使用这些选项来定义两组权限:一组用于所有文件,另一组用于所有文件目录。如果无法将权限信息存储到文件系统上每个文件的元数据中,这就是您所能获得的一切。
WD NTFS HDD 和 Samsung SSD 之间的差异表明,Samsung 很可能已经具有 exFAT 文件系统,而 exFAT 和 NTFS 文件系统只是具有不同的用于伪造权限的默认设置...或者 NTFS HDD 具有 ACL位于其根目录上,在 Windows 中表示为Everyone - Full Control
,配置为由任何新文件或子目录继承。
由于 Windows 中的“Everyone”是全局定义的标准 SID,因此它是 Linux NTFS 驱动程序默认情况下能够理解的极少数 SID 之一。