RAID1 btrfs 파일 시스템에서 고장난 디스크를 교체하려고 합니다.
여전히 파티션을 마운트할 수 있습니다 rw
(약 5분의 지연 및 많은 I/O 커널 오류 이후).
먼저 실패한 디스크가 작업 속도에 영향을 미치지 않도록 만들려고 replace
했습니다 .-r
-r only read from <srcdev> if no other zero-defect mirror exists. (enable this if your drive has lots of read errors, the access would be very slow)
그래도 내 성적은 좋지 않았다. 파티션 크기는 3.6TiB이고 9.25시간 후에 다음과 같은 결과를 얻습니다.
3.8% done, 0 write errs, 0 uncorr. read errs
이 속도라면 완료하는 데 10일 이상 걸릴 것입니다!
제가 통제할 수 없는 상황으로 인해 대기 시간이 너무 길어졌습니다.
실패한 디스크에 대한 커널 오류가 자주 발생합니다(평균적으로 5분마다).
Jan 26 09:31:53 tara kernel: print_req_error: I/O error, dev sdc, sector 68044920
Jan 26 09:31:53 tara kernel: BTRFS warning (device dm-3): lost page write due to IO error on /dev/mapper/vg4TBd2-ark
Jan 26 09:31:53 tara kernel: BTRFS error (device dm-3): bdev /dev/mapper/vg4TBd2-ark errs: wr 8396, rd 3024, flush 58, corrupt 0, gen 3
Jan 26 09:31:53 tara kernel: BTRFS error (device dm-3): error writing primary super block to device 2
Jan 26 09:32:32 tara kernel: sd 2:0:0:0: [sdc] tag#0 FAILED Result: hostbyte=DID_OK driverbyte=DRIVER_SENSE
Jan 26 09:32:32 tara kernel: sd 2:0:0:0: [sdc] tag#0 Sense Key : Medium Error [current]
Jan 26 09:32:32 tara kernel: sd 2:0:0:0: [sdc] tag#0 Add. Sense: Unrecovered read error
Jan 26 09:32:32 tara kernel: sd 2:0:0:0: [sdc] tag#0 CDB: Read(10) 28 00 02 eb 9e 23 00 00 04 00
Jan 26 09:32:32 tara kernel: print_req_error: critical medium error, dev sdc, sector 391967000
나는 이러한 오류가 완전히 무료임에도 불구하고 btrfs가 계정 데이터를 디스크에 쓰려고 시도했기 때문에 발생했다고 추측합니다.
마운트된 경우에도 ro
btrfs는 디스크에 쓰기를 시도할 수 있습니다. 설치 옵션-o
nologreplay
:
Warning currently, the tree log is replayed even with a read-only mount! To disable that behaviour, mount also with nologreplay.
이 프로세스의 속도를 어떻게 높일 수 있나요?
이 기사replace
재부팅 후에도 계속됨 을 나타냅니다 .
나는 생각 중입니다:
- 현재 취소
replace
- 실패한 디스크 제거
mount -o degraded,rw
- 정전이 없길 바랍니다이 일회성 설치 옵션의 함정)
현재로서는 다음 사항도 권장합니다.
replace
실패한 디스크 없이 계속하도록 허용 (최근에scrub
양호한 디스크에 모든 데이터가 있음이 표시됨)- 프로세스의 전원이 꺼지면 재설치가
single
가능하도록 데이터를 변환하세요.rw
이것이 더 늦기보다는 빨리 하는 것이 합리적인 계획입니까 replace
?
내 계산에 따르면 디스크 I/O 속도를 고려할 때 10일이 아닌 6.5시간이 가능한 것으로 나타났습니다.
답변1
이 특별한 경우에 표시되는 5분간의 대기 시간은 커널이 실패한 디스크의 데이터에 액세스하려고 시도하는 것입니다. 대부분의 경우 이는 전체 데이터를 복구할 가능성을 높이기 때문에 의도적인 것입니다. 대부분 btrfs예손상된 데이터는 건너뛰지만 커널은 포기하기 전에 한동안 손상된 드라이브에 액세스하려고 시도합니다. 에 따르면:https://superuser.com/questions/905811/faster-recovery-from-a-disk-with-bad-sectors 당신은 그것을 사용할 수 있습니다틀러커널 건너뛰기 오류를 더 빠르게 만들기 위해 제한합니다.
기본값을 확인하려면:
# smartctl -l scterc /dev/sda
쓰기 및 읽기 시간을 모두 5초로 설정합니다.
# smartctl -l scterc,50,50 /dev/sda
비활성화하면 복구 대기 시간이 무제한이므로 디스크에서 복구되는 데이터의 양이 줄어들 수 있습니다.
답변2
고장난 드라이브에 중요한 데이터가 있는 경우 필요한 프로그램은 ddrescue
.
먼저 중요한 내용을 복사하세요.
파일 시스템에 오랫동안 없이는 살 수 없는 데이터가 있는 경우 먼저 이 작업을 수행하십시오.
오류가 발생한 드라이브를 연결 해제합니다.
파일 시스템을 읽기 전용으로 마운트하고 수준을 내립니다.
sudo mount -o degraded,ro /dev/sdX /mount/dir
필요한 데이터를 다른 위치에 복사하세요.
그런 다음 드라이브를 구출하세요.
이제 나머지 데이터를 얻기 위해 드라이브 이미지를 만듭니다 ddrescue
.
Btrfs 파일 시스템을 마운트 해제합니다. 설치하지 마십시오. 읽기 전용으로 설치하지 마십시오.
쓰기 중 복사가 비활성화된 Ext4 또는 Btrfs로 포맷된 새 드라이브를 사용합니다.
ddrescue를 실행하여 불량 드라이브의 이미지를 새 드라이브에 생성합니다.
sudo ddrescue /dev/sdX /path/to/save.img /path/to/save.map
Ddrescue는 드라이브 크기와 속도에 따라 완료하는 데 몇 시간 또는 며칠이 걸릴 수 있습니다. 또한 드라이브 오류가 너무 많으면 완료되지 않을 수도 있습니다. 그것이 구조에 올 수 있도록 허용하는 시간은 당신에게 달려 있습니다.
ddrescue 처리가 완료되면 오류가 발생한 드라이브를 제거/연결 해제하고 다시 연결하지 마세요.
드라이브 이미지를 루프 장치에 마운트합니다.
sudo losetup -Pf --show /path/to/save.img
이제 성능 저하 모드 대신 일반 마운트 명령을 사용하여 Btrfs raid 파일 시스템을 마운트할 수 있습니다. 누락된 드라이브를 교체하기 위해 자동으로 루프 이미지 장치를 사용합니다.
Btrfs 드라이브를 마운트한 후 즉시 정리를 실행하여 ddrescue가 복구할 수 없는 데이터를 복구하십시오.
거기에서 두 가지 옵션이 있습니다. 계속해서 루프 장치를 사용하여 Btrfs 파일 시스템을 실행하거나 루프 장치를 다른 드라이브로 교체할 수 있습니다.
답변3
이 답변실패한 디스크에 쓰면 시스템 replace
작동이 중지될 수 있다고 언급했습니다.
dmsetup
모든 쓰기가 성공할 수 있도록 실패한 디스크에 COW 장치를 설정하는 것이 좋습니다 .
경고하다: 이 경우 파일 시스템은 dmcrypt
장치 내에 캡슐화됩니다. 그렇지 않은 경우 "문제" 및 잠재적인 데이터 손실에 대한 내 의견을 참조하세요.
답변4
크롤링 중이라는 점을 고려하여 replace
다음을 수행했습니다.
- 다운그레이드된 파일 시스템이 다음
noauto
위치에 있는지 확인하세요./etc/fstab
- 머신 재부팅(I/O 중단으로 인해 약 20분 소요)
실패한 드라이브에서 btrfs fs를 포함하는 LVM VG를 비활성화합니다.
sudo vgchange -an <failed-vg>
실패한 장치를 비활성화합니다.
echo 1 | sudo tee /sys/block/sdb/device/delete
파일 시스템을 마운트 합니다
-o ro,degraded
.degraded
한 번)확인해
replace status
보니 정지된 것으로 나타났습니다.Started on 26.Jan 00:36:12, suspended on 26.Jan 10:13:30 at 4.1%, 0 write errs, 0
설치
-o remount,rw
하고replace
계속 확인하세요.kernel: BTRFS info (device dm-5): continuing dev_replace from <missing disk> (devid 2) to target /dev/mapper/vg6TBd1-ark @4%
내가 이것을 쓰는 동안 :
replace status
30초마다 0.1%의 체력 진행률을 표시합니다.iostat -d 1 -m <target-dev>
디스플레이는 약 145MB/s입니다(Seagate에서는 160MB/s를 광고함).
고쳐 쓰다:
완료한 후 에만 표시되는 대신 일부 합계가 btrfs device usage /mountpoint
표시되는 것을 확인하여 균형을 다시 조정했습니다.Data,DUP
Metadata,single
RAID1
btrfs balance start -dconvert=raid1,soft -mconvert=raid1,soft /mountpoint
또한 resize
이제 두 장치 모두에 여유가 있는 경우 다음을 고려하세요.
btrfs filesystem resize max /mountpoint
나도 scrub
추천 해줄게262016 수정 가능한 csum
오류가 중단과 관련된 것으로 보입니다.replace
.