-
Como descrito no Bad Blocks Howto, localize a partição que contém o bloco defeituoso e calcule o deslocamento do setor dentro da partição. Suponha que a partição seja
/dev/sda3
e seja um PV do LVM. -
Determine o deslocamento do setor do primeiro PE:
pvs -o pe_start --units s /dev/sda3
Subtraia esse deslocamento do deslocamento do setor defeituoso para obter o deslocamento do setor do primeiro PE. Se o resultado for negativo, o setor defeituoso estará na área de metadados do LVM.
Bad_Offset_from_1st_PE = Bad_Offset_in_Partition - First_PE_Start
-
Execute
pvdisplay --maps --units s /dev/sda3
para obter a lista de segmentos no PV; a seção "Volume Físico" desta saída também mostrará o campo "Tamanho PE". -
Divida o deslocamento do setor do primeiro PE (obtido na etapa 2) pelo tamanho do PE em setores. O resultado inteiro da divisão será o número ruim do PE, e o restante será o offset do setor defeituoso dentro daquele PE.
Bad_PE = Bad_Offset_from_1st_PE / PE_Size Bad_Offset_in_PE = Bad_Offset_from_1st_PE % PE_Size
-
Encontre o segmento no mapa que contém o PE ruim. Se você tiver sorte, o segmento pode estar livre, caso contrário, você verá o volume lógico ruim. Você pode parar nesta etapa se o volume não for interessante para você (por exemplo, é swap ou alguns dados temporários com os quais você não se importa). O setor também pode estar além do último PE, o que significa que ele está na área não utilizada, que é menor que um PE completo, ou na segunda área de metadados no final do PV (se essa área de metadados estiver presente).
Se o volume inválido for um instantâneo, seria muito difícil mapear o setor defeituoso para o deslocamento real no volume lógico. Se você realmente se importa com o conteúdo do snapshot, a única coisa que você pode fazer é tentar ler e esperar que o setor defeituoso ainda não seja usado pelo snapshot (e se ele foi usado, espere que a máquina não seja suspensa completamente ao tentar lê-lo).
Se o volume ruim estava usando algo sofisticado, como espelhamento ou striping no nível LVM ... não sei como lidar com isso atualmente.
-
Calcule
Bad_LE = Bad_PE - Seg_First_PE + Seg_First_LE
, ondeSeg_First_PE
é a primeira extensão física do segmento ruim eSeg_First_LE
é a primeira extensão lógica no segmento defeituoso, conforme visto nos dados do segmento no mapa. / p> -
Calcule o deslocamento do setor dentro do volume lógico:
Bad_LV_Offset = (Bad_LE * PE_Size) + Bad_Offset_in_PE
-
Retorne ao Howto Bad Blocks em sua segunda etapa para encontrar o arquivo que corresponde ao setor em
Bad_LV_Offset
no sistema de arquivos.