Linux Raid1 구성원 디스크에서 파일 복구 - 가능한 한 나쁨

Linux Raid1 구성원 디스크에서 파일 복구 - 가능한 한 나쁨

당신이 잘 지내기를 바랍니다.

저는 IT 회사에서 Windows 시스템과 클라우드 기술을 담당하는 기술자로 일하고 있기 때문에 안타깝게도 Linux에 대한 지식이 매우 제한되어 있습니다. 그러니 어리석은 질문이 있으면 양해해 주시기 바랍니다. 하지만 도움을 드리도록 노력하겠습니다. 그리고, 여기에 처음 글을 올리는 것이니, 잘못된 점이 있으면 알려주세요.

이야기는 다음과 같습니다. 새로운 고객이 전화를 걸어 자신의 서버에 액세스할 수 없다고 말했습니다. -> 서버가 고장났습니다(새 PS를 사용해도 전원 공급 장치와 마더보드가 고장 났고 POST 경고음도 들리지 않았습니다). 그의 이전 IT 회사는 1인 방송이었으나 안타깝게도 세상을 떠났기 때문에 아무런 도움도 받지 못했습니다.

서버는 LSI 논리 RAID가 내장된 15년 된 Fujitsu입니다. 내부에는 MB에 연결된 2개의 2TB SATA HDD가 있습니다. 그의 모든 데이터와 소프트웨어 데이터베이스 파일은 이 서버에 있습니다. 물론 백업은 없습니다.. 모든 것이 미러링되므로 백업이 필요하지 않습니다.. 아시죠? 고객은 또한 서버 운영체제를 설치한 지 2~3년 전이라고 밝혔습니다.

그래서 Diskinternals RAID Recovery와 같은 일부 복구 도구를 사용하기 시작했지만 실제로는 작동하지 않았습니다. 단일 파일만 가져오지만(그 중 일부는 기능 문서이므로 디스크 자체는 괜찮아 보입니다) 폴더 등은 가져오지 않습니다. 고객의 소프트웨어를 다른 시스템으로 복원하려면 완전한 폴더, 하위 폴더 및 파일이 필요합니다.

하지만 파일과 폴더는 Linux 시스템에만 존재한다는 것을 알았습니다. 따라서 이전 기술자가 Linux OS를 설치하고 고객을 위해 네트워크 공유를 설정했다고 가정합니다.

그래서 RAID 멤버 디스크 중 하나에서 다른 HDD로 덤프 파일을 가져오고 추가 테스트를 위해 Debian 시스템을 설정했습니다. 그가 linux/mdadm Raid를 설정했는지, 아니면 온보드 LSI Raid 컨트롤러를 사용하여 이 작업을 수행했는지는 아직 확실하지 않습니다.

지금까지 디스크를 설치하거나 재조립하지 않았습니다. 어떤 도움이라도 대단히 감사하겠습니다.

  • mount /dev/sdb /mnt/mountpoint에서 오류 발생 FS 오류, 옵션 오류, 슈퍼 블록 손상
  • 디스크가 /dev/에 md로 표시되지 않습니다.

lsblk:

sdb      8:16   0   1,8T  0 disk 
├─sdb1   8:17   0   240G  0 part 
└─sdb2   8:18   0   1,6T  0 part

fdisk -l

Festplatte /dev/sdb: 1,82 TiB, 2000398934016 Bytes, 488378646 Sektoren
Festplattenmodell: EFAX-68FB5N0    
Einheiten: Sektoren von 1 * 4096 = 4096 Bytes
Sektorgröße (logisch/physikalisch): 4096 Bytes / 4096 Bytes
E/A-Größe (minimal/optimal): 4096 Bytes / 4096 Bytes
Festplattenbezeichnungstyp: dos
Festplattenbezeichner: 0x87c99aec

Gerät      Boot     Anfang       Ende   Sektoren Größe Kn Typ
/dev/sdb1  *          2048   62916607   62914560  240G fd Linux RAID-Autoerkennung
/dev/sdb2         62916608 3897729167 3834812560 14,3T fd Linux RAID-Autoerkennung
/dev/sdb3       3897729168 3907029167    9300000 35,5G fd Linux RAID-Autoerkennung

mdadm --query /dev/sdb

/dev/sdb: is not an md array

mdadm --어셈블리 --스캔

mdadm: No arrays found in config file or automatically

mdadm --/dev/sdb 확인

