저널이 손상된 ext4 파일 시스템 복구

저널이 손상된 ext4 파일 시스템 복구

내 하드 드라이브의 로그에 일종의 하드웨어 문제가 있는 것 같습니다. 이렇게 하면 드라이브가 로드되지 않습니다. 실행 mount -r -t ext4 /dev/sda5 /mnt/root결과는 다음과 같습니다.

[ 1420.671055] ata1.00: exception Emask 0x0 SAct 0x1000000 SErr 0x0 action 0x0
[ 1420.673862] ata1.00: irq_stat 0x40000008
[ 1420.676600] ata1.00: failed command: READ FPDMA QUEUED
[ 1420.679326] ata1.00: cmd 60/40:c0:a8:9d:0a/00:00:08:00:00/40 tag 24 ncq 32768 in
[ 1420.679326]          res 41/40:40:e1:9d:0a/00:00:08:00:00/00 Emask 0x409 (media error) <F>
[ 1420.685014] ata1.00: status: { DRDY ERR }
[ 1420.687858] ata1.00: error: { UNC }
[ 1420.761064] ata1.00: configured for UDMA/133
[ 1420.763863] sd 0:0:0:0: >[sda] Unhandled sense code
[ 1420.766653] sd 0:0:0:0: >[sda]  
[ 1420.769364] Result: hostbyte=DID_OK driverbyte=DRIVER_SENSE
[ 1420.772104] sd 0:0:0:0: >[sda]  
[ 1420.774780] Sense Key : Medium Error [current] [descriptor]
[ 1420.777491] Descriptor sense data with sense descriptors (in hex):
[ 1420.780249]         72 03 11 04 00 00 00 0c 00 0a 80 00 00 00 00 00 
[ 1420.783175]         08 0a 9d e1 
[ 1420.785972] sd 0:0:0:0: >[sda]  
[ 1420.788730] Add. Sense: Unrecovered read error - auto reallocate failed
[ 1420.791545] sd 0:0:0:0: >[sda] CDB: 
[ 1420.794331] Read(10): 28 00 08 0a 9d a8 00 00 40 00
[ 1420.797242] end_request: I/O error, dev sda, sector 134913505
[ 1420.800072] ata1: EH complete
[ 1420.800077] JBD2: Failed to read block at offset 2748
[ 1420.812529] JBD2: recovery failed
[ 1420.815275] EXT4-fs (sda5): error loading journal

이것이 무엇을 의미하는지 거의 알 수 없지만 로그 로드에 실패하는 하드웨어 문제처럼 보입니다. 이 문제를 해결할 방법이 있나요? 예를 들어, 드라이브의 나머지 부분을 대부분 그대로 유지하면서 로그를 다른 오프셋으로 재배치할 수 있습니까? 드라이브를 계속 사용할 생각은 없습니다. 중요한 파일을 복사할 수 있도록 마운트하고 싶을 뿐입니다.

답변1

파일에 액세스할 수 있도록 로그를 재생하지 않고 읽기 전용으로 마운트하려면(아직 일반 파일 시스템에 커밋되지 않은 일부 변경 사항이 손실될 수 있음):

mount -o ro,noload...

답변2

출력을 살펴보십시오 smartctl -a /dev/sda. 케이블 문제가 아니라면 디스크가 죽을 수도 있습니다. 최근 백업이 없는 경우 적절한 옵션과 함께 dd_rescue 또는 dd를 사용하여 블록 장치 콘텐츠를 복사해야 합니다(설치가 필요하지 않음).

그런 다음 시도해 볼 수 있습니다 hdparm --write-sector(항상 "매우 위험한" 옵션이 흥미롭습니다...).

또 다른 옵션은 결함이 있는 섹터를 우회하는 DM 장치를 만드는 것입니다. 물론, 내용이 복원되지는 않습니다. sda 오프셋(134913505)을 sda5 오프셋으로 변환해야 합니다(sda5의 첫 번째 섹터 번호를 찾아서 빼기). sda5 오프셋이 12345라고 가정합니다. 섹터 12345가 sda5에 매핑되지 않고 다른 위치(예: 루프 장치)에 매핑되는 블록 장치를 생성합니다. dmsetup 생성에 사용되는 장치 정의는 다음과 같습니다.

0 12345 linear /dev/sda5 0
12345 1 linear /dev/loop0 0
12346 99987653 /dev/sda5 12345

# format:
# logical_start_sector num_sectors linear destination_device start_sector

운이 좋지 않을 것이며 결함이 있는 섹터가 하나만 있을 것입니다. 원하는 만큼 매핑할 수 있지만(DM 장치가 해당 섹터에 0을 제공하지만 쓰기 가능) Loop0에서 오프셋을 계산하는 것은 흥미로울 수 있습니다. 또 다른 옵션은 동일한 크기의 가상 장치를 사용하여 다시 매핑하고 씬 프로비저닝 또는 제로 대상 장치(1 섹터와 같은 작은 블록 크기)의 스냅샷을 사용하는 것입니다.

편집 1

물론 루프 장치는 동일한 디스크(sda)에 있는 파일을 가리켜서는 안 됩니다.

답변3

FS가 읽기 전용으로 마운트되고 콘텐츠가 복사되는 복구 모드로 부팅할 수 있습니다.

관련 정보