성능이 저하된 단일 mdadm raid1 드라이브에서 파일을 복구하는 방법은 무엇입니까? "어레이를 시작하기에 충분하지 않습니다."

성능이 저하된 단일 mdadm raid1 드라이브에서 파일을 복구하는 방법은 무엇입니까? "어레이를 시작하기에 충분하지 않습니다."

다운그레이드/재구축된 상태의 raid1 드라이브를 강제로 마운트할 수 있습니까? 페어링과 재구축이라는 위험한 작업을 진행하기 전에 모든 파일을 복원하고 싶습니다. 내가 아는 한, 드라이브의 모양은 양호하고 손상되지 않았습니다. 드라이브 쌍에 부분적으로 오류가 발생했습니다.

드라이브가 재구축 상태가 아닌 경우 어떻게 해야 하는지 정확히 알고 있었습니다. 내가 시도한 것은 다음과 같습니다.

# mdadm --verbose --assemble /dev/md8 /dev/sdb1  --force
mdadm: looking for devices for /dev/md8
mdadm: /dev/sdb1 is identified as a member of /dev/md8, slot 1.
mdadm: no uptodate device for slot 0 of /dev/md8
mdadm: added /dev/sdb1 to /dev/md8 as 1
mdadm: /dev/md8 assembled from 0 drives and  1 rebuilding - not enough to start the array.

# cat /proc/mdstat                       
md8 : inactive sdb1[1](S)
      976759808 blocks super 1.2          
md0 : active raid1 sdc1[0]
      976759672 blocks super 1.2 [2/1] [U_]

# mdadm --stop /dev/md8
mdadm: stopped /dev/md8

# mount /dev/sdb1 /mnt/temp2
mount: unknown filesystem type 'linux_raid_member'

# mount -o ro -t ext3 -b 2048 /dev/sdb1 /mnt/temp1
mount: wrong fs type, bad option, bad superblock on /dev/sdb1.

# foremost -i /dev/sdb -o /tmp/foo    (this results in perfectly good files)

이 특별한 경우에 foremost명령은 파일을 복원하므로 올바른 슈퍼블록 오프셋만 얻을 수 있다면 드라이브에 뭔가가 있어야 합니다.

이 특별한 경우, 배열의 두 부분을 조립하면 커널 패닉(!)이 발생하므로 어쨌든 실제로는 옵션이 아닙니다(보안 문제는 제쳐두고).


업데이트: mdadm의 출력이 추가되었습니다.

# mdadm --examine /dev/sdb1
/dev/sdb1:
          Magic : a92b4efc
        Version : 1.2
    Feature Map : 0x2
     Array UUID : e00a291e:016bbe47:09526c90:3be48df3
           Name : ubuntu:0
  Creation Time : Wed May 11 12:26:39 2011
     Raid Level : raid1
   Raid Devices : 2

 Avail Dev Size : 1953519616 (931.51 GiB 1000.20 GB)
     Array Size : 1953519344 (931.51 GiB 1000.20 GB)
  Used Dev Size : 1953519344 (931.51 GiB 1000.20 GB)
    Data Offset : 2048 sectors
   Super Offset : 8 sectors
Recovery Offset : 0 sectors
          State : clean
    Device UUID : 41346f44:ccacbbf7:0c17c133:eb7b341f

    Update Time : Sat Apr 13 00:02:08 2013
       Checksum : 483a0a44 - correct
         Events : 402833


   Device Role : Active device 1
   Array State : AA ('A' == active, '.' == missing)

답변1

RAID 1이고 데이터 오프셋(예: 2048 섹터, 일반적으로 로 정확한 데이터 오프셋을 찾을 수 있음 mdadm --examine /dev/sdb1)을 알고 있는 경우 다음과 같이 읽기 전용(안전을 위해) 루프 장치를 만들 수 있습니다.

# losetup --find --show --read-only --offset $((2048*512)) /dev/sdb1

/dev/loop7

그런 다음 인쇄된 루프 장치를 확인하고 설치해 보십시오.

# fsck.ext3 -n -v /dev/loop7
# mount -o ro /dev/loop7 /mnt/recovery

-o ro,loop,offset=마운트 옵션을 사용하여 이를 직접 수행하는 것이 가능할 수도 있지만 실제로 읽기 전용인지 확인하기 위해 루프 장치를 수동으로 생성하는 것을 선호합니다.

파일 시스템 자체가 손상된 경우에는 이미지를 만들고 해당 이미지에 대해 dd이와 같은 실험을 실행 해야 합니다. fsck또는 Linux 네트워크 블록 장치를 사용하여 디스크 상단에 쓰기 시 복사 레이어를 배치할 수 있습니다. 그러면 fsck디스크 자체에 아무것도 쓰지 않고도 실제로 해당 레이어에 무엇이든 쓸 수 있습니다( nbd-server -c/ , 그러면 장치가 nbd-client생성됨). /dev/nbdX귀하의 사용을 위해). 아마도 장치 매퍼를 사용하여 동일한 작업을 수행할 수 있지만 저는 한 번도 시도해 본 적이 없습니다.

답변2

다음 명령을 사용하여 어레이의 RAID 장치 수를 1로 설정할 수 있습니다.

mdadm /dev/md8 --grow --raid-devices=1 --force

/proc/mdstat그런 다음 활성화되어 있는지 확인하십시오 md8. 데이터를 복사하기 전에 읽기 전용으로 마운트해야 합니다.

관련 정보