불량 섹터가있는 디스크에서 빠른 복구


13

최근에 나는 dd건강에 해로운 HDD에서 파일로 시도했습니다 . 나는 사용했다 dd if=/dev/sdb of=somefile bs=4096 conv=noerror,sync. 내 문제는 dd블록이 잘못되었을 때 많은 시간 을 낭비 했다는 것입니다. 내 유스 케이스에서는 더 빠른 결과를 위해 약간의 데이터 손실로 기꺼이 지불합니다.

오류 처리 속도를 높이는 방법이 있습니까? 어쩌면 커널 조정 (블록을 ​​읽기 위해 노력을 덜기 위해 HDD에 알리는 것)? 아니면 다른 프로그램?

답변:


29

먼저 소프트웨어를 사용하려면 ddrescue대신 대신 사용해보십시오 dd.

ddrescue재시도 횟수를 제한하는 스위치가 있습니다. 또한 로그 파일을 사용할 수 있으므로 어느 블록이 불량했는지 기록합니다. 나중에 더 많은 재 시도를 원한다면 같은 로그 파일을 사용하여 더 많은 재시 도와 같은 다른 옵션으로 ddrescue 다시 실행할 수 있으며 필요한 블록 만 다시 시도합니다.

사용법 예 :

# ddrescue -n /dev/sda /dev/sdb rescue.log
# ddrescue -r1 /dev/sda /dev/sdb rescue.log

로부터 ddrescue정보 페이지 :

   -n, --no-scrape     
          Skip the scraping phase. Avoids spending a lot of time
          trying to rescue the most difficult parts of the file.

   -r, --retry-passes=<n>
          Exit after given number of retry passes. Defaults to 0.
          -1 means infinity. Every bad sector is tried only once 
          in each pass. To retry bad sectors detected on a previous
          run, you must specify a non-zero number of retry passes.

다음은 사용에 대한 추가 소스입니다 ddrescue.


편집하다

경우에는 그 자체가 너무 오래 걸리는 하드 디스크, 당신이라는 기능을 사용하도록 시도 할 수 TLER를 ( T의 IME의 L은 imited E rror의 R의 또는 ecovery) CCTL ( C ommand C ompletion T IME L의 IMIT을). 모든 HDD가있는 것은 아니지만 HDD 컨트롤러 자체의 시간을 제한하기 위해 사용할 수 있습니다. 이 방법 ddrecue은 물론 을 사용하여 결합 할 수 있습니다 .

리눅스에는 smartctl( smartmontools패키지에) 라는 도구가 있습니다.

현재 설정을 확인하려면 ( "disabled"는 원하지 않는 시간을 의미합니다) :

# smartctl -l scterc /dev/sda

고정 값으로 설정하려면 (이 예에서는 5.0 초입니다. 0으로 설정하면 TLER이 비활성화됩니다) :

# smartctl -l scterc,50,50 /dev/sda

TLER의 출처 : http://en.wikipedia.org/wiki/TLER


2
살펴볼 또 다른 도구는 dc3dd입니다. 이것은 dd의 법의학 버전입니다.
fpmurphy

오, 그 도구를 몰랐어요!
Slizzered

2
나는 그 TLER에 대해 전혀 몰랐다. 그러나 그것은 정말로 나의 하루를 구했다. 내 디스크에서는 이러한 기능이 비활성화되었으며 ddrescue를 실행할 때마다 몇 초 후에 디스크가 차단되었습니다. 전원 끄기, 전원 켜기 및 다음 시도. 이제 언급 한 명령으로 2 초로 설정했으며 다시 차단하지 않으며 일부 섹터를 건너 뛰지 만 적어도 중단없이 진행됩니다.
Sven Rieke

2

이 소프트웨어를 사용하여 읽을 수없는 디스크에서 좋은 결과를 얻었습니다.

http://www.cgsecurity.org/wiki/TestDisk

다음은 견고한 복구 도구입니다. 파일 테이블이 손상되었거나 삭제 된 경우에도 파일을 가져올 수 있습니다. 지독한 법의학 도구입니다. 실제로 구성되지 않은 방식으로 항목을 덤프하지만 모든 데이터를 이동할 수 있습니다.

http://www.cgsecurity.org/wiki/PhotoRec


2

디스크를 구출하는 빠르고 빠른 옵션을 사용하려면 sh 스크립트 파일을 사용하고 sh를 사용하여 파일을 실행할 수 있습니다. 이 줄을 포함하고 반복 sudo ddrescue하고 sleep 3몇 번 더 반복하십시오. 절전 모드는 몇 초 동안 드라이브를 정지시키는 데 사용됩니다.

#! /bin/sh -e 
sudo ddrescue -d -r0 -e +0 -T 1s -n /dev/drivepartition file.img log.logfile 
sleep 3

