손상된 RAID 시스템에서 디스크를 마운트하는 방법은 무엇입니까?

손상된 RAID 시스템에서 디스크를 마운트하는 방법은 무엇입니까?

나는 Debian Linux를 구출하기 위해 손상된 공격 시스템에서 데이터를 복구해야 하는 끔찍한 상황에 직면했습니다. VMWare GSX 이미지를 다른 시스템에 복사하고 나중에 ESXi로 마이그레이션할 수 있도록 모든 읽기 전용을 /mnt/rescue에 마운트하고 싶습니다. 관련 명령의 출력은 다음과 같습니다.

fdisk -l

Disk /dev/sda: 1500.3 GB, 1500301910016 bytes
255 heads, 63 sectors/track, 182401 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x0005e687

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1               1         523     4200997   fd  Linux raid autodetect
/dev/sda2             524         785     2104515   fd  Linux raid autodetect
/dev/sda3             786      182401  1458830520   fd  Linux raid autodetect

Disk /dev/sdb: 1500.3 GB, 1500301910016 bytes
255 heads, 63 sectors/track, 182401 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00014fc7

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1               1         523     4200997   fd  Linux raid autodetect
/dev/sdb2             524         785     2104515   fd  Linux raid autodetect
/dev/sdb3             786      182401  1458830520   fd  Linux raid autodetect

Disk /dev/md0: 4301 MB, 4301717504 bytes
2 heads, 4 sectors/track, 1050224 cylinders
Units = cylinders of 8 * 512 = 4096 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000

Disk /dev/md0 doesn't contain a valid partition table

Disk /dev/md1: 2154 MB, 2154954752 bytes
2 heads, 4 sectors/track, 526112 cylinders
Units = cylinders of 8 * 512 = 4096 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000

Disk /dev/md1 doesn't contain a valid partition table

다음과 같이 디스크를 마운트하려고 합니다.

mount -o ro /dev/sda1 /mnt/rescue

그런 다음 다음 오류가 발생합니다.

mount: unknown filesystem type 'linux_raid_member'

파일 시스템도 잘 작동하지 않는 것 같아요.

mount -o ro -t ext3 /dev/sda1 /mnt/rescue/
mount: /dev/sda1 already mounted or /mnt/rescue/ busy

그래서 아래와 같이 가상 디바이스를 생성해 보았습니다.

mdadm -A -R /dev/md9 /dev/sda1

그러면 다음 메시지가 생성됩니다.

mdadm: cannot open device /dev/sda1: Device or resource busy
mdadm: /dev/sda1 has no superblock - assembly aborted

이제 길을 잃었는데 디스크를 복구하고 데이터를 복구하는 방법을 모르겠습니다. 다음은 3개 디스크 모두에 대한 mda --examine의 출력입니다(내 생각에는 3x raid1 디스크).

/dev/sda1:

          Magic : a92b4efc
        Version : 0.90.00
           UUID : 6708215c:6bfe075b:776c2c25:004bd7b2 (local to host rescue)
  Creation Time : Mon Aug 31 17:18:11 2009
     Raid Level : raid1
  Used Dev Size : 4200896 (4.01 GiB 4.30 GB)
     Array Size : 4200896 (4.01 GiB 4.30 GB)
   Raid Devices : 3
  Total Devices : 2
Preferred Minor : 0

    Update Time : Sun Jun  2 00:58:05 2013
          State : clean
 Active Devices : 2
Working Devices : 2
 Failed Devices : 0
  Spare Devices : 0
       Checksum : 9070963e - correct
         Events : 19720


      Number   Major   Minor   RaidDevice State
this     1       8        1        1      active sync   /dev/sda1

   0     0       0        0        0      removed
   1     1       8        1        1      active sync   /dev/sda1
   2     2       8       17        2      active sync   /dev/sdb1

