mdadm raid10 복구 - 파일 시스템이 손상되었습니까? 고칠 수 있나요?

mdadm raid10 복구 - 파일 시스템이 손상되었습니까? 고칠 수 있나요?

배경: 3x1TB 디스크를 사용하여 Ubuntu Bionic 시스템을 설정하고 실행하고 있습니다. 모든 디스크는 약 15GB의 하나의 파티션과 나머지 약 983GB의 파티션으로 분할됩니다.

두 개의 디스크로 구성된 15GB 파티션MD0, 교환을 위한 raid1 배열. 디스크 3개 모두 983GB 파티션을 구성합니다.MD10, /에 대한 raid10 Far 2 어레이, 총 약 1.4TB입니다.

무슨 일이에요: 하드 드라이브 1개에 오류가 발생했습니다. 어쨌든 raid10 어레이는 계속됩니다. md0이 사용하지 않은 나머지 15GB 파티션을 추가하라고 요청했지만 시스템이 부팅되었습니다. 걱정하지 마세요\o/

다음에 무슨 일이 일어났나요: 새 드라이브를 주문한 지 몇 시간이 지나서 파일 시스템이 읽기 전용으로 바뀌더니 재부팅에 실패했습니다. 본질적으로 두 번째 디스크는 실패했지만 스마트는 불량 블록 대신 일련의 CRC 오류를 보고했습니다.

이 전에도 RAM 스틱이 파손되는 문제가 있었고 동시에 RAM을 교체하는 데 따른 시스템 안정성 문제도 있었습니다. (지금은 해결되었습니다.)

나 지금 어디야?: ddrescue를 사용하여 두 디스크를 모두 이미지화했으며 testdisk를 사용하여 파일 시스템을 확인하고 복구하려고 시도했습니다. (디스크는 현재 다시 시작하기 위해 이미지를 다시 작성하는 중입니다.) 기본적으로 ddrescue가 복사할 때 한 디스크는 괜찮아 보이고 다른 디스크에는 불량 블록이나 읽을 수 없는 섹터가 표시되지 않지만 파일 시스템 문제가 있는 것으로 보입니다.

제 생각에는 두 번째 디스크 하드웨어가 고장난 것이 아니라 RAM이 손상되어 파일 시스템 오류가 발생하여 디스크를 읽을 수 없게 되었기 때문인 것 같습니다.

증거 mdadm --실제 드라이브를 확인합니다. sdf는 "양호", sdd는 "불량"입니다.

/dev/sdf:
   MBR Magic : aa55
Partition[0] :     31997952 sectors at         2048 (type fd)
Partition[1] : 1921523712 sectors at       32000000 (type fd)

/dev/sdd:
   MBR Magic : aa55
Partition[0] :     32002048 sectors at         2048 (type 83)
Partition[1] :   1921519616 sectors at     32004096 (type 83)

여기에서 두 가지를 볼 수 있습니다. 첫째, sdd 파티션이 linux raid(fd) 대신 direct ext4 linux(83)로 복원되었고, 둘째, sdd0이 sdd1에서 4096 섹터를 얻은 것 같습니다(그런 식으로 파티션을 만들지 않는 한...). 그러나 나는 그것이 의심스럽다).

Testdisk는 또한 먼저 양호한 디스크의 파일 시스템 문제를 확인하는 것으로 보입니다.

Disk /dev/sdf - 1000 GB / 931 GiB - CHS 121601 255 63
Current partition structure:
     Partition                  Start        End    Size in sectors
 1 * Linux RAID               0  32 33  1991 231 32   31997952 [zen:0]
 2 P Linux RAID            1991 231 33 121601  57 56 1921523712 [zen:10]

Disk /dev/sdd - 1000 GB / 931 GiB - CHS 121601 255 63
Current partition structure:
     Partition                  Start        End    Size in sectors
 1 * Linux                    0  32 33  1992  41 33   32002048

 Bad relative sector.
 2 P Linux                 1992  41 34 121601  57 56 1921519616

이 문제를 수정하기 위해 Testdisk를 얻을 수 없습니다. partedmagic의 버전은 Linux raid 파티션을 지원하지 않는 것 같고 fsck를 사용하면 여분의 슈퍼 블록이 있어도 슈퍼 블록 오류에 잘못된 매직 넘버가 발생합니다.

다음은 mdadm --examine을 루프 장치 탑재 이미지로 검사한 결과입니다. 다시 좋은 sdf와 나쁜 sdd가 뒤따릅니다.

/dev/loop1:
          Magic : a92b4efc
        Version : 1.2
    Feature Map : 0x1
     Array UUID : 152533db:4e587991:5e88fe61:7fc8bfb8
           Name : zen:10
  Creation Time : Wed Jun 20 10:47:05 2018
     Raid Level : raid10
   Raid Devices : 3
 Avail Dev Size : 1921261568 (916.13 GiB 983.69 GB)
     Array Size : 1440943104 (1374.19 GiB 1475.53 GB)
  Used Dev Size : 1921257472 (916.13 GiB 983.68 GB)
    Data Offset : 262144 sectors
   Super Offset : 8 sectors
   Unused Space : before=262064 sectors, after=4096 sectors
          State : clean
    Device UUID : ef11197c:7461dd9e:ad2e28f6:bad63a7b
Internal Bitmap : 8 sectors from superblock
    Update Time : Thu Aug 30 15:36:14 2018
  Bad Block Log : 512 entries available at offset 16 sectors
       Checksum : 93267b2f - correct
         Events : 55599
         Layout : far=2
     Chunk Size : 512K
    Device Role : Active device 1

