在这个书,以下是关于文件系统寻址的内容:
文件系统不需要关心应该将块放置在物理介质上的何处,这是设备驱动程序的工作
我有一些与此相关的问题:
- 作为索引节点一部分的指针是否包含逻辑块索引或实际物理地址?
- 如果是前者,那么块索引到实际物理位置的映射存储在哪里?
- 是否有物理寻址的示例(例如 SSD 设备)?
答案1
作为索引节点一部分的指针是否包含逻辑块索引或实际物理地址?
逻辑,相对于包含文件系统的块设备的开头。
那么块索引到实际物理位置的映射存储在哪里呢?
这种映射可以发生在几个层中:
如果使用 LVM,它会提供一个映射表,将逻辑卷设备的块范围映射到某个物理卷块设备 + 偏移量。
软件 RAID 还以某种(简单的、系统的)方式将 RAID 设备的块映射到底层块设备的块(如果使用)。
分区块设备对逻辑块号应用一个简单的偏移量,等于分区开头到磁盘开头的距离。
现代SATA、SAS和NVMe都使用基于从设备开头开始编号的逻辑块的寻址,因此只有磁盘本身知道实际的物理位置。对于 HDD 来说,经典的柱面/磁头/扇区物理寻址早已过时:现代 HDD 的外柱面可能比内柱面具有更多的物理扇区,并且还可能存在其他复杂情况。对于SSD,逻辑块号通过磨损均衡表映射来找到实际的物理块号。
当您单独查看每一层时,通常将较高级别的块号称为“逻辑”,将较低级别的块号称为“物理”,但是当多个层彼此堆叠时,它们实际上都是某种程度的“逻辑”,直到您进入实际的存储设备本身。
是否有物理寻址的示例(例如 SSD 设备)?
除非您正在开发/调试/破解实际 SSD 的固件,或者对从 SSD 拆焊的松散闪存芯片进行取证检查,否则您不太可能访问实际的物理寻址。可能涉及专有的、特定于供应商的解决方案(翻译:每个制造商都可以按照他们认为最好的方式去做,并且确切的实施可能被视为商业秘密)。现代硬盘的情况与此类似。
从内核的角度来看,所有现代存储设备都只是一些固定大小的长行逻辑块,从设备开头的块 #0 开始编号,并使用简单递增的块号进行编号。在实际存储设备之外,真正的物理寻址并不实际。