mdadm: No md superblock detected on /dev/sdb

어떤 도움이나 팁이라도 미리 감사드립니다. KofftheHoff

편집 1:

사용 후

losetup --find --show --read-only --sector-size 512 --partscan /dev/sdb

그리고

mdadm --examine /dev/loop*

나는 이것이 유망해 보인다고 생각합니다.

/dev/loop0:
   MBR Magic : aa55
Partition[0] :     62914560 sectors at         2048 (type fd)
Partition[1] :   3834812560 sectors at     62916608 (type fd)
Partition[2] :      9300000 sectors at   3897729168 (type fd)
/dev/loop0p1:
          Magic : a92b4efc
        Version : 1.2
    Feature Map : 0x0
     Array UUID : 7e3b9767:71d0e46d:6fe589d3:47671ff3
           Name : schobert-fs:0
  Creation Time : Wed Mar 27 18:49:49 2019
     Raid Level : raid1
   Raid Devices : 2

 Avail Dev Size : 62881792 (29.98 GiB 32.20 GB)
     Array Size : 31440896 (29.98 GiB 32.20 GB)
    Data Offset : 32768 sectors
   Super Offset : 8 sectors
   Unused Space : before=32680 sectors, after=0 sectors
          State : clean
    Device UUID : 34f9240c:3f35c4a9:b20f6259:5a6a295e

    Update Time : Fri Dec  2 16:10:26 2022
  Bad Block Log : 512 entries available at offset 72 sectors
       Checksum : 9882cebb - correct
         Events : 430


   Device Role : Active device 1
   Array State : AA ('A' == active, '.' == missing, 'R' == replacing)
/dev/loop0p2:
          Magic : a92b4efc
        Version : 1.2
    Feature Map : 0x1
     Array UUID : 1c73d398:e5404786:1cba7820:fb5e4cd5
           Name : schobert-fs:1
  Creation Time : Wed Mar 27 18:50:09 2019
     Raid Level : raid1
   Raid Devices : 2

 Avail Dev Size : 3834550416 (1828.46 GiB 1963.29 GB)
     Array Size : 1917275200 (1828.46 GiB 1963.29 GB)
  Used Dev Size : 3834550400 (1828.46 GiB 1963.29 GB)
    Data Offset : 262144 sectors
   Super Offset : 8 sectors
   Unused Space : before=262056 sectors, after=16 sectors
          State : clean
    Device UUID : 038f5d97:741a9a29:c4803eec:d5502d4b

Internal Bitmap : 8 sectors from superblock
    Update Time : Wed Nov 30 10:19:49 2022
  Bad Block Log : 512 entries available at offset 72 sectors
       Checksum : 5dcb018a - correct
         Events : 12662


   Device Role : Active device 1
   Array State : AA ('A' == active, '.' == missing, 'R' == replacing)
/dev/loop0p3:
          Magic : a92b4efc
        Version : 1.2
    Feature Map : 0x0
     Array UUID : 00bd818b:55eed0df:3ad0c7d3:0c7a3a97
           Name : schobert-fs:2
  Creation Time : Wed Mar 27 18:50:31 2019
     Raid Level : raid1
   Raid Devices : 2

 Avail Dev Size : 9291808 (4.43 GiB 4.76 GB)
     Array Size : 4645888 (4.43 GiB 4.76 GB)
  Used Dev Size : 9291776 (4.43 GiB 4.76 GB)
    Data Offset : 8192 sectors
   Super Offset : 8 sectors
   Unused Space : before=8104 sectors, after=32 sectors
          State : clean
    Device UUID : 1577f59e:d2022fbc:d0b79765:f127efbc

    Update Time : Wed Nov 30 00:01:49 2022
  Bad Block Log : 512 entries available at offset 72 sectors
       Checksum : dc81c5d0 - correct
         Events : 92


   Device Role : Active device 1
   Array State : AA ('A' == active, '.' == missing, 'R' == replacing)
mdadm: No md superblock detected on /dev/loop1.
mdadm: No md superblock detected on /dev/loop2.
mdadm: No md superblock detected on /dev/loop3.
mdadm: No md superblock detected on /dev/loop4.
mdadm: No md superblock detected on /dev/loop5.
mdadm: No md superblock detected on /dev/loop6.
mdadm: No md superblock detected on /dev/loop7.
mdadm: cannot open /dev/loop-control: Invalid argument

