加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

在lvm上的ext3 fs上按块编号查找文件

发布时间:2020-12-13 18:02:53 所属栏目:Linux 来源:网络整理
导读:smartd在我的硬盘上检测到坏块,我想知道该块属于哪个文件.我在逻辑卷上有ext3文件系统.谷歌给了我很多关于如何在hdd块设备上直接创建文件系统时按块编号查找文件的教程(比如这一篇: http://www.vanderzee.org/bad_blocks_howto).他们都没有提到LVM.在我的情
smartd在我的硬盘上检测到坏块,我想知道该块属于哪个文件.我在逻辑卷上有ext3文件系统.谷歌给了我很多关于如何在hdd块设备上直接创建文件系统时按块编号查找文件的教程(比如这一篇: http://www.vanderzee.org/bad_blocks_howto).他们都没有提到LVM.在我的情况下有没有办法按块号查找文件?

解决方法

>如Bad Blocks Howto中所述,找到包含坏块的分区并计算分区内的扇区偏移量.假设分区是/ dev / sda3,它是LVM PV.
>确定第一个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

>在第二步返回Bad Blocks Howto,找到与文件系统中Bad_LV_Offset的扇区对应的文件.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读