![지금 무엇을 해야 하나](https://linux55.com/image/51524/%EC%A7%80%EA%B8%88%20%EB%AC%B4%EC%97%87%EC%9D%84%20%ED%95%B4%EC%95%BC%20%ED%95%98%EB%82%98.png)
일부 배경
내 친구는 사무실에서 각각 2개의 1TB 디스크가 있는 NAS Buffalo-LS-WVL을 사용하고 있습니다. 이 두 디스크는 raid 1로 마운트된 것처럼 보이지만 읽게 되겠지만 그렇지 않을 수도 있습니다. NAS에 매우 느린 문제가 발생하다가 갑자기 작동이 중단되었습니다. 나는 그의 데이터를 구출하라는 부름을 받았습니다. 두 디스크 모두 정확히 동일한 파티션을 갖고 있습니다. 1개의 물리적 파티션과 6개의 논리적 파티션이 있으며 데이터는 6번째 파티션에 있습니다(0.95TB 중 약 80GB).
디스크에 /dev/sdd
하드웨어 문제(느림, 섹터 읽기 오류 등)가 발생한 것으로 보이지만 /dev/sde는 물리적으로 양호한 디스크입니다.
목표는 NAS에 포함된 데이터를 추출하는 것입니다. 전부는 아니더라도 추출할 수 있는 데이터가 많을수록 좋습니다. 이 데이터는 내 친구의 회사에 매우 중요합니다.
난 이미 시도했어
첫 번째 시도: 디스크를 별도로 설치
이것은 첫 번째 시도였으며 제대로 작동하기를 바라면서 각 디스크를 가져와 개별적으로 마운트하려고 시도한 후 다음 메시지를 받았습니다.
root@ubuntu:~# mount /dev/sdd6 /mnt/n -or- root@ubuntu:~# mount /dev/sde6 /mnt/n
둘 다 나에게 같은 메시지를 준다:
mount: unknown filesystem type 'linux_raid_member'
두 번째 시도: 디스크 어레이 RAID 1을 생성하고 마운트해 봅니다.
글쎄요, 개별적으로 설치할 수 없다면 디스크 어레이를 만들어야 합니다. (가장 논리적인) 원래 구성이 raid 1이고 한 번에 하나의 디스크를 사용한다고 가정해 보겠습니다.
root@ubuntu:~# mdadm --create --run --level=1 --raid-devices=2 \ /dev/md/md-singolo-e6--create-missing /dev/sde6 missing
다음을 제공합니다:
mdadm: /dev/sde6 appears to be part of a raid array: level=raid0 devices=2 ctime=Mon Sep 26 10:23:48 2011 mdadm: Note: this array has metadata at the start and may not be suitable as a boot device. If you plan to store '/boot' on this device please ensure that your boot-loader understands md/v1.x metadata, or use --metadata=0.90 mdadm: Defaulting to version 1.2 metadata mdadm: array /dev/md/md-singolo-e6--create-missing started.
그래서 초기 레이드에서는 모드 1이 아닌 모드 0으로 진행되는 것으로 보입니다. 디스크에 섹터 문제가 있어서 새 것이 좋지 않습니다.
어쨌든, 새로 생성된 RAID1 어레이를 마운트하려고 합니다(말이 안 된다는 걸 알면서도).
root@ubuntu:~# mkdir /mnt/md-singolo-e6--create-missing root@ubuntu:~# mount /dev/md/md-singolo-e6--create-missing \ /mnt/md-singolo-a6--create-missing/
주어진:
mount: /dev/md127: can't read superblock
다른 디스크도 정확히 동일한 결과를 나타냈습니다.
세 번째 시도: 디스크 어레이 생성디스크 어레이 0그리고 설치해 보세요
좋아요, 이제 Raid0이라고 말했으니 시작해 보겠습니다.
root@ubuntu:~# mdadm --create --run --level=0 --raid-devices=2 \ /dev/md/md001hw /dev/sdd6 /dev/sde6
다음을 제공합니다:
mdadm: /dev/sdd6 appears to be part of a raid array: level=raid1 devices=2 ctime=Mon Oct 14 16:38:33 2013 mdadm: /dev/sde6 appears to be part of a raid array: level=raid1 devices=2 ctime=Mon Oct 14 17:01:01 2013 mdadm: Defaulting to version 1.2 metadata mdadm: array /dev/md/md001hw started.
좋아, 만든 후에 설치해 보겠습니다.
root@ubuntu:~# mount /dev/md/md001hw /mnt/n mount: you must specify the filesystem type
이때 지정된 ext2, 3, 4에는 모두
-t
오류가 있습니다.네 번째 시도: 디스크 이미지 생성 및 사용
자, 디스크에 문제가 있기 때문에 블록 읽기 오류(오류)가 있을 경우를 대비해 데이터 파티션(dd)의 복사본을 만들고 0(동기화)으로 채우는 것이 좋습니다. 그래서 저는 두 개의 이미지를 만들었습니다.
이는 양호한 디스크(4MB 블록, 더 빠름)에서 작동합니다.
root@ubuntu:~# dd bs=4M if=/dev/sde6 of=/media/pietro/4TBexthdd/sde6-bs4M-noerror-sync.img conv=noerror,sync
이는 문제의 디스크에서 작동합니다(최소 블록 크기, 더 안전함).
root@ubuntu:~# dd if=/dev/sde6 of=/media/pietro/4TBexthdd/sdd6-noerror-sync.img conv=noerror,sync
두 이미지를 모두 얻은 후 위에 지정된 명령을 사용하여 RAID 0으로 사용하려고 했습니다. 할 일이 없습니다. 제가 얻은 대답은 이미지가 "블록 장치가 아니며" 배열을 생성하지 않는다는 것입니다.
다섯 번째 시도: 일부 데이터를 바이트 단위로 저장
자, 제대로 설치가 되지 않으면 머리글, 바닥글 정보와 함께 바이트 단위로 읽어서 데이터를 추출해 보겠습니다. 나는 사용했다*가장 중요한 것은*각 디스크에서 이 작업을 실행합니다. 디스크 1의 경우:
root@ubuntu:~# foremost -i /dev/sde6 -o /media/pietro/4TBexthdd/foremost_da_sde6/
파일 확장자는 있지만 내용은 전혀 없는 하위 폴더를 생성합니다. 디스크 2(손상된 디스크)의 경우:
root@ubuntu:~# foremost -i /dev/sdd6 -o /media/pietro/4TBexthdd/foremost_da_sdd6_disco2/
하위 폴더 구조는 대부분 생성되지 않습니다.
RAID 0 어레이에서 시도하면 결과는 동일합니다.
root@ubuntu:~# foremost -i /dev/md/md001hw -o /media/pietro/4TBexthdd/foremost_da_raid_hw/
하위 폴더 구조도 생성되지 않습니다.
도움이 필요해요/질문이 있어요
- 첫 번째이자 가장 중요한 질문은 다음과 같습니다.데이터를 저장하는 방법?내가 시도하지 않은 팁이 있는 사람이 있나요?
- 내가 하고 있는 일과 다른 것을 제안할 수 있는 사람이 있나요?
다른 문제:
- 저는 이 일이 처음입니다
mdadm
. 제가 모든 일을 제대로 하고 있나요? - 2011년 9월 26일에 생성된 원래 어레이가 실제로 Raid 0 모드에서 생성되었습니까?
- 파티션 이미지를 사용하여 어레이를 생성할 수 없는 이유는 무엇입니까?
부록
dmesg
실패한 디스크()에서 읽을 때의 출력은 다음과 같습니다 /dev/sdd
.
[ 958.802966] sd 8:0:0:0: [sdd] Unhandled sense code
[ 958.802976] sd 8:0:0:0: [sdd]
[ 958.802980] Result: hostbyte=DID_OK driverbyte=DRIVER_SENSE
[ 958.802984] sd 8:0:0:0: [sdd]
[ 958.802987] Sense Key : Medium Error [current]
[ 958.802994] sd 8:0:0:0: [sdd]
[ 958.802999] Add. Sense: Unrecovered read error
[ 958.803003] sd 8:0:0:0: [sdd] CDB:
[ 958.803006] Read(10): 28 00 00 d5 c7 e0 00 00 f0 00
[ 958.803021] end_request: critical target error, dev sdd, sector 14010336
[ 958.803028] quiet_error: 36 callbacks suppressed
[ 958.803032] Buffer I/O error on device sdd, logical block 1751292
[ 958.803043] Buffer I/O error on device sdd, logical block 1751293
[ 958.803048] Buffer I/O error on device sdd, logical block 1751294
[ 958.803052] Buffer I/O error on device sdd, logical block 1751295
[ 958.803057] Buffer I/O error on device sdd, logical block 1751296
[ 958.803061] Buffer I/O error on device sdd, logical block 1751297
[ 958.803065] Buffer I/O error on device sdd, logical block 1751298
[ 958.803069] Buffer I/O error on device sdd, logical block 1751299
[ 958.803074] Buffer I/O error on device sdd, logical block 1751300
[ 958.803078] Buffer I/O error on device sdd, logical block 1751301
[ 961.621228] sd 8:0:0:0: [sdd] Unhandled sense code
[ 961.621236] sd 8:0:0:0: [sdd]
[ 961.621238] Result: hostbyte=DID_OK driverbyte=DRIVER_SENSE
[ 961.621241] sd 8:0:0:0: [sdd]
[ 961.621243] Sense Key : Medium Error [current]
[ 961.621248] sd 8:0:0:0: [sdd]
[ 961.621251] Add. Sense: Unrecovered read error
[ 961.621254] sd 8:0:0:0: [sdd] CDB:
[ 961.621255] Read(10): 28 00 00 d5 c8 d0 00 00 10 00
[ 961.621266] end_request: critical target error, dev sdd, sector 14010576
[ 964.791077] sd 8:0:0:0: [sdd] Unhandled sense code
[ 964.791084] sd 8:0:0:0: [sdd]
[ 964.791087] Result: hostbyte=DID_OK driverbyte=DRIVER_SENSE
[ 964.791090] sd 8:0:0:0: [sdd]
[ 964.791092] Sense Key : Medium Error [current]
[ 964.791096] sd 8:0:0:0: [sdd]
[ 964.791099] Add. Sense: Unrecovered read error
[ 964.791102] sd 8:0:0:0: [sdd] CDB:
[ 964.791104] Read(10): 28 00 00 d5 c8 00 00 00 08 00
[ 964.791114] end_request: critical target error, dev sdd, sector 14010368
[ 964.791119] quiet_error: 22 callbacks suppressed
[ 964.791122] Buffer I/O error on device sdd, logical block 1751296
답변1
나쁜 소식을 전하는 사람이 되는 건 싫지만...
Q: 저는 mdadm을 처음 사용합니다. 모든 일이 제대로 진행되고 있나요?
대답: 아니요. 사실, 당신은 가능한 가장 파괴적인 방법으로 거의 모든 일을 했습니다. 데이터를 읽을 수 있는 --create
배열 메타데이터를 사용하는 대신 --assemble
(적어도 디스크가 데이터를 읽을 수 있는 정도까지) 배열 메타데이터를 삭제하는 데 익숙합니다 . 이렇게 하면 중요한 메타데이터(특히 디스크 순서, 데이터 오프셋 및 블록 크기)가 손실됩니다.
또한 --create
배열 메타데이터가 중요한 파일 시스템 구조 위에 스크롤되었을 수 있습니다.
마지막으로 (3) 단계에서 mdadm이 두 디스크의 RAID1에 대해 불평하는 것을 확인했습니다. 두 디스크 모두에서 (2)를 개별적으로 시도했기 때문에 이것이 발생하기를 바랍니다. RAID1이 디스크 동기화를 시작하지 않기를 진심으로 바랍니다(예를 들어 두 디스크를 동일한 RAID1 어레이에 추가하는 경우).
지금 무엇을 해야 하나
드디어 드라이브 이미지를 만든 것 같습니다. 너는 이것을 해야 해첫 번째, 적어도 기본 이상의 것을 시도하기 전에 --assemble
. 하지만 어쨌든,
불량 드라이브의 이미지에 대부분/모든 섹터가 누락된 경우 전문적인 데이터 복구가 필요한지 확인하십시오. 파일(및 파일 시스템 메타데이터)은 RAID0의 드라이브에 분할되어 있으므로 동시에 두 드라이브를 모두 복원해야 합니다. 전문적인 복구를 통해 드라이브를 읽을 수도 있습니다.
일부 섹터를 제외하고 영상이 대부분 정상이라면 계속 진행하세요.
이미지 파일의 복사본을 만드세요. 이미지 파일의 복사본만 처리됩니다.이러한 복사본을 여러 번 파기할 수 있으므로 처음부터 다시 시작할 수 있어야 한다는 점은 아무리 강조해도 지나치지 않습니다. 특히 디스크 중 하나에 오류가 발생했기 때문에 디스크를 다시 이미지화하고 싶지 않을 것입니다!
다른 질문 중 하나에 답변하려면:
Q: 파티션 미러링을 사용하여 어레이를 생성할 수 없는 이유는 무엇입니까?
답변: 이미지 파일 배열을 조합(또는 생성)하려면 루프백 장치를 사용해야 합니다. 를 사용하여 루프백 장치에 이미지를 연결할 수 있습니다 losetup
. 맨페이지를 읽으십시오. 그러나 이는 와 유사합니다 losetup --show -f /path/to/COPY-of-image
. 이제 mdadm
루프 장치(예 /dev/loop0
: )에서 사용할 수 있습니다.
원래 배열 레이아웃 결정
원래 배열을 생성하는 데 사용된 모든 mdadm 옵션을 찾아야 합니다(이전에 해당 메타데이터를 삭제했으므로 --create
). 그런 다음 --create
이 옵션을 사용하여 두 루프백 장치 모두에서 실행할 수 있습니다 . 메타데이터 버전( -e
), RAID 수준( -l
, 0인 것으로 나타남), 블록 크기( -c
), 장치 수( -n
, 2여야 함) 및 장치의 정확한 순서를 파악해야 합니다 .
가장 쉬운 방법은 두 개의 새 디스크를 가져와서 NAS에 넣고 NAS가 그 위에 새 어레이를 생성하도록 하는 것입니다. 원래 사용했던 것과 동일한 NAS 펌웨어 버전을 사용하는 것이 가장 좋습니다. IOW, 초기 설정을 반복하세요. 그런 다음 디스크를 꺼내 mdadm -E
멤버 중 하나에 사용하십시오. 이것은 약간 다른 RAID10 어레이의 예입니다. 필요한 내용을 강조하기 위해 일부 줄을 생략했습니다.
Version : 1.0 # -e
Raid Level : raid10 # -l
Raid Devices : 4 # -n
Chunk Size : 512K # -c
Device Role : Active device 0 # gets you the device order
Array State : AAAA ('A' == active, '.' == missing)
참고: 여기서는 ext2/3/4를 사용하고 있다고 가정합니다. 그렇지 않은 경우 NAS가 실제로 사용하는 파일 시스템에 적합한 유틸리티를 사용하십시오.
(루프백 장치에서) 다음 옵션을 사용하여 생성해 보십시오. e2fsck -n
아직도 그를 알아보는지 확인해 보세요 . 그렇지 않은 경우 어레이를 중지하고 다른 순서로 장치를 사용하여 다시 생성하십시오. 다시 시도하십시오 e2fsck -n
.
둘 다 작동하지 않으면 올바른 순서라고 생각되는 순서로 돌아가서 슈퍼블록을 백업해야 합니다. 맨페이지에서는 e2fsck
사용할 숫자가 거의 확실하게 4K 블록 크기인지 알려줍니다. 백업 슈퍼블록 중 어느 것도 작동하지 않으면 어레이를 중지하고 다른 디스크 시퀀스를 시도하십시오. 그래도 문제가 해결되지 않으면 잘못된 선택을 했을 수 있습니다 --create
. 이미지의 새 복사본으로 시작하여 몇 가지 다른 옵션을 시도해 보세요. 먼저 다른 메타데이터 버전을 사용해 보겠습니다.
e2fsck를 실행한 후 파일 시스템 손상의 심각도를 확인합니다. 완전히 삭제된 경우 청크 크기가 잘못되었음을 의미할 수 있습니다(더 많은 시도를 위해 배열을 중지하고 다시 생성).
데이터를 복사합니다.
e2fsck가 파일 시스템을 복구하도록 하는 것이 좋습니다. 이로 인해 파일 시스템이 손상될 위험이 있지만 이것이 바로 복사본을 처리하는 이유입니다! 그런 다음 설치하고 데이터를 복사할 수 있습니다. 일부 데이터가 손상될 수 있으며 손상이 숨겨질 수 있다는 점에 유의하십시오(예: 문서의 페이지가 NULL로 대체되었을 수 있음).
NAS에서 원래 매개변수를 가져올 수 없습니다.
그렇다면 당신은 곤경에 처한 것입니다. 다른 옵션은 최종적으로 작동할 때까지 추측하거나 16진수 편집기를 사용하여 알아낼 수 있을 만큼 디스크 형식을 이해하는 것입니다. 이 문제를 해결하는 데 도움이 되는 유틸리티가 한두 개 있을 수 있습니다.
또는 데이터 복구 회사를 고용하세요.