Jump to content

badblocks

This is a fully translated article. Click here for more information.
From DawoumWiki, the free Mathematics self-learning

badblocks디스크 드라이브의 불량 섹터를 확인하는 리눅스 유틸리티입니다. 그것은 mkfs와 같은 다른 프로그램과 함께 사용할 수 있는 이들 섹터의 목록을 생성하여 향후 사용되지 않도록 함으로써 데이터 손상의 원인이 되지 않게 합니다. 그것은 e2fsprogs 프로젝트의 일부이고,[1] 하나의 포트가 BSD 운영 시스템에 대해 유용합니다.[2]

독립 실행형 프로그램으로 실행될 때, badblocks는 만약 있다면 문제를 가진 블록의 목록을 제공합니다. 이것은 SMART 데이터 및 파일 시스템 검사와 독립적으로 디스크 드라이브가 정상인지 확인하는 데 좋은 선택 사항이 됩니다.[3]

e2fsck's "-c" option

보다 일반적인 사용 사례는 옵션 "-c"을 전달하여 불량 블록을 스캔하고 이들 블록에 테이트를 저장되는 것을 방지할 때 e2fsck의 일부로 badblocks를 호출하는 것입니다. 이것은 발견된 불량 블록의 목록을 불량 블록 inode에 추가하여 영향을 받는 섹터를 파일 또는 디렉토리에 할당되는 것을 방지함으로써 수행됩니다. 이 테스트는 읽기-전용 ("-c") 또는 비-파괴 읽기-쓰기 ("-cc") 테스트 방법을 사용하여 수행될 수 있습니다.[4]

dumpe2fs

dumpe2fs -b를 실행하면 e2fsck 또는 tune2fs에 의해 기록된 불량 블록의 목록을 표시할 것입니다.

Examples

badblocks -nvs /dev/sdb

이것은 비-파괴 읽기-쓰기 모드에서 드라이브 "sdb"를 확인하고 그것들이 확인되었을 때 블록 번호를 기록함으로써 진행 상황을 표시합니다. 데이터를 파괴하지 않고, 검사하기 때문에, 속도가 느립니다.

badblocks -wvs /dev/sdb6

이것은 파괴적인 읽기-쓰기 모드 (-w = 쓰기-모드)에서 드라이브 "sdb"의 여섯 번째 파티션을 검사하며, 전체 파티션에 4 개의 다른 패턴을 쓰고 각각을 다시 읽음으로써 확인합니다. 그것은 그것들이 검사되었을 때 블록 번호를 기록함으로써 진행 상황을 표시합니다 (-s = 보기, -v = 자세한-정보). 파티션의 모든 데이터는 블록 수준에서 덮어쓸 것입니다.

badblocks -wvsb 4096 /dev/sdb

이것은 위의 것과 같지만, 4096의 블록 크기를 갖는 전체 드라이브에 적용됩니다. 이것은 MBR, 파티션 및 데이터와 같은 것을 모두 파괴합니다. 최신 디스크 드라이브는 불량 섹터를 예비 트랙에 자동으로 다시 매핑하기 때문에 임의의 결함을 갖는 섹터를 표시하지 않을 것이지만,[5] 새 드라이브로 며칠 동안 프로그램을 실행하면 전체 표면을 테스트하고, 나중에 그것을 읽을 때 S.M.A.R.T. 데이터는 결국 다시-할당된 섹터를 표시할 것입니다.

기존 파일 시스템을 포함하는 장치에서 -w 옵션을 사용하면 해당 장치의 데이터가 지워집니다.

실사용 예제

시게이트 하드디스크 계속 2

2023년 12월 18일 1440550488에서 읽기 오류 발생, 그 부분에 대한 파일로 추정되는 것은 절대 지우지 않는 것으로 당분간 사용해 볼 예정입니다.

2024년 3월 8일까지 문제없이 동작 중입니다.

시게이트 하드디스크 계속

우선 읽기 모드로 8개의 블록에 문제가 있음을 발견했습니다. 그 위치는 1.4~1.5T 사이의 위치로 확인이 되었습니다.

그래서, 기존의 데이트를 전부 정리하고, 필요한 파일들은 다른 파티션으로 옮겼습니다.

그런-다음 그 위치 전 중에 적당한 위치, 1.2T까지의 파티션을 만들고 나머지를 두 번째 파티션으로 만들었습니다.

그런-다음 첫 번째 파티션을 검사합니다:

  • sudo badblocks -wvs -o /root/badblocks.txt /dev/sda1


1.2T를 검사하는 데 14~16시간 정도 걸립니다. 예상과 다르게 읽기-쓰기 테스트에서는 1.1~1.2T에서 44개의 배드 블록이 발견되었습니다. 이 목록은 /root/badblocks.txt에 기록됩니다.

발견된 위치는 1T 이후로 생각되기 때문에, 1T까지 파티션을 만들고 나머지 부분을 두 번째 파티션으로 만들었습니다.

  • sudo fdisk /dev/sda

귀찮은 커널 메시지가 출현되지 않도록 해당 파티션을 완전히 지웁니다.

  • sudo -i
  • pv /dev/zero > /dev/sda1
  • pv /dev/zero > /dev/sda2