어레이 상태: AA. ('A' == 활성, '.' == 누락, 'R' == 교체)

/dev/loop2:
          Magic : a92b4efc
        Version : 1.2
    Feature Map : 0x1
     Array UUID : 152533db:4e587991:5e88fe61:7fc8bfb8
           Name : zen:10
  Creation Time : Wed Jun 20 10:47:05 2018
     Raid Level : raid10
   Raid Devices : 3
 Avail Dev Size : 1921257472 (916.13 GiB 983.68 GB)
     Array Size : 1440943104 (1374.19 GiB 1475.53 GB)
    Data Offset : 262144 sectors
   Super Offset : 8 sectors
   Unused Space : before=262064 sectors, after=0 sectors
          State : active
    Device UUID : f70177cb:7daea233:2feafe68:e36186cd
Internal Bitmap : 8 sectors from superblock
    Update Time : Thu Aug 30 15:25:37 2018
  Bad Block Log : 512 entries available at offset 16 sectors
       Checksum : 3c6bebab - correct
         Events : 55405
         Layout : far=2
     Chunk Size : 512K
    Device Role : Active device 0
    Array State : AA. ('A' == active, '.' == missing, 'R' == replacing)

sdd1(일명 Loop2)에 문제가 있다는 점을 다시 한 번 언급할 가치가 있습니다. "사용된 개발 크기"가 나열되어 있지 않습니다. 이미지를 사용하여 어레이를 다시 생성하려고 시도했는데 작동하는 것처럼 보였지만 어레이가 마운트되지 못했습니다(다시 나쁜 마법 슈퍼블록).

질문 제 생각에는 sdd의 손상된 파티션 맵이 문제의 원인인 것 같습니다. 이것이 맞는 것 같나요? 이 문제를 해결하는 것이 가능합니까? 그렇다면 어떤 방법으로 해결할 수 있습니까? fdisk?

원하는 결과가능한 한 많은 양을 다른 디스크에 덤프할 수 있도록 어레이를 마운트 가능하게 만듭니다. 나는 /etc 및 /home의 백업을 가지고 있지만(이론적으로는 아직 복원을 시도하지 않았습니다), 이 배열을 일시적으로 복원할 수 있다면 도움이 될 것이며 마음의 평화를 얻을 수 있을 것입니다. photorec을 간단히 실행한 결과 많은 수의 파일을 복구할 수 있지만 디렉터리 구조나 파일 이름 없이 거의 테라바이트에 달하는 파일을 정렬하는 것으로 나타났습니다.

[해결됨] 이전에 했던 조작으로 인해 문제가 발생하지 않도록 제가 만든 디스크 이미지의 새 복사본을 제자리에 두었습니다. 실제로 하나는 파티션 이미지이고 다른 하나는 전체 디스크 이미지이므로 마운트하세요.

losetup --show -f /recovered/imgs/sdf1-md10.img
losetup -o 16386097152 /dev/loop3 /media/adrian/855c7d84-25f0-4b2f-b8fa-a5408536aaff/sdd-801485.img

확인 결과 cat /proc/mdstatmd127과 같은 비활성 상태로 설치되었으므로 중지하고 @derobert가 제안한 대로 어셈블링을 실행했습니다.

mdadm --stop /dev/md127
mdadm -v --assemble --force /dev/md10 /dev/loop3 /dev/loop2

그리고 어레이를 마운트하고 액세스할 수 있습니다! \영형/

제가 시도 초기에 연구에서 놓쳤던 중요한 사실은 새로운 시스템에서 어레이를 재조립하려는 경우 이것이 가능하다는 사실조차 인식하지 못한 채 장치(어셈블리)를 지정해야 한다는 것입니다.

답변1

복사본을 만들고 복사본에만 작업한 것처럼 들립니다. 괜찮습니다!

검사 출력에 "Used Dev Size"가 부족한 것이 문제라고 생각하지 않습니다. 대신 전체 장치를 사용한다는 의미라고 생각합니다. 다른 하나는 사용된 크기가 장치 크기보다 4096 작다는 것을 보여 주며 이는 파티션이 4096 더 작다는 것과 일치합니다. (어레이를 생성할 때 mdadm은 모든 장치에 대해 최소 파티션 크기를 사용합니다. 그렇지 않으면 어레이를 구축할 수 없습니다.)

파티션 테이블이 손상된 것 같습니다. 작성하지 않은 섹터가 손상된 경우는 매우 드물지만 여전히 대부분 유효해 보입니다. 83이 mdraid의 파티션 유형인 데에는 아무런 문제가 없습니다. 다른 유형은 실제로 더 이상 사용되지 않으며 사용해서는 안 됩니다. FS가 아닌 데이터(제 기억이 맞다면 da)도 좋은 선택입니다.

내 생각엔 그게 너에게 필요한 전부인 것 같아 mdadm --assemble --force /dev/md«WHATEVER» /dev/loop1 /dev/loop2. 최신이 아닌 장치를 강제로 적용하라는 메시지가 표시되면 해당 장치가 어레이를 조립(다운그레이드)해야 합니다. 그런 다음 시도 fsck.ext4(또는 무엇이든) 할 수 있습니다. /dev/md«WHATEVER»작동한다면 시스템의 initramfs에서 모든 작업을 수행하여 복구한 다음 mdadm -a새 디스크를 사용하여 재구축할 수 있습니다.

관련 정보