Назад | Перейти на главную страницу

найти файл по номеру блока на ext3 fs на lvm

smartd обнаружил плохой блок на моем жестком диске, и я хотел бы знать, к какому файлу принадлежит этот блок. У меня есть файловая система ext3 на логическом томе. Google дал мне много руководств (например, этот: http://www.vanderzee.org/bad_blocks_howto) о том, как найти файл по номеру блока, когда файловая система создается непосредственно на блочном устройстве hdd. Ни один из них не упоминает LVM. Есть ли в моем случае способ найти файл по номеру блока?

  1. Как описано в руководстве по работе с плохими блоками, найдите раздел, содержащий плохой блок, и вычислите смещение сектора внутри раздела. Предположим, что разбиение /dev/sda3, и это LVM PV.

  2. Определите смещение сектора первого PE:

    pvs -o pe_start --units s /dev/sda3
    

    Вычтите это смещение из смещения плохого сектора, чтобы получить смещение сектора от первого PE. Если результат отрицательный, плохой сектор находится в области метаданных LVM.

    Bad_Offset_from_1st_PE = Bad_Offset_in_Partition - First_PE_Start
    
  3. Бегать pvdisplay --maps --units s /dev/sda3 получить список сегментов в PV; в разделе «Физический объем» этих выходных данных также будет отображаться поле «Размер PE».

  4. Разделите смещение сектора от первого 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
    
  5. Найдите на карте сегмент, содержащий плохой PE. Если повезет, сегмент может оказаться свободным, иначе вы увидите плохой логический том. Вы можете остановиться на этом шаге, если том вам не интересен (например, это своп или какие-то временные данные, которые вам не нужны). Сектор также может находиться за пределами последнего PE, что означает, что он находится либо в неиспользуемой области, которая меньше полного PE, либо во второй области метаданных в конце PV (если такая область метаданных присутствует).

    Если плохой том является моментальным снимком, сопоставить плохой сектор с реальным смещением в логическом томе будет очень сложно. Если вы действительно заботитесь о содержимом снимка, единственное, что вы могли бы сделать, это попробовать прочитать его и надеяться, что плохой сектор еще не использовался снимком (и если он был использован, надейтесь, что машина не зависнет полностью при попытке прочитать).

    Если на плохом томе использовалось что-то необычное, например зеркальное отображение или чередование на уровне LVM… не знаю, как с этим бороться.

  6. Рассчитать Bad_LE = Bad_PE - Seg_First_PE + Seg_First_LE, где Seg_First_PE это первая физическая протяженность плохого сегмента, и Seg_First_LE - это первый логический экстент в плохом сегменте, как видно из данных сегмента на карте.

  7. Вычислить смещение сектора внутри логического тома:

    Bad_LV_Offset = (Bad_LE * PE_Size) + Bad_Offset_in_PE
    
  8. Вернитесь к инструкции по работе с плохими блоками на втором этапе, чтобы найти файл, соответствующий сектору в Bad_LV_Offset в файловой системе.