/dev/sda2:

          Magic : a92b4efc
        Version : 0.90.00
           UUID : e8f7960f:6bbea0c7:776c2c25:004bd7b2 (local to host rescue)
  Creation Time : Mon Aug 31 17:18:11 2009
     Raid Level : raid1
  Used Dev Size : 2104448 (2.01 GiB 2.15 GB)
     Array Size : 2104448 (2.01 GiB 2.15 GB)
   Raid Devices : 3
  Total Devices : 2
Preferred Minor : 1

    Update Time : Sat Jun  8 07:14:24 2013
          State : clean
 Active Devices : 2
Working Devices : 2
 Failed Devices : 0
  Spare Devices : 0
       Checksum : 120869e1 - correct
         Events : 3534


      Number   Major   Minor   RaidDevice State
this     1       8        2        1      active sync   /dev/sda2

   0     0       0        0        0      removed
   1     1       8        2        1      active sync   /dev/sda2
   2     2       8       18        2      active sync   /dev/sdb2

/dev/sda3:

          Magic : a92b4efc
        Version : 0.90.00
           UUID : 4f2b3b67:c3837044:776c2c25:004bd7b2 (local to host rescue)
  Creation Time : Mon Aug 31 17:18:11 2009
     Raid Level : raid5
  Used Dev Size : 1458830400 (1391.25 GiB 1493.84 GB)
     Array Size : 2917660800 (2782.50 GiB 2987.68 GB)
   Raid Devices : 3
  Total Devices : 2
Preferred Minor : 2

    Update Time : Sat Jun  8 14:47:00 2013
          State : clean
 Active Devices : 1
Working Devices : 1
 Failed Devices : 1
  Spare Devices : 0
       Checksum : 2b2b2dad - correct
         Events : 36343894

         Layout : left-symmetric
     Chunk Size : 64K

      Number   Major   Minor   RaidDevice State
this     1       8        3        1      active sync   /dev/sda3

   0     0       0        0        0      removed
   1     1       8        3        1      active sync   /dev/sda3
   2     2       0        0        2      faulty removed

cat /proc/mdstat
Personalities : [raid1]
md2 : inactive sda3[1](S) sdb3[2](S)
      2917660800 blocks

md1 : active raid1 sda2[1] sdb2[2]
      2104448 blocks [3/2] [_UU]

md0 : active raid1 sda1[1] sdb1[2]
      4200896 blocks [3/2] [_UU]

md2가 손상된 것 같습니다. 이는 내 VMWare 이미지를 습격한 것일 수 있습니다.

RAID 외부에 md2를 마운트하여 md2의 데이터(손상되지 않은 라이브 디스크, 예: /dev/sda3의 데이터)에 액세스하고 싶습니다.

그냥 하는 것이 좋은 생각인가요?

mdadm --manage /dev/md2 --remove /dev/sda3 

(fdisk가 md2를 볼 수 없기 때문에 작동할까요)?

다음을 실행하여 다른 공격대 md0 및 md1을 재조립해야 합니까?

mdadm --assemble /dev/md0 /dev/sda1 /dev/sdb1

?

업데이트 0: md0과 md2를 어셈블할 수 없습니다.

root@rescue ~ # mdadm --assemble /dev/md0 /dev/sda1 /dev/sdb1
mdadm: cannot open device /dev/sda1: Device or resource busy
mdadm: /dev/sda1 has no superblock - assembly aborted
root@rescue ~ # mdadm --assemble /dev/md2 /dev/sda3 /dev/sdb3
mdadm: cannot open device /dev/sda3: Device or resource busy
mdadm: /dev/sda3 has no superblock - assembly aborted

mount -t auto를 사용하여 설치할 수 없습니다.

root@rescue ~ # mount -t auto -o ro /dev/md0 /mnt/rescue/
/dev/md0 looks like swapspace - not mounted
mount: you must specify the filesystem type
root@rescue ~ # mount -t auto -o ro /dev/md2 /mnt/rescue/
mount: you must specify the filesystem type

