다른 컴퓨터에서 mdadm raid 1의 일부인 디스크에 데이터를 마운트 / 복구하는 방법은 무엇입니까?


17

일부 배경

  • 디스크 자체는 친구에 의해 "작업"되었으며 여전히 손상되지 않았으며 여전히 마운트 가능 / 복구 가능하다고합니다.
  • 디스크는 Ubuntu 12.04의 소프트웨어 공격대 1의 일부였습니다
  • 원래 RAID 1의 다른 디스크는 현재 디스크 (문제의 디스크)가 더 이상 존재하지 않는 RAID의 기술적 인 부분으로 남겨두고 다른 목적으로 포맷 및 사용되었습니다.

내가 이미 시도한 것

  • 기본 장착

    • fstab에 항목을 추가하고 디스크를 ext3 / ext4로 표시하고 마운트를 시도했습니다.
    • 장착하면 다음 오류가 나타납니다

      wrong fs type, bad option, bad superblock on

    • 그리고 dmesg에서

      EXT4-fs (sdc1): VFS: Can't find ext4 filesystem

  • 디스크의 파일 시스템 유형을 찾으려고 노력했습니다.

    $sudo file -s /dev/sdc
    /dev/sdc: x86 boot sector; partition 1: ID=0x83, starthead 254, startsector 63, 1953520002 sectors, code offset 0xb8

도움이 필요한 곳 ​​/ 내 질문

  • 데이터를 손상시키지 않고 디스크를 ext4로 변환하는 방법이 있습니까?
  • Linux 83 파일 유형 디스크를 마운트하고 데이터를 복구하는 간단한 방법이 있습니까?
  • 어쨌든 공격대를 재건 할 가능성이있는 경우를 대비하여 현재 사용 가능한 다른 디스크가 있습니다.
  • 나의 주요 목표는 디스크에서 데이터를 복구하는 것입니다. 모든 옵션에 개방되어 있습니다.

최신 정보

