smartd обнаружил плохой блок на моем жестком диске, и я хотел бы знать, к какому файлу принадлежит этот блок. У меня есть файловая система ext3 на логическом томе. Google дал мне много руководств (например, этот: http://www.vanderzee.org/bad_blocks_howto) о том, как найти файл по номеру блока, когда файловая система создается непосредственно на блочном устройстве hdd. Ни один из них не упоминает LVM. Есть ли в моем случае способ найти файл по номеру блока?
Как описано в руководстве по работе с плохими блоками, найдите раздел, содержащий плохой блок, и вычислите смещение сектора внутри раздела. Предположим, что разбиение /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_LV_Offset
в файловой системе.