dd 전체 디스크 복사가 8GB에서 여전히 실패하는 이유는 무엇입니까?

dd 전체 디스크 복사가 8GB에서 여전히 실패하는 이유는 무엇입니까?

500GB SSD를 1TB SSD로 복제하려고 합니다. 어떤 이유로 복사된 데이터가 8GB에 도달하면 계속 실패합니다. 이것은 제가 시도한 세 번째 1TB SSD인데 모두 같은 위치에 멈췄습니다. 다음 명령을 실행했습니다.

dd if=/dev/sda of=/dev/sdb bs=1024k status=progress

또한 Clonezilla를 사용하여 드라이브 복제를 시도했지만 동일한 위치에서 실패했습니다. GParted를 사용하여 드라이브를 다시 포맷하고 EXT4 파일 시스템으로 설정했지만 여전히 같은 위치에 멈춰 있습니다. Sda는 내부에 있고 sdb는 외부에 연결되어 있습니다.

내가 받은 오류는 다음과 같습니다.

7977443328 bytes (8.0 GB, 7.4 GB) copied, 208s, 38.4 MB/s
dd: error reading '/dev/sda': Input/output error
7607+1 records in
7607+1 records out

아래 답변을 주신 @roaima에게 감사드립니다. 나는 실행할 수 있었고 ddrescue대부분의 데이터를 복사했습니다. 내부 SSD를 제거하고 기존 SSD와 새 SSD를 USB3를 통해 CentOS 상자에 연결했습니다. 다음 명령을 실행했습니다.

ddrescue -v /dev/sdb /dev/sdc tmp --force

15시간 넘게 달렸습니다. 밤새 멈췄습니다. 하지만 좋은 점은 명령을 다시 실행하면 중단된 부분부터 다시 시작된다는 것입니다.

나는 screen이것을 사용하여 두 번째 세션에 갇히지 않도록 합니다 :). Ctrl+c데이터가 몇 시간 동안 멈춰 있었기 때문에 99.99%의 데이터가 복구된 후 ddrescue 명령을 종료한 적이 있습니다 . 새 드라이브에서 부팅할 수 있었고 즉시 시작되었습니다. ddrescue를 종료할 때의 상태는 다음과 같습니다.

Initial status (read from mapfile)
rescued: 243778 MB, tried: 147456 B, bad-sector: 0 B, bad areas: 0

Current status
     ipos:  474344 MB, non-trimmed:    1363 kB,  current rate:       0 B/s
     ipos:  474341 MB, non-trimmed:        0 B,  current rate:       0 B/s
     opos:  474341 MB, non-scraped:   522752 B,  average rate:   8871 kB/s
non-tried:        0 B,  bad-sector:   143360 B,    error rate:       0 B/s
  rescued:  500107 MB,   bad areas:      123,        run time:  8h  1m 31s
pct rescued:   99.99%, read errors:      354,  remaining time:     14h 31m
                              time since last successful read:      6m  7s
Scraping failed blocks... (forwards)^C
  Interrupted by user

이것이 다른 사람들에게 도움이 되기를 바랍니다. 내 오래된 드라이브가 고장나기 시작한 것 같아요. 데이터가 손실되지 않기를 바랍니다. 이제 LUKS 파티션 크기 조정을 시작하세요 :)

답변1

오류는 dd: error reading '/dev/sda': Input/output error문제가 있음을 알려주는 것 입니다.읽다대상에 쓰는 대신 소스 디스크. 대상 디스크를 여러 번 교체할 수 있지만 이렇게 해도 원본 디스크를 읽는 문제는 해결되지 않습니다.

를 사용하는 대신 dd디스크가 완전히 사라지기 전에 디스크에서 데이터를 복구하는 것을 고려하십시오. 또는 같은 도구를 사용하여 rsync파일을 복사 cp하거나 ddrescue.

ddrescue -v /dev/sda /dev/sdb /some/path/not/on/sda_or_sdb

마지막 매개변수는 여기에도 없고 /dev/sda거기에도 없는 비교적 작은 임시 파일(맵 파일)을 가리킵니다 /dev/sdb. 다른 것이 없으면 외부 USB 스틱에 있을 수 있습니다.

ddrescue명령은 소스 디스크에 결함이 있을 수 있음을 인식합니다. 오류가 발생할 때까지 한 번에 상대적으로 큰 덩어리를 읽습니다. 오류가 발생하면 면밀한 검사와 작은 복사 시도를 위해 해당 섹션을 표시합니다. 매핑 파일은 소스 디스크가 잠겨 있고 시스템을 다시 시작해야 하는 경우 다시 시작하고 계속할 수 있도록 하는 데 사용됩니다. 가능한 모든 것을 복사하려고 시도합니다.

디스크를 복사한 후에는 /dev/sdb파티션이 원본 디스크의 크기에만 해당하는 것으로 나타납니다. 그런 다음 fdisk또는 gparted/를 사용하여 parted이 문제를 해결할 수 있습니다.

데이터를 복사하는 중에 오류가 발생하면 먼저 fsck이 시리즈 중 하나를 사용하여 파티션을 확인하고 복구해야 합니다. 예를 들어, e2fsck -f /dev/sdb1.

답변2

원본 미디어에 오류가 있으며 기본적으로 첫 번째 오류가 발생하면 dd가 중지됩니다. 부분적으로 손상된 소스 미디어를 복사하기 위한 표준 솔루션에는 "conv=noerror,sync" 옵션을 제공하는 것이 포함됩니다. 이는 잘못된 비트를 무시하고 이를 null 값으로 바꾸고 계속하도록 지시합니다. 이 경우 사용하는 블록 크기는 파일 시스템의 블록 크기와 일치해야 합니다. 그렇지 않으면 약간 잘못된 "섹터" 하나가 전체 dd 블록을 가져가게 됩니다. (원본 미디어의 잘못된 데이터 외에도 다른 데이터도 손실됩니다.)

그래서 비록 dd할 수 있는해당 작업을 수행하고 수십 년 동안 사용해 왔으므로 더 적합한 다른 도구가 있을 수 있습니다.

관련 정보