일부 명령의 출력

  • fdisk -l / dev / sdc

    $fdisk -l /dev/sdc

    Disk /dev/sdc: 1000.2 GB, 1000204886016 bytes
    255 heads, 63 sectors/track, 121601 cylinders, total 1953525168 sectors
    Units = sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 512 bytes
    I/O size (minimum/optimal): 512 bytes / 512 bytes
    Disk identifier: 0x0005ed9c

    Device Boot Start End Blocks Id System
    /dev/sdc1 63 1953520064 976760001 83 Linux

  • 파일 -s / dev / sdc1

    $file -s /dev/sdc1
    /dev/sdc1: data

  • hexdump -C -n 32256 / dev / sdc (도움이 될 수 있는지 확실하지 않음)

    $hexdump -C -n 32256 /dev/sdc`
    00000000  fa b8 00 10 8e d0 bc 00  b0 b8 00 00 8e d8 8e c0  |................|
    00000010  fb be 00 7c bf 00 06 b9  00 02 f3 a4 ea 21 06 00  |...|.........!..|
    00000020  00 be be 07 38 04 75 0b  83 c6 10 81 fe fe 07 75  |....8.u........u|
    00000030  f3 eb 16 b4 02 b0 01 bb  00 7c b2 80 8a 74 01 8b  |.........|...t..|
    00000040  4c 02 cd 13 ea 00 7c 00  00 eb fe 00 00 00 00 00  |L.....|.........|
    00000050  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
    *
    000001b0  00 00 00 00 00 00 00 00  9c ed 05 00 00 00 00 fe  |................|
    000001c0  ff ff 83 fe ff ff 3f 00  00 00 82 59 70 74 00 00  |......?....Ypt..|
    000001d0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
    *
    000001f0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 55 aa  |..............U.|
    00000200  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
    *
    00007e00
    

문제는 파티션이 ext4fs가 아닌 RAID 볼륨이 있다고 생각한다는 것입니다. 그리고 커널이 맞습니다. 그러나 습격 1이므로 ext4fs가됩니다. mount -f ext4 /dev/sdc1 /mountpoint트릭을 할해야합니다. 마운트가 파일 시스템 을 찾는 대신 ext4를 사용하도록 강제 하는 것은 -f하는 것입니다
Bananguin

1
강제 마운트는 오류를 발생시키지 않지만 마운트 포인트는 비어 있습니다. 데이터가 사라지거나 마운트가 예상대로 작동하지 않았습니다. a를 수행하면 df새로 마운트 된 디스크의 사용률이 2 %로 예상보다 훨씬 낮습니다.
Adam

@ user1129682, mount가 ext4가 아니라고 말하면 강제로 시도하지 않아도 도움이되지 않습니다.
psusi

@psusi : 나를 위해 일했습니다. Gilles 답변은 왜 어떤 상황에서 작동하는지 설명합니다
Bananguin

@Bananguin 당신은 mount -t ext4아닌가요? -f 플래그는 '가짜'마운팅을위한 것입니다 (우분투 14.04).
Quantum7

답변:


11

이것은 우분투 14.04에서 훌륭하게 작동합니다.

sudo -i
mdadm --assemble --scan

당신은 얻을 것이다 :

mdadm: /dev/md/1 has been started with 1 drive (out of 2)

그런 다음 파일을 마운트하고 확인하십시오.

cd /mnt && mkdir to-restore-md1 && mount /dev/md1 to-restore-md1
ls -la to-restore-md1

어레이의 일부인 고장난 하드 드라이브에서 "존재하지만 md 어레이가 아닙니다"라는 메시지가 표시되었습니다. 이것은 다른 모든 제안보다 더 효과적이었습니다. 성공적으로 마운트되었으며 지금 데이터 복사 중입니다.
Zayne S Halsall

이 옵션은 저에게 효과적이었습니다. RAID1에 2 개의 인텔 SSD가 있습니다. Suse Linux를 실행하는 PC에 하나의 SATA 포트를 당겨서 슬레이브 포트에서 분리했습니다. 처음에는으로 만 표시 /dev/sdc됩니다 /dev/md127. 이어서 않았다 mdadm --assemble --scan로 이어지는 /dev/md/Volume0_0p1하고 /dev/md/Volume0_0p2그래서 디스크와 파티션 4에 대응. P2는 내가 필요로했던 것입니다 : mkdir /p2 그다음에 mount /dev/md/Volume0_0p2 /p2EXT3 인 마운트 가 되어 데이터에 쉽게 액세스하고 복사 할 수 있습니다. 또한 읽기 / 쓰기로 마운트했습니다.
ron

당신은 내 하루를 만들었습니다! 감사!
Gooshan

때로는 --scan모드가 디스크가없는 어레이를 시작하지 않습니다. 제 경우에는 자동 조립 된 어레이를 중지하고 다시 시작해야했습니다.mdadm --assemble --force /dev/md/1 /dev/sdc1
BrunoJCM

7

Linux mdraid에는 몇 가지 메타 데이터 형식이 있습니다 . 형식 0.9와 1.0은 메타 데이터를 포함하는 장치의 끝에 놓고, 페이로드 (파일 시스템)는 장치의 시작 부분에서 시작하며 RAID 계층을 거치지 않고 직접 액세스 할 수 있습니다. 형식 1.1과 1.2는 메타 데이터를 포함 장치의 중간과 시작 부분에 각각 배치하므로 페이로드는 오프셋입니다.

Ubuntu 설치 프로그램은 1.2 메타 데이터 형식으로 볼륨을 생성하므로 장치 시작 부분이 아닌 메타 데이터 뒤에서 데이터가 시작됩니다.

해당 데이터에 액세스하는 가장 간단한 방법은 RAID 장치를 조립하는 것입니다. RAID-1 볼륨에서는 단일 장치로 충분합니다.

madadm -A /dev/sdc1

(당신이 고통을 좋아하지 않는 한 여기에서 멈추십시오.)

오프셋에서 데이터에 액세스 할 수도 있습니다. 내가 할 수있는 유일한 포인트는 1.x mdraid 형식을 지원하지 않는 아주 오래된 커널에서 작업해야한다는 것입니다. 먼저 오프셋을 결정하십시오 . mdadm -E /dev/sdc1선을 찾으십시오 Data Offset : SSS sectors. mdadm 섹터는 512 바이트입니다.

sectors=$(mdadm -E /dev/sdc1 | awk -F: '$1 ~ /Data offset/ {print $2}')
bytes=$(($sectors * 512))
losetup -f -o $bytes /dev/sdc1

필사적으로 1.x 형식의 데이터 오프셋은 little-endian¹ 메타 데이터의 128-135 바이트로 저장됩니다. 1.2 메타 데이터는 장치 시작 후 4096 바이트입니다.

파티션 테이블을 변경하여 추가로 시작할 수도 있습니다. 산술에 매우주의하십시오. RAID 시스템에 액세스 할 수없는 오래된 시스템에서 장기간 디스크를 계속 사용하려는 경우에만 수행하십시오.

¹ 아니면 플랫폼 엔디안? 잘 모르겠습니다.


mdadm -E /dev/sdc14k는 정확하게 메타 데이터가 저장되는 위치이기 때문에 데이터 는 다른 오프셋에서 시작될 수 있지만 (정확한 위치 참조 ) 1.2 메타 데이터의 경우 4k가 아닙니다. 참조 : unix.stackexchange.com/q/57477/22565
Stéphane Chazelas

@StephaneChazelas 죄송합니다. 뇌 방귀입니다. 감사.
Gilles 'SO- 악 그만해'

3
mdadm -A /dev/sdc1출력 mdadm: device /dev/sdc1 exists but is not an md array.mdadm을 사용하고 추가 정보가 있는지 확인하기 위해 조금 더갔습니다 ... mdadm --misc --examine /dev/sdc1출력 mdadm: No md superblock detected on /dev/sdc1.. 이 디스크의 수퍼 블록을 다시 작성하여 RAID 어셈블리에 사용 가능한 디스크로 표시 할 수있는 방법이 있습니까?
Adam

@Gilles A mdadm -E /dev/sdc는 나를 위해 다음을 반환합니다. /dev/sdc: MBR Magic : aa55 Partition[0] : 1953520002 sectors at 63 (type 83) 그러나 / dev / sdc1에 대한 정보는 없습니다
Adam

1
@Adam mdadm이 메타 데이터를 찾을 수 없으면 수행 할 수있는 작업이 없습니다. 수행 할 작업을 모르기 때문에 강제로 무언가를 수행 할 수 없습니다. 파일 시스템을 찾아야하고, psusi의 조언이 어디에서도 이어지지 않는다면 전망은 어둡습니다. 디스크의 처음 몇 킬로바이트의 16 진 덤프가 누군가에게 영감을 줄 수 있습니다 (일부 기밀 데이터가 노출 될 수 있음).
Gilles 'SO- 악마 그만해'

5

놀랍게도, 나는 가장 먼저 를 사용하여 데이터를 복구 할 수있었습니다 .

여기서받은 도움은 매우 귀중했습니다. 나만의 믹스 인뿐만 아니라 다양한 제안 된 조합을 시도한 후 이상적인 방법 (디스크를 정상적으로 장착하고 사용하는)은 더 이상 옵션처럼 보이지 않았습니다. 이 경우 데이터 복구에 의지하는 것이 나의 해결책입니다.


나는 이것이 얼마 전인 것을 알고있다! 그러나 파티션을 마운트하지 않고 가장 많이 사용할 수 있었는지 기억하십니까?
PhillipOReilly

죄송합니다. 더 이상 이것에 대한 세부 사항이 기억 나지 않습니다. : /
Adam

3

이미 mdadm 수퍼 블록을 압축 한 것으로 보입니다. 그것이 존재하고 포맷 1.1 또는 1.2라면, 파일 시스템은 오프셋 2048 섹터에있을 가능성이 높습니다. e2fsck /dev/sdc1?offset=2048해당 오프셋에서 시작하는 파일 시스템을 찾도록 강제 실행할 수 있습니다 . 찾은 경우 파일 시스템이 실제로 시작되는 위치를 가리 키도록 파티션 테이블을 수정할 수 있습니다. parted /dev/sdcunit s명령을 사용하여 섹터 단위를 사용할 수 있습니다 . print테이블에서 시작 및 끝 섹터 rm를 확인한 다음 파티션을 기록한 다음 mkpart동일한 끝 섹터를 사용하여 다시 작성 하고 사용하지만 시작 섹터에 오프셋을 추가하십시오.

2048이 작동하지 않으면 1985을 시도 할 수도 있습니다.


실행 e2fsck /dev/sdc1?offset=2048(나는 또한 = 1985 오프셋 RAN) 출력 Bad magic number..Superblock invalid...수퍼가 손상되었음을 제안 및 대안 수퍼 e2fsck를 실행하려고 할뿐만 아니라. 앞으로 나아갈 수있는 대체 수퍼 블록을 제공 해야하는 것 같습니다.
Adam

@Adam, 아니요, 올바른 오프셋을 가져와야합니다. testdisk자세한 스캔을 수행하고 파티션 테이블을 수정할 수 있어야합니다.
psusi

testdisk나를 위해 완전히 새로운 영역입니다. 기본 실행 (분석) 쇼 No ext2, JFS, Reiser.. marker. Bad relative sector. No partition is bootable.또한 다음 1 P Linux 0 1 1 121600 254 63 1953520002을 제공합니다. 상황을 돕기 위해이를 이해하려면 어떻게해야합니까?
Adam

@Adam, 나는 그것을 직접 사용한 적이 없으며 단지 수퍼 블록을 스캔하고 찾을 수 있어야한다는 것을 알고 있습니다. 파티션이 아닌 전체 디스크에서 실행 했습니까?
psusi

전체 디스크에서 분석을 실행 한 후 파티션이 켜지지 않았습니다. 현재 정밀 검사를 실행 중 입니다. 이것으로 아무것도 나타나지 않으면 여기서 어디로 가야할지 모르겠습니다.
Adam
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.