@frostschutz와 이미지 가져오기에 대한 팁에 감사드립니다. 이제 덤프된 디스크를 사용하고 있으며 원본 디스크는 변경되지 않은 상태로 유지됩니다.

@gabor.zed 이 다른 이름 schobert-fs:0 /schobert-fs:1 /schobert-fs:2가 당신의 가설을 증명합니까? 또는: 그 뒤의 숫자는 단지 마커일 뿐이며, 레이드에서 어떤 드라이브입니까?

lsblk는 이제 다음을 제공합니다.

NAME      MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
loop0       7:0    0   1,8T  1 loop 
├─loop0p1 259:0    0    30G  1 part 
├─loop0p2 259:1    0   1,8T  1 part 
└─loop0p3 259:2    0   4,4G  1 part

fdisk도 이제 합리적으로 보입니다.

Festplatte /dev/loop0: 1,82 TiB, 2000398934016 Bytes, 3907029168 Sektoren
Einheiten: Sektoren von 1 * 512 = 512 Bytes
Sektorgröße (logisch/physikalisch): 512 Bytes / 512 Bytes
E/A-Größe (minimal/optimal): 512 Bytes / 512 Bytes
Festplattenbezeichnungstyp: dos
Festplattenbezeichner: 0x87c99aec

Gerät        Boot     Anfang       Ende   Sektoren Größe Kn Typ
/dev/loop0p1 *          2048   62916607   62914560   30G fd Linux RAID-Autoerkennung
/dev/loop0p2        62916608 3897729167 3834812560  1,8T fd Linux RAID-Autoerkennung
/dev/loop0p3      3897729168 3907029167    9300000  4,4G fd Linux RAID-Autoerkennung

이제 /dev/에 3개의 MD 장치가 나열되어 있습니다.

MD125 MD126 MD127

mdadm --query --detail  /dev/md126

/dev/md125:
           Version : 1.2
        Raid Level : raid0
     Total Devices : 1
       Persistence : Superblock is persistent

             State : inactive
   Working Devices : 1

              Name : schobert-fs:2
              UUID : 00bd818b:55eed0df:3ad0c7d3:0c7a3a97
            Events : 92

    Number   Major   Minor   RaidDevice

       -     259        2        -        /dev/loop0p3


mdadm --query --detail /dev/md126

/dev/md126:
           Version : 1.2
        Raid Level : raid0
     Total Devices : 1
       Persistence : Superblock is persistent

             State : inactive
   Working Devices : 1

              Name : schobert-fs:1
              UUID : 1c73d398:e5404786:1cba7820:fb5e4cd5
            Events : 12662

    Number   Major   Minor   RaidDevice

       -     259        1        -        /dev/loop0p2


mdadm --query --detail /dev/md127

/dev/md127:
           Version : 1.2
        Raid Level : raid0
     Total Devices : 1
       Persistence : Superblock is persistent

             State : inactive
   Working Devices : 1

              Name : schobert-fs:0
          UUID : 7e3b9767:71d0e46d:6fe589d3:47671ff3
        Events : 430

Number   Major   Minor   RaidDevice

   -     259        0        -        /dev/loop0p1

md 장치 자체는 마운트할 수 없나요? 이상한 점은 md 장치가 Raid0이라고 했다는 것입니다. 지금 무엇을 해야할지 모르겠습니다.

적어도 내가 시도할 때는:

mount -o ro -t auto /dev/md125 /mnt/raid1

나는 얻다:

mount: /mnt/raid1: Der Superblock von /dev/md125 konnte nicht gelesen werden.

슈퍼블록을 읽을 수 없습니다

접근하기 전에 어떻게든 공격대를 모아야 할 것 같은데요?

편집 2: @frostschutz 요청에 따라 실행했습니다.

file -s /dev/md*

/dev/md125: empty
/dev/md126: empty
/dev/md127: empty

그리고

blkid

