查找直接驻留在分区上的文件系统的偏移量很容易:检查分区起始扇区,乘以扇区大小,完成。
如果文件系统位于 LVM 内怎么办?我可以扫描驱动器的独特功能,例如幻数、UUID 等,但我正在考虑一些不依赖于内容匹配的东西。
是否有针对各种块设备的通用解决方案?那些不按字面意思存储数据的东西呢,比如 LUKS 容器、dm-integrity 等?我不认为块设备形成任何类型的层次结构,所以我想答案是否定的?
答案1
任何依赖设备映射器(包括 LVM)的东西都会显示为设备映射器表;您可以通过运行来查看系统上设置的表
dmsetup table
作为根。
对于“简单”线性映射,这将显示类似
… 0 67108864 linear 8:0 2048
它表示有一个块范围映射到设备 8:0(运行lsblk
以将其与设备节点匹配),从偏移量 2048 开始。
作为一般规则,您不能仅依赖偏移量,因为 LVM LV 可以包含一个或多个 PV 上的多个范围。
答案2
您可以通过查看实际的设备映射器表来完成此操作,如 Stephen Kitt 的回答所建议的。
然而,除了复制设备映射器表之外,此信息对于任何目的来说都是无用的,因为任何给定的逻辑卷都由单个底层设备上按正确顺序的连续块区域组成的保证为零。即使不考虑 RAID 设置,单个逻辑卷也可能跨越多个物理卷,并且基于逻辑盘区映射,各个物理盘区甚至无法远程保证相对于彼此处于“正确”的顺序,更不用说相邻的物理盘区了。彼此。
这意味着您可以拥有一个逻辑卷,其中前 16 MB 位于一个物理卷的最末端,接下来的 30 GB 位于不同的物理卷上,接下来的 512 MB 位于第一个物理卷上但位于前 16 MB 之前,剩余空间位于第三个物理卷上。无论您计划如何处理有关文件系统“启动”的信息,至少在某些情况下它几乎可以保证不起作用。