위에서 사용한 옵션 :

  • -r0 재시도없이
  • -e +0: 첫 번째 오류 발생시 종료
  • -T 1s: 1 초의 읽기 실패로 종료
  • -d : 직접 I / O
  • -n : 긁힘 없음

-R옵션으로 완료 후 -A한 번 사용할 수 있습니다. 모든 오류를 되돌리고 제거하고 거꾸로 다시 시작합니다. 오류를 다르게 읽는다는 의미입니다.


0

하드 드라이브의 크기와 불량 블록 수에 따라 다릅니다. 일반적으로 DD 1 테라 건강한 HD를 사용하여 백업하는 데 20 분이 걸립니다. 오늘 아침에 불량 블록으로 복구 한 결과 시간이 두 배로 걸렸습니다. 약 30 개의 불량 블록으로 디스크를 백업하는 데 문제가있었습니다. 내가 한 첫 번째 일은 일반 Filezilla를 사용하여 모든 좋은 데이터를 백업하는 파일 백업입니다. 하나의 큰 파일이 올바르게 복사되지 않은 것으로 나타났습니다 (중간에 중단하고 전송을 다시 시작 함). 운 좋게 같은 파일의 이전 백업이 있습니다. 디스크를 복제하려면이 절차를 사용하여 디스크에서 불량 블록을 찾아야했습니다.

먼저 fdisk -l을 사용하여 HD 정보를 식별하는 문제 디스크를 찾으십시오.

두 번째로 디스크가 / dev / sdb 라고 말하면 badblocks -v / dev / sdb 명령을 실행해야 드라이브의 모든 불량 블록이 나열됩니다. 다행히 몇 가지가있을 것입니다. 불량 블록이 없으면 드라이브 블록에 문제가 없으며 다른 것을 알아 내야합니다. 내 블록 크기는 512이므로 기본 번호를 사용하여 DD를 실행합니다.

세 번째 각 블록은 512 크기이므로 bs = 512를 설정하는 것입니다.

항상 DD를 정기적으로 실행할 때마다 오류 후 데이터가 손상됩니다. https://www.gnu.org/software/coreutils/manual/html_node/dd-invocation.html 페이지에 설명 된대로 매개 변수를 사용하여 "실패한 디스크"부분을 검색하십시오.

dd if=/dev/sdb of=/dev/sda bs=512 conv=noerror,sync iflag=fullblock 

시간이 걸렸습니다. 각 불량 블록에는 결함이있는 드라이브에서 두드리는 소리가 들렸습니다. 그것은 블록별로 복사하고 모든 나쁜 블록을 통해 같은 소음을 냈습니다. 소음이 발생한 횟수는 다른 불량 블록을 발견하고 표시 오류 메시지에 대해 알려주기 때문입니다. 뭐라고 '전환 = NOERROR, 동기화가' 나쁜 동안, NUL을 함께 읽어에서 수행, 패드 인 'iflag = fullblock' 짧은 충족시켜 읽기,하지만 마지막까지 데이터 동기화 유지합니다. 전혀 손상이 없으며 결함있는 블록을 복사하지 않고 빈 NUL로 채 웁니다.

DD로 복사 한 후, 나는 과거 백업에서 Filezilla를 되 돌리는 나쁜 파일을 교체하고 모든 것이 잘 작동했습니다. 결함이있는 드라이브를 백업하려는 다른 사람들에게 유용 할 수 있기를 바랍니다.

참고 : 내 나쁜 블록은 서로 매우 가까운 곳에 있습니다. 불량이 감지 된 그룹에서 한 번에 약 4 개의 블록. 블록이 디스크 전체에있는 경우 여러 파일이 영향을받을 수 있습니다. 운 좋게도, 제 경우에는 큰 데이터베이스 4gb 파일 만 영향을 받았습니다.


1
동일한 답변으로 여러 질문을 처리 할 경우 질문이 중복 될 가능성이 높습니다. 그렇다면 하나에 대답하고 다른 하나는 가능한 복제본으로 표시하는 것이 좋습니다. 이렇게하면 반복적 인 답변이 번거롭지 않게되고 질문을 연결하면 독자가 모든 답변을 쉽게 찾을 수 있습니다.
fixer1234

실제로는 아니지만 그렇게 생각하면 알려 주시면 답변을 지울 것입니다. 올바른 솔루션을 찾기 위해 모든 곳을 찾았지만 서버 문제를 해결하는 방법을 찾았습니다. 내 문제에 대답하지 않은 몇 가지 다른 유사한 질문이 있습니다. 지금까지 나는 십여 개의 비슷한 o 관련 질문을 발견했습니다. 방금 경험을 작성하기 위해 부부에게 대답하고 어떻게 해결할 수 있었습니까? 내 답변을 지우려면 알려 주시면 기꺼이 도와 드리겠습니다. 문안 인사.
Luis H Cabrejo
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.