tl; dr : RAID1 배열의 1 디스크에서 불량 블록을 수정하는 방법은 무엇입니까?
그러나 이미 시도한 내용과 내 방법에서 가능한 오류에 대해이 모든 것을 읽으십시오. 가능한 한 자세하게 설명하려고 노력하고 있으며, 피드백을 기대하고 있습니다.
이것은 내 상황입니다.에 의해 관리되는 RAID1 배열에 두 개의 2TB 디스크 (동일한 모델)가 설정되어 mdadm
있습니다. 약 6 개월 전에 SMART가보고했을 때 첫 번째 불량 블록을 발견했습니다. 오늘 나는 더 많은 것을 알아 차리고 이제 고치려고합니다.
이 HOWTO 페이지 는 SMART가보고 한 불량 블록을 수정하기 위해 모든 사람이 링크하는 기사 인 것 같습니다. 정보가 가득한 멋진 페이지이지만 상당히 구식이며 내 특정 설정을 다루지 않습니다. 구성이 다른 방법은 다음과 같습니다.
- 하나의 디스크 대신 RAID1 배열에 두 개의 디스크를 사용하고 있습니다. 한 디스크는 오류를보고하지만 다른 디스크는 정상입니다. 하우투는 하나의 디스크만을 염두에두고 작성되는데, '디스크 장치 나 RAID 장치에서이 명령을 사용합니까?'와 같은 다양한 질문이 제기됩니다.
- fdisk가 지원하지 않는 GPT를 사용하고 있습니다. 대신 gdisk를 사용하고 있으며 필요한 정보를 제공하고 싶습니다.
따라서 아래로 내려갑니다. 이것은 내가 한 일이지만 작동하지 않는 것 같습니다. 내 계산 및 방법에 대한 오류를 자유롭게 다시 확인하십시오. 디스크보고 오류는 / dev / sda입니다.
# smartctl -l selftest /dev/sda
smartctl 5.42 2011-10-20 r3458 [x86_64-linux-3.4.4-2-ARCH] (local build)
Copyright (C) 2002-11 by Bruce Allen, http://smartmontools.sourceforge.net
=== START OF READ SMART DATA SECTION ===
SMART Self-test log structure revision number 1
Num Test_Description Status Remaining LifeTime(hours) LBA_of_first_error
# 1 Short offline Completed: read failure 90% 12169 3212761936
이것으로 우리는 오류가 LBA 3212761936에 있다는 것을 수집합니다. HOWTO 다음에, gdisk를 사용하여 나중에 블록 번호를 결정할 때 사용할 시작 섹터를 찾습니다 (fpt는 GPT를 지원하지 않기 때문에 사용할 수 없습니다).
# gdisk -l /dev/sda
GPT fdisk (gdisk) version 0.8.5
Partition table scan:
MBR: protective
BSD: not present
APM: not present
GPT: present
Found valid GPT with protective MBR; using GPT.
Disk /dev/sda: 3907029168 sectors, 1.8 TiB
Logical sector size: 512 bytes
Disk identifier (GUID): CFB87C67-1993-4517-8301-76E16BBEA901
Partition table holds up to 128 entries
First usable sector is 34, last usable sector is 3907029134
Partitions will be aligned on 2048-sector boundaries
Total free space is 2014 sectors (1007.0 KiB)
Number Start (sector) End (sector) Size Code Name
1 2048 3907029134 1.8 TiB FD00 Linux RAID
를 사용 tunefs
하여 블록 크기가입니다 4096
. 이 정보와 HOWTO의 계산을 사용하여 문제의 블록은 다음과 같습니다 ((3212761936 - 2048) * 512) / 4096 = 401594986
.
HOWTO debugfs
는 블록이 사용 중인지 확인 하도록 지시 합니다. (EXT 파일 시스템이 필요한 RAID 장치를 사용합니다. 처음에는 내가 사용해야하는지 알지 못했던 혼란스러운 명령 중 하나였습니다. dev / sda 또는 / dev / md0) :
# debugfs
debugfs 1.42.4 (12-June-2012)
debugfs: open /dev/md0
debugfs: testb 401594986
Block 401594986 not in use
블록 401594986은 빈 공간이므로 문제없이 쓸 수 있습니다. 그러나 쓰기 전에 실제로 읽을 수 없는지 확인하려고합니다.
# dd if=/dev/sda1 of=/dev/null bs=4096 count=1 seek=401594986
1+0 records in
1+0 records out
4096 bytes (4.1 kB) copied, 0.000198887 s, 20.6 MB/s
블록을 읽을 수 없으면 이것이 작동하지 않을 것입니다. 그러나 그렇지 않습니다. 내가 사용을 반복 /dev/sda
, /dev/sda1
, /dev/sdb
, /dev/sdb1
, /dev/md0
,와 + -5 블록 번호로 불량 블록 주위를 검색 할 수 있습니다. 모두 작동합니다. 어깨를 으 and하고 쓰기와 동기화를 커밋합니다 (하나의 디스크를 수정하고 다른 디스크가 문제를 일으킬 수는 없기 때문에 / dev / md0을 사용합니다.이 방법으로 두 디스크가 모두 불량 블록을 덮어 씁니다).
# dd if=/dev/zero of=/dev/md0 bs=4096 count=1 seek=401594986
1+0 records in
1+0 records out
4096 bytes (4.1 kB) copied, 0.000142366 s, 28.8 MB/s
# sync
불량 블록에 쓰면 디스크가 블록을 좋은 블록으로 다시 할당하지만 다른 SMART 테스트를 실행하면 다르게 표시됩니다.
# 1 Short offline Completed: read failure 90% 12170 3212761936
정사각형으로 돌아 가기 1. 기본적으로 RAID1 어레이의 1 개 디스크에서 불량 블록을 어떻게 수정합니까? 나는 무언가를 올바르게하지 않았다고 확신합니다 ...
시간과 인내심에 감사드립니다.
편집 1 :
동일한 LBA가 나쁜 것으로 반환하는 긴 SMART 테스트를 시도했습니다 (단, 차이점은 90 %가 아니라 30 %가 남아 있다는 것입니다).
SMART Self-test log structure revision number 1
Num Test_Description Status Remaining LifeTime(hours) LBA_of_first_error
# 1 Extended offline Completed: read failure 30% 12180 3212761936
# 2 Short offline Completed: read failure 90% 12170 3212761936
또한 다음 출력과 함께 불량 블록을 사용했습니다. 출력이 이상하고 형식이 잘못 된 것처럼 보이지만 블록으로 출력 된 숫자를 테스트하려고했지만 debugfs에서 오류가 발생합니다.
# badblocks -sv /dev/sda
Checking blocks 0 to 1953514583
Checking for bad blocks (read-only test): 1606380968ne, 3:57:08 elapsed. (0/0/0 errors)
1606380969ne, 3:57:39 elapsed. (1/0/0 errors)
1606380970ne, 3:58:11 elapsed. (2/0/0 errors)
1606380971ne, 3:58:43 elapsed. (3/0/0 errors)
done
Pass completed, 4 bad blocks found. (4/0/0 errors)
# debugfs
debugfs 1.42.4 (12-June-2012)
debugfs: open /dev/md0
debugfs: testb 1606380968
Illegal block number passed to ext2fs_test_block_bitmap #1606380968 for block bitmap for /dev/md0
Block 1606380968 not in use
여기서 어디로 가야할지 모르겠습니다. badblocks
분명히 무언가를 찾았지만 제시 된 정보로 무엇을 해야할지 모르겠습니다 ...
편집 2
더 많은 명령과 정보.
나는 이것을 원래 포함시키는 것을 잊어 버린 바보처럼 느낍니다. 의 SMART 값입니다 /dev/sda
. Current_Pending_Sector가 1 개 있고 Offline_Uncorrectable이 0 개입니다.
SMART Attributes Data Structure revision number: 16
Vendor Specific SMART Attributes with Thresholds:
ID# ATTRIBUTE_NAME FLAG VALUE WORST THRESH TYPE UPDATED WHEN_FAILED RAW_VALUE
1 Raw_Read_Error_Rate 0x002f 100 100 051 Pre-fail Always - 166
2 Throughput_Performance 0x0026 055 055 000 Old_age Always - 18345
3 Spin_Up_Time 0x0023 084 068 025 Pre-fail Always - 5078
4 Start_Stop_Count 0x0032 100 100 000 Old_age Always - 75
5 Reallocated_Sector_Ct 0x0033 252 252 010 Pre-fail Always - 0
7 Seek_Error_Rate 0x002e 252 252 051 Old_age Always - 0
8 Seek_Time_Performance 0x0024 252 252 015 Old_age Offline - 0
9 Power_On_Hours 0x0032 100 100 000 Old_age Always - 12224
10 Spin_Retry_Count 0x0032 252 252 051 Old_age Always - 0
11 Calibration_Retry_Count 0x0032 252 252 000 Old_age Always - 0
12 Power_Cycle_Count 0x0032 100 100 000 Old_age Always - 75
181 Program_Fail_Cnt_Total 0x0022 100 100 000 Old_age Always - 1646911
191 G-Sense_Error_Rate 0x0022 100 100 000 Old_age Always - 12
192 Power-Off_Retract_Count 0x0022 252 252 000 Old_age Always - 0
194 Temperature_Celsius 0x0002 064 059 000 Old_age Always - 36 (Min/Max 22/41)
195 Hardware_ECC_Recovered 0x003a 100 100 000 Old_age Always - 0
196 Reallocated_Event_Count 0x0032 252 252 000 Old_age Always - 0
197 Current_Pending_Sector 0x0032 100 100 000 Old_age Always - 1
198 Offline_Uncorrectable 0x0030 252 100 000 Old_age Offline - 0
199 UDMA_CRC_Error_Count 0x0036 200 200 000 Old_age Always - 0
200 Multi_Zone_Error_Rate 0x002a 100 100 000 Old_age Always - 30
223 Load_Retry_Count 0x0032 252 252 000 Old_age Always - 0
225 Load_Cycle_Count 0x0032 100 100 000 Old_age Always - 77
# mdadm -D /dev/md0
/dev/md0:
Version : 1.2
Creation Time : Thu May 5 06:30:21 2011
Raid Level : raid1
Array Size : 1953512383 (1863.01 GiB 2000.40 GB)
Used Dev Size : 1953512383 (1863.01 GiB 2000.40 GB)
Raid Devices : 2
Total Devices : 2
Persistence : Superblock is persistent
Update Time : Tue Jul 3 22:15:51 2012
State : clean
Active Devices : 2
Working Devices : 2
Failed Devices : 0
Spare Devices : 0
Name : server:0 (local to host server)
UUID : e7ebaefd:e05c9d6e:3b558391:9b131afb
Events : 67889
Number Major Minor RaidDevice State
2 8 1 0 active sync /dev/sda1
1 8 17 1 active sync /dev/sdb1
답변 중 하나에 따라 경찰 : 그것은 것 같다 나는 스위치를했다 seek
및 skip
위해를 dd
. HOWTO와 함께 사용되는 검색 기능을 사용하고있었습니다. 이 명령을 사용하면 dd
# dd if = / dev / sda1 of = / dev / null bs = 4096 count = 1 skip = 401594986이 중단됩니다.
그 주위에 블록을 사용하면 (..84, ..85, ..87, ..88) 제대로 작동하는 것으로 보이며 / dev / sdb1을 블록 401594986
판독 과 함께 사용 하면 디스크가 SMART 테스트를 통과 한 것으로 예상됩니다 ). 지금, 나는이 가지고 질문 : 블록을 재 할당이 영역에 쓸 때, 내가 사용합니까 /dev/sda1
나 /dev/md0
? 한 디스크에 직접 쓰거나 다른 디스크 업데이트를하지 않고 RAID 어레이에 문제를 일으키고 싶지 않습니다.
편집 3
블록에 쓰면 파일 시스템 오류가 직접 발생합니다. 문제를 신속하게 해결하는 답변을 선택했습니다.
# 1 Short offline Completed without error 00% 14211 -
# 2 Extended offline Completed: read failure 30% 12244 3212761936
도와 주신 모든 분들께 감사드립니다. =)
/sbin/badblocks -sv /dev/sda
디스크를 확인합니다.
sudo mdadm -D /dev/md0
smartctl -t long /dev/sda
하고 첫 번째 오류의 LBA가 변경되는지 확인할 수 있습니다.