/dev/md1 마운트가 작동하지만 VMWare 데이터가 없습니다.

root@rescue /mnt/rescue # ll
total 139M
-rw-r--r-- 1 root root 513K May 27  2010 abi-2.6.28-19-server
-rw-r--r-- 1 root root 631K Sep 16  2010 abi-2.6.32-24-server
-rw-r--r-- 1 root root 632K Oct 16  2010 abi-2.6.32-25-server
-rw-r--r-- 1 root root 632K Nov 24  2010 abi-2.6.32-26-server
-rw-r--r-- 1 root root 632K Dec  2  2010 abi-2.6.32-27-server
-rw-r--r-- 1 root root 632K Jan 11  2011 abi-2.6.32-28-server
-rw-r--r-- 1 root root 632K Feb 11  2011 abi-2.6.32-29-server
-rw-r--r-- 1 root root 632K Mar  2  2011 abi-2.6.32-30-server
-rw-r--r-- 1 root root 632K Jul 30  2011 abi-2.6.32-33-server
lrwxrwxrwx 1 root root    1 Aug 31  2009 boot -> .
-rw-r--r-- 1 root root 302K Aug  4  2010 coffee.bmp
-rw-r--r-- 1 root root  89K May 27  2010 config-2.6.28-19-server
...

업데이트 1:

md2와 md0을 중지하고 다시 어셈블해 보았습니다.

mdadm -S /dev/md0

root@rescue ~ # mount -t auto -o ro /dev/md0 /mnt/rescue/
/dev/md0 looks like swapspace - not mounted
mount: you must specify the filesystem type

mdadm -S /dev/md2

root@rescue ~ # mount -t auto -o ro /dev/md2 /mnt/rescue/
mount: you must specify the filesystem type

어떤 아이디어가 있나요?

업데이트 2:

다음 오류 메시지로 인해 하나의 디스크에서 어셈블할 수 없습니다.

root@rescue ~ # mdadm -S /dev/md2
root@rescue ~ # mdadm --assemble /dev/md2 /dev/sda3
mdadm: /dev/md2 assembled from 1 drive - not enough to start the array.

root@rescue ~ # mdadm -S /dev/md2
mdadm: stopped /dev/md2
root@rescue ~ # mdadm --assemble /dev/md2 /dev/sdb3
mdadm: /dev/md2 assembled from 1 drive - not enough to start the array.

새로운 공격도 실패했습니다.

root@rescue ~ # mdadm -S /dev/md9
mdadm: stopped /dev/md9
root@rescue ~ # mdadm --assemble /dev/md9 /dev/sda3
mdadm: /dev/md9 assembled from 1 drive - not enough to start the array.

root@rescue ~ # mdadm -S /dev/md9
mdadm: stopped /dev/md9
root@rescue ~ # mdadm --assemble /dev/md9 /dev/sdb3
mdadm: /dev/md9 assembled from 1 drive - not enough to start the array.

새 md 디스크 생성도 실패했습니다.

root@rescue ~ # cat /proc/mdstat
Personalities : [raid1]
md0 : active raid1 sda1[1] sdb1[2]
      4200896 blocks [3/2] [_UU]

md1 : active raid1 sda2[1] sdb2[2]
      2104448 blocks [3/2] [_UU]

unused devices: <none>
root@rescue ~ # mdadm -A -R /dev/md9 /dev/sda3
mdadm: failed to RUN_ARRAY /dev/md9: Input/output error
mdadm: Not enough devices to start the array.
root@rescue ~ # cat /proc/mdstat
Personalities : [raid1] [raid6] [raid5] [raid4]
md9 : inactive sda3[1]
      1458830400 blocks

md0 : active raid1 sda1[1] sdb1[2]
      4200896 blocks [3/2] [_UU]

md1 : active raid1 sda2[1] sdb2[2]
      2104448 blocks [3/2] [_UU]

