mount 命令和 FAT12 文件系统的工作原理

mount 命令和 FAT12 文件系统的工作原理

我正在尝试使用 Linux 中的文件系统。我想了解一些问题。以下是我使用过的命令:

truncate disk.img -s 1M
mkfs.vfat -F12 -S512 -s1 disk.img 
#I have made a FAT12 filesystem on a simple 1 MB file in my home directory

现在我可以使用以下命令挂载我的文件:

sudo mount disk.img /mnt

为什么我们在这里使用 sudo?没有 sudo 我无法挂载

现在我将一个跨越 2 个集群的文件复制到挂载点:

sudo cp file.bin /mnt 

然后我卸载磁盘:

sudo umount /mnt

我使用像 ghex 这样的十六进制编辑器来查看这一切之后到底发生了什么:

ghex disk.img

在 FAT 中,我看到以下内容(RAW 格式):

(Beginning from byte 0x200, after the bootsector)
f8ff ff00 4000 ff0f 0000 0000 ..........

这是我的主要问题:我以为 FAT12 在 FAT 中每个簇使用 1.5 个字节,但它似乎使用了 2 个?(我不确定这一点,也许我不太了解 FAT12)

答案1

我以为 FAT12 在 FAT 中每簇使用 1.5 个字节,但它似乎使用 2

1.5 确实如此。您的疑问可能是因为在您的示例中,集群 #2 是空闲的;这可能会让您感到惊讶。

相关片段FAT 文件系统作者:Andries Brouwer:

数据区域的第一个簇是簇 #2。这使得 FAT 的前两个条目未被使用。在第一个条目的第一个字节中存储了媒体描述符的副本。该条目的其余位为 1。在第二个条目中存储了文件结束标记。[…]

两个 FAT12 条目存储在三个字节中;如果这些字节是uvwxyz那么条目就是xuvyzw

FAT12 条目的可能值为:000:可用,002- fef:簇正在使用;给出的值是文件中下一个簇的编号,ff0- ff6:保留,ff7:坏簇,ff8- fff:簇正在使用,该文件中的最后一个簇。[…]

那我们来解码吧。

f8ff ff00 4000 ff0f 0000 0000
f8ff ff                        - entries 0,1
       00 4000                 - entries 2,3
       uv wxyz                   and the sequence according to the citation
               ff0f 00         - entries 4,5
               uvwx yz
                      00 0000  - entries 6,7

uv,,→ ,:wx​​yzxuvyzw

00 40 00 -> 000 004
ff 0f 00 -> fff 000

这给了我们以下结论:

  1. 000- 自由的
  2. 004– 集群正在使用;下一个集群是#4
  3. fff- 正在使用的集群,此文件中的最后一个
  4. 000- 自由的

检查目录条目以查找有问题的文件(我希望它位于偏移量处1a00)。

字节内容
0-10 文件名(8 字节),带扩展名(3 字节)
[…]
26-27 起始簇(0 为空文件)
[…]

字节 26-27 应该适用0300于您的情况。它是小端字节序,人类可读的(大端字节序)值为0003。起始簇是 #3。

该文件从簇 #3 开始,下一个簇是 #4,它是此文件中的最后一个簇。该文件跨越两个簇。一切都合适。

相关内容