smartd在我的硬盘上检测到坏块,我想知道该块属于哪个文件.我在逻辑卷上有ext3文件系统.谷歌给了我很多关于如何在hdd块设备上直接创建文件系统时按块编号查找文件的教程(比如这一篇:
http://www.vanderzee.org/bad_blocks_howto).他们都没有提到LVM.在我的情况下有没有办法按块号查找文件?
解决方法
>如Bad Blocks Howto中所述,找到包含坏块的分区并计算分区内的扇区偏移量.假设分区是/ dev / sda3,它是LVM PV.
>确定第一个PE的扇区偏移量:
>确定第一个PE的扇区偏移量:
pvs -o pe_start --units s /dev/sda3
从坏扇区偏移量中减去此偏移量,以获得与第一个PE相关的扇区偏移量.如果结果为负,则坏扇区位于LVM元数据区域中.
Bad_Offset_from_1st_PE = Bad_Offset_in_Partition - First_PE_Start
>运行pvdisplay –maps –units s / dev / sda3以获取PV中的段列表;此输出的“物理卷”部分也将显示“PE大小”字段.
>将扇区偏移量除以第一个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
>在地图中找到包含错误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