unused devices: <none>
root@rescue ~ # mdadm -S /dev/md9
mdadm: stopped /dev/md9
root@rescue ~ # mdadm -A -R /dev/md9 /dev/sdb3
mdadm: failed to RUN_ARRAY /dev/md9: Input/output error
mdadm: Not enough devices to start the array.

업데이트 3:

md2에서 디스크를 제거해도 아무런 효과가 없습니다.

mdadm --remove /dev/md2 /dev/sda3
mdadm: cannot get array info for /dev/md2

업데이트 4:

드디어 실행중인 assemble이 --force성공할 것으로 예상됩니다. 이제 파일을 다른 서버로 복사하고 있습니다.

답변1

제 경우에는 CentOS 7을 부팅하고 이 페이지에 있는 모든 사람의 지침을 따르려고 했습니다. 기기 사용 중 메시지가 계속 표시됩니다. 내 생각에 당신이 얻는 이유는

mdadm: 장치를 열 수 없습니다. /dev/sda1: 장치 또는 리소스가 사용 중입니다.

오류 메시지는 장치가 이미 다른 장치로 설치되었기 때문에 발생합니다.

또한 내 사용 사례는 RAID1 배열에서 매우 큰 파일을 추출하는 것이므로 디스크를 전혀 변경하고 싶지 않습니다. 그렇지 않으면 가능한 모든 방법으로 추출할 수 없습니다. 가장 빠른 방법은 다음 중 하나를 가져오는 것입니다. 드라이브를 다시 넣고 싶은데 여전히 내 구성이 남아 있습니다.

다른 사이트에서 온라인 조사를 수행한 후 수행한 작업은 다음과 같습니다. 노트: NAS:0은 내 NAS 장치 이름이므로 적절하게 교체하세요.

자동으로 설치되지만 설치되지 않은 것으로 표시되지만, mount 명령을 실행하면 다음을 실행하여 설치되었는지 확인할 수 있습니다.

[root@localhost Desktop]# cat /proc/mdstat 
Personalities : [raid1] 
md127 : active (auto-read-only) raid1 sdb2[0]
      1952996792 blocks super 1.2 [2/1] [U_]

unused devices: <none>

내 아래에 자동으로 설치되었습니다 /dev/md127.

괜찮은:

[root@localhost Desktop]# mdadm -A -R /dev/md9 /dev/sdb2 
mdadm: /dev/sdb2 is busy - skipping

[root@localhost Desktop]# mdadm --manage --stop /dev/md/NAS\:0 
mdadm: stopped /dev/md/NAS:0

[root@localhost Desktop]# mdadm -A -R /dev/md9 /dev/sdb2
mdadm: /dev/md9 has been started with 1 drive (out of 2).

[root@localhost Desktop]# mount /dev/md9 /mnt/

그것이 나에게 보이는 것입니다.

의심스러운 경우 드라이브를 DD하여 전체 복사본을 만들고 CentOS 또는 기타 Linux Live CD를 사용하십시오.

답변2

만일의 경우를 대비해 가능하다면 dd작업을 수행하기 전에 전체 디스크의 이미지를 만들어야 합니다.

mdadm/dev/sda3을 해제한 후 직접 마운트 할 수 있습니다 .

mdadm --stop /dev/md2

마운트 /dev/sda3 /mnt/rescue

그래도 작동하지 않으면 testdisk파일 시스템은 일반적으로 원시 블록 장치에서 찾을 수 있습니다.

답변3

저는 "어려운 방법"으로 해냈습니다. (어떤 작업을 수행하기 전에 가능하다면 먼저 이 디스크를 복제하십시오!)

dmesgRAID 디스크의 경우 시도해 보십시오(예: sdc1:)

$ fdisk -l

RAID-DISK-Flag를 Linux 파일 시스템(ext3 또는 기타)으로 변경하고 저장한 후 재부팅하세요.

이후

$ mdadm --zero-superblock /dev/sdx 

짜잔, 설치할 수 있어요

$ mount /dev/sdc1 /mnt

관련 정보