fac*_*cha 7 ext3 lvm bad-blocks
smartd 在我的硬盘上检测到一个坏块,我想知道该块属于哪个文件。我在逻辑卷上有 ext3 文件系统。谷歌给了我很多教程(比如这个:http : //www.vanderzee.org/bad_blocks_howto),当文件系统直接在硬盘块设备上创建时,如何按块号查找文件。他们都没有提到 LVM。在我的情况下,有没有办法按块号查找文件?
Ser*_*sov 10
如坏块方法中所述,找到包含坏块的分区并计算该分区内的扇区偏移量。假设分区是/dev/sda3,并且它是一个 LVM PV。
确定第一个 PE 的扇区偏移:
pvs -o pe_start --units s /dev/sda3
Run Code Online (Sandbox Code Playgroud)
从坏扇区偏移量中减去这个偏移量,得到第一个 PE 的扇区偏移量。如果结果是否定的,则坏扇区在 LVM 元数据区域中。
Bad_Offset_from_1st_PE = Bad_Offset_in_Partition - First_PE_Start
Run Code Online (Sandbox Code Playgroud)运行pvdisplay --maps --units s /dev/sda3获取PV中的segment列表;此输出的“Physical Volume”部分还将显示“PE Size”字段。
将第一个 PE(您在步骤 2 中获得的)的扇区偏移量除以扇区中的 PE 大小。除法的整数结果将是坏 PE 编号,余数将是该 PE 内的坏扇区偏移量。
Bad_PE = Bad_Offset_from_1st_PE / PE_Size
Bad_Offset_in_PE = Bad_Offset_from_1st_PE % PE_Size
Run Code Online (Sandbox Code Playgroud)在映射中找到包含坏 PE 的段。如果幸运的话,该段可能是空闲的,否则您将看到错误的逻辑卷。如果您对卷不感兴趣(例如,它是交换卷,或者您不关心的一些临时数据),您可以在这一步停止。该扇区也可能超出最后一个 PE,这意味着它要么位于小于完整 PE 的未使用区域,要么位于 PV 末尾的第二个元数据区域(如果存在此类元数据区域)。
如果坏卷是快照,将坏扇区映射到逻辑卷中的实际偏移量将非常困难。如果你真的关心快照内容,你唯一能做的就是尝试从中读取并希望快照尚未使用坏扇区(如果使用了,希望机器不会完全挂起尝试阅读时)。
如果坏卷在 LVM 级别使用了一些奇特的东西,例如镜像或条带化……目前不知道如何处理。
计算Bad_LE = Bad_PE - Seg_First_PE + Seg_First_LE,其中Seg_First_PE是坏段的第一个物理范围,是坏段Seg_First_LE中的第一个逻辑范围,如映射中的段数据所示。
计算逻辑卷内的扇区偏移:
Bad_LV_Offset = (Bad_LE * PE_Size) + Bad_Offset_in_PE
Run Code Online (Sandbox Code Playgroud)返回到坏块指南的第二步,找到与文件系统中的扇区对应Bad_LV_Offset的文件。
| 归档时间: |
|
| 查看次数: |
2022 次 |
| 最近记录: |