cmh*_*ira 8 linux hard-drive filesystems fat32 partitioning
当我尝试在 vFat USB 闪存驱动器中No space left on device创建多个文件时,为什么会出现此问题?32767
$ df -H
> Filesystem Size Used Avail Use% Mounted on
> /dev/sdb1 16G 2.1M 16G 1% /media/cmhteixeira/cmhteixeira-usb
Run Code Online (Sandbox Code Playgroud)
Partition Type: W95 FAT32 (LBA)
Contents: FAT (32-bit version)
Run Code Online (Sandbox Code Playgroud)
我一直在网上看到 FAT32/vFat 有一些限制,包括:
我在单个目录(不一定是根目录)中创建这些文件,格式为12345678.txt. 但在创建第一个 32767 个此类文件后,我收到no space left on device错误。可疑的是,最大文件数恰好是我在互联网上阅读的最大文件数的一半(2^16-2=65,534 vs 2^15-1=32,767)。
你知道为什么吗?
(如果我在单独的目录中创建它们,我可以创建更多文件)
Cpt*_*ale 22
FAT32 32 位短文件名也必须为大写(技术上是 0x80 以下范围内的任何 ASCII 字符,不包括空格),以达到最多 65,534 个文件。
长文件名将占用更多 32 位条目,因此所有文件都占用 2 个块,导致最大文件数减半
Roh*_*pta 12
你已经有了答案
我一直在网上看到 FAT32/vFat 有一些限制,包括:
单个目录中最多有 65,534 个文件。如果文件名不是 (8.3),则更少。
您正在创建一个扩展名为txt. 对于 8.3 格式,文件名必须全部大写。尝试使用.TXT替代。
正如其他答案中提到的,第二个目录条目是使用长文件名创建的,因为“txt”是小写(而不是大写),因此会生成一个 LFN 条目来存储它。
然而,由于这只是扩展名中的大小写差异,因此可以通过将其保存在 0x0C 字节上来避免 LFN,这可以在 Linux 上使用挂载选项启用shortname:
如果文件名仅包含小写字母,或者是小写基本名称与大写扩展名的组合,反之亦然;并且没有特殊字符,并且符合 8.3 限制,因此在 Windows NT 和更高版本的 Windows(例如 XP)上不会创建 VFAT 条目。相反,目录项的字节 0x0C 中的两位用于指示文件名应被视为全部或部分小写。具体来说,第 4 位表示小写扩展名,第 3 位表示小写基本名称,这允许使用“example.TXT”或“HELLO.txt”等组合,但不允许使用“Mixed.txt”。很少有其他操作系统支持它。这会产生与旧版 Windows 版本 (Windows 95 / 98 / 98 SE / ME) 的向后兼容性问题,如果使用此扩展名,这些版本会看到全大写文件名,因此在操作之间传输时可以更改文件名。系统,例如 USB 闪存驱动器上。当前 2.6.x 版本的 Linux 在读取时会识别此扩展(来源:kernel 2.6.18 /fs/fat/dir.c 和 fs/vfat/namei.c);mount选项shortname决定了写入时是否使用该功能。
https://en.wikipedia.org/wiki/Design_of_the_FAT_file_system#VFAT_long_file_names
| 归档时间: |
|
| 查看次数: |
3142 次 |
| 最近记录: |