/dev/sda1: UUID="ae7d369d-cf6b-4f84-a010-5d8a4c6fac80" BLOCK_SIZE="4096" TYPE="ext4" PARTUUID="248a7be6-01"
/dev/sda5: UUID="e49af320-e5fc-45fa-91b4-528b231f0bbd" TYPE="swap" PARTUUID="248a7be6-05"
/dev/sdb1: PARTUUID="87c99aec-01"
/dev/loop0p1: UUID="7e3b9767-71d0-e46d-6fe5-89d347671ff3" UUID_SUB="34f9240c-3f35-c4a9-b20f-62595a6a295e" LABEL="schobert-fs:0" TYPE="linux_raid_member" PARTUUID="87c99aec-01"
/dev/loop0p2: UUID="1c73d398-e540-4786-1cba-7820fb5e4cd5" UUID_SUB="038f5d97-741a-9a29-c480-3eecd5502d4b" LABEL="schobert-fs:1" TYPE="linux_raid_member" PARTUUID="87c99aec-02"
/dev/loop0p3: UUID="00bd818b-55ee-d0df-3ad0-c7d30c7a3a97" UUID_SUB="1577f59e-d202-2fbc-d0b7-9765f127efbc" LABEL="schobert-fs:2" TYPE="linux_raid_member" PARTUUID="87c99aec-03"

편집 3:

그래서 모든 데이터가 다음 md126에 있다고 생각했기 때문에 다음을 실행했습니다.

mdadm --stop /dev/md126
mdadm: stopped /dev/md126

그런 다음 자동 조립을 시도하고 md126을 다시 조립해 보았는데 /dev/md/ 아래에 raidname과 새 장치가 표시되면서 작동하는 것처럼 보였습니다.

mdadm --assemble --scan
mdadm: /dev/md/schobert-fs:1 has been started with 1 drive (out of 2).

그런 다음 설치를 시도했지만 읽기 전용이기 때문에 설치할 수 없다는 메시지가 계속 나타납니다. 루프 장치가 읽기 전용 모드이기 때문에 이는 의미가 있습니다. 하지만 -o ro 옵션을 사용하여 읽기 전용 모드로 설치하면 실행하면 안 되나요?

mount -o ro /dev/md/schobert-fs\:1 /mnt/raid1
mount: /mnt/raid1: /dev/md126 konnte nicht im Lese-Schreib-Modus eingehängt werden, (Medium) ist schreibgeschützt..

편집 4:

만세, 알았어요!

마운트 매뉴얼에서 마지막 팁을 찾으세요.

-r, --읽기 전용

파일 시스템을 읽기 전용으로 마운트합니다. 동의어는 -o ro입니다.

파일 시스템 유형, 상태 및 커널 동작에 따라 시스템이 여전히 장치에 쓸 수 있습니다. 예를 들어, 파일 시스템이 더러워지면 Ext3 또는 ext4는 해당 로그를 재생합니다. 이러한 쓰기 액세스를 방지하려면 ro,noload 마운트 옵션을 사용하여 ext3 또는 ext4 파일 시스템을 마운트하거나 블록 장치를 읽기 전용 모드로 설정해야 할 수 있습니다. blockdev(8) 명령을 참조하십시오.

[…]

복구 없음/로드 없음

설치할 때 저널을 로드하지 마십시오. 파일 시스템이 완전히 마운트 해제되지 않은 경우 로그 재생을 건너뛰면 파일 시스템에 불일치가 포함되어 많은 문제가 발생할 수 있습니다.

그래서 나는 다음을 실행했습니다.

mount -o ro,noload /dev/md/schobert-fs\:1 /mnt/raid

짜잔, 모든 파일이 거기에 있습니다!

도와주신 @frostschutz와 @gabor.zed에게 큰 감사를 드립니다!

좋은 하루 되세요.

답변1

여기서 가장 큰 문제는 RAID가 아니라 가짜 파티션 테이블입니다. 파티션 테이블은 512바이트 섹터용으로 생성되었지만 드라이브가 4K 기본 섹터로 감지되었습니다. 따라서 모든 파티션 오프셋과 크기가 완전히 잘못되었습니다.

이 문제를 해결하기 위해 losstup을 사용할 수 있습니다:

losetup --find --show --read-only --sector-size 512 --partscan /dev/sdb

그런 다음 루프 장치에 유효한 파티션과 mdadm 메타데이터가 있는지 확인하세요.

mdadm --examine /dev/loop*

그런 다음 거기에서 계속하면 더 이상 질문이 없기를 바랍니다.

드라이브에 결함이 있는 경우 ddrescue먼저 이미지 추출을 고려할 수도 있습니다. 이미지 파일도 기본적으로 일반적으로 512바이트 섹터에서 처리됩니다.

모든 것을 읽기 전용으로 설정하거나 사용기록 중 복사 덮어쓰기.

관련 정보