30분마다 smartctl이 수행되고, 두 번째 파티션을 일부 지우는 중간에 32개의 오류 지점이 절반 16개로 줄고, 전체를 수행한 후에 더이상 메시지가 나오지 않습니다.

따라서, sda2는 사용하지 않을 예정이므로, 전체 테스트를 수행하지 않고 있지만, 다시 배드 블록 테스트를 수행한 후에, 배드 없는 곳에 적당한 파티션을 만들 수는 있습니다.

결국, 4년 조금 더 지난 시점에서 1.8T 중에 800M를 잘라내고 1T를 사용할 수 있습니다. 이 파티션도 언제 배드가 발생할지 예측할 수 없기 때문에, 임시 파일들을 보관하는 용도로 사용할 예정입니다.

시게이트 하드디스크

2018년 1월 구매한 2T 하드디스크는 2022년 11월 초순에 8 Offline uncorrectable sectors가 발생하기 시작했고, 1주일 정도 지난 후에 메시지가 사라졌습니다.

그러다 2주일 정도 후에, 아마도 해당 섹터의 파일을 지운 후에, 다시 해당 부분을 파일을 쓴 후라고 짐작, 다시 같은 메시지가 발생하다가, 몇 시간 후에 16 Offline으로 증가했습니다.

먼저, 쓰기 검사는 너무 시간이 오래 걸려서, 읽기 테스트를 수행했습니다.

  • sudo umount /dev/sda1
  • sudo badblocks -sv /dev/sda1

100초에 1% 정도가 진행되기 때문에, 아마도 배드 섹터에서 추가적으로 많은 시간 소모가 없다면, 대체로 3시간 내에 종료될 것으로 기대됩니다.

만약 배드 섹터를 fsck와 통합하려면, 다음 명령을 사용할 수 있지만, 추천하지는 않는다고 합니다:

  • sudo fsck -vck /dev/sda1

그러나, 위의 방법은 정확도가 떨어지기 때문에, 보다 정확한 결과를 얻기 위해 쓰기 테스트를 포함해야 합니다. 데이터를 살려할 때에는

  • sudo badblocks -nsv /dev/sda1

만약 배드 섹터를 fsck와 통합하려면, 다음 명령을 사용할 수 있습니다:

  • sudo fsck -vcck /dev/sda1

이 과정은 가장 시간이 오래 걸리기 때문에, 몇 일, 아마도 일주일 이상 걸릴 것으로 예상됩니다.

웬디 하드디스크

하드디스크 중 하나가 갑자기 I/O 오류를 발생하기 시작했습니다:

blk_update_request: I/O error, dev sdb, sector 263221288 op 0x0:(READ) flags 0x0 phys_seg 1 prio class 0
(십년도 더 지난 삼성에서 제조된 완제품에서 꺼낸 웬디 하드디스크입니다)

위에서 제공된 badblocks -nvs /dev/sdb 명령은 처리하는데, 1%에 8분 정도 걸려서, 중간에 중단을 했습니다.

대신에 sudo fsck.ext4 -c /dev/sdb1를 시도했습니다:

e2fsck 1.45.5 (07-Jan-2020)
Checking for bad blocks (read-only test):   0.00% done, 0:00 elapsed. (33/0/0 errdone...)
/dev/sdb1: Updating bad block inode.
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
Free blocks count wrong for group #1760 (24543, counted=24544).
Fix<y>? yes
Free blocks count wrong for group #2112 (24538, counted=24544).
Fix<y>? yes
Free blocks count wrong for group #2128 (24543, counted=24544).
Fix<y>? yes
Free blocks count wrong for group #2144 (24536, counted=24544).
Fix<y>? yes
Free blocks count wrong for group #2176 (24543, counted=24544).
Fix<y>? yes
Free blocks count wrong for group #2240 (24542, counted=24544).
Fix<y>? yes
Free blocks count wrong (76637467, counted=76637486).
Fix<y>? yes

/dev/sdb1: ***** FILE SYSTEM WAS MODIFIED *****
/dev/sdb1: 11/19537920 files (0.0% non-contiguous), 1505064/78142550 blocks
중간에 엔터를 입력해서 내용이 정확히 나오지 않았지만, 70~80분 정도 걸렸으며, 33개의 오류가 있음을 확인했습니다.

여전히 smartd: "Currently unreadable (pending) sectors" 오류가 발생하고, 기타 방법을 시도했지만, 물리적 오류 메시지가 나와서 해당 디스크는 폐지처분했습니다.

References

  1. ^ E2fsprogs: Ext2/3/4 Filesystem Utilities – Release notes
  2. ^ FreshPorts – sysutils/e2fsprogs
  3. ^ badblocks(8) – Linux Administration and Privileged Commands Manual
  4. ^ e2fsck(8) – Linux Administration and Privileged Commands Manual
  5. ^ "Archived copy". Archived from the original on 2012-07-19. Retrieved 2012-06-30.{{cite web}}: CS1 maint: archived copy as title (link)

External links