최근에 디스크를 교체해야 했기 때문에 두 개의 Btrfs RAID-1 파일 시스템에서 장치를 교체했습니다.
이것이 내가 하는 방법이다:
mount -o noatime,degraded /dev/sda3 /mnt/tmp
btrfs fi show /dev/sda3
btrfs replace start -B 1 /dev/nvme0n1p3 /mnt/tmp
btrfs replace status /mnt/tmp
btrfs fi show /dev/sda3
btrfs fi show /mnt/tmp
btrfs scrub start -B /mnt/tmp
mount -o noatime /dev/sda3 /mnt/tmp
ls /mnt/tmp
btrfs fi show /mnt/tmp
umount /mnt/tmp
이는 다음을 의미합니다.
btrfs replace
이미 마운트된 파일 시스템의 장치 교체만 지원되는 것 같아서 장치를 마운트했습니다.btrfs fi show
어떤 장치 ID가 누락되었는지 확인했습니다 (1
이 경우).- 그래서 없어진 장치를 새 디스크에 있는 장치
1
로 교체했습니다.nvme0n1p3
- 최종 쇼는 좋아 보였고 Scrubs에서도 불만이 없었습니다.
- 프로그램이 정상적으로 실행된 후 제거 및 설치(다운그레이드 없음)
- 이 명령이나 커널 로그에 오류가 보고되지 않았습니다.
그러나 이전 다리(예: /dev/sda3)를 제거한 후에는 파일 시스템을 더 이상 마운트할 수 없습니다.
mount -o noatime,degraded /dev/nvme0n1p3 /mnt/tmp
mount: /mnt/tmp: wrong fs type, bad option, bad superblock on /dev/nvme0n1p3, missing codepage or helper program, or other error.
실패:
Dec 22 09:41:34 BTRFS info (device nvme0n1p3): allowing degraded mounts
Dec 22 09:41:34 BTRFS info (device nvme0n1p3): disk space caching is enabled
Dec 22 09:41:34 BTRFS info (device nvme0n1p3): has skinny extents
Dec 22 09:41:34 BTRFS warning (device nvme0n1p3): devid 2 uuid f9c9c081-0fdc-4b61-8329-c1addb51e3fe is missing
Dec 22 09:41:34 BTRFS error (device nvme0n1p3): failed to read chunk root
Dec 22 09:41:34 BTRFS error (device nvme0n1p3): open_ctree failed
그래서 내 기대는 다음과 같습니다.
- 하나의
btrfs replace
명령으로 RAID-1 btrfs 파일 시스템에서 누락된 장치를 교체할 수 있습니다. - 특히
btrfs replace
나머지 데이터/메타데이터는 새로 추가된 장치에 복사됩니다.
btrfs replace
이것이 작동하지 않기 때문에 a가 항상 충분한 지 더 이상 확신할 수 없습니다 .
btrfs replace
나중에 명확한 균형이 필요 할까요 ?
예를 들어 이런 식으로요?
btrfs balance start -dconvert=raid1,soft -mconvert=raid1,soft /mnt/tmp
추가 정보:
- 따라서 전반적인 목표는 RAID-1 btrfs 파일 시스템의 두 다리를 모두 교체하는 것입니다. 즉, 두 단계로 수행합니다. 먼저 왼쪽 다리, 그 다음 오른쪽 다리입니다.
- Fedora 33(커널 5.8.18-300.fc33.x86_64 및 btrfs-progs-5.7-5.fc33.x86_64)에서 교체가 완료되었습니다.
- Btrfs 파일 시스템은 Ubuntu 20.04에서 생성되었습니다.
btrfs rescue chunk-recover
도움이 안돼
현재 btrfs fi show
보고서는 다음과 같습니다.
btrfs fi show /dev/nvme0n1p3
warning, device 2 is missing
warning, device 2 is missing
bad tree block 934674432, bytenr mismatch, want=934674432, have=0
ERROR: cannot read chunk root
Label: none uuid: 1c1a03db-38c2-4b08-a2ec-47d200f98b0a
Total devices 2 FS bytes used 196.62MiB
devid 1 size 1.00GiB used 758.38MiB path /dev/nvme0n1p3
*** Some devices missing
왜 경고가 두 번 반복되는지 모르겠습니다.
두 번째 예
동일한 시스템의 다른 Btrfs RAID-1 파일 시스템에서 누락된 디스크를 교체하면 비슷한 방식으로 실패합니다.
교체 절차:
mount -o noatime,degraded /dev/mapper/new-root-1 /mnt/tmp
btrfs fi show /mnt/tmp
btrfs replace start -B 1 /dev/mapper/new-root-0 /mnt/tmp
journalctl -fk
btrfs fi show /mnt/tmp
btrfs scrub start -B /mnt/tmp
umount /mnt/tmp
다른 쪽 다리를 제거한 후 설치가 실패합니다.
mount -o noatime,degraded /dev/mapper/new-root-0 /mnt/tmp
mount: /mnt/tmp: wrong fs type, bad option, bad superblock on /dev/mapper/new-root-0, missing codepage or helper program, or other error.
설치 중 기록된 오류:
Dec 22 09:57:12 BTRFS info (device dm-1): allowing degraded mounts
Dec 22 09:57:12 sos.lru.li kernel: BTRFS info (device dm-1): disk space caching is enabled
Dec 22 09:57:12 BTRFS info (device dm-1): has skinny extents
Dec 22 09:57:12 BTRFS warning (device dm-1): devid 2 uuid 3093e508-17e0-4f5c-af13-642954e6fd9b is missing
Dec 22 09:57:12 BTRFS warning (device dm-1): devid 2 uuid 3093e508-17e0-4f5c-af13-642954e6fd9b is missing
Dec 22 09:57:12 BTRFS info (device dm-1): bdev (efault) errs: wr 0, rd 8, flush 0, corrupt 0, gen 0
Dec 22 09:57:12 BTRFS warning (device dm-1): chunk 69823627264 missing 1 devices, max tolerance is 0 for writable mount
Dec 22 09:57:12 BTRFS warning (device dm-1): writable mount is not allowed due to too many missing devices
Dec 22 09:57:12 BTRFS error (device dm-1): open_ctree failed
장치 분실 경고는 여기에서 4번 반복됩니다.
btrfs fi show /dev/mapper/new-root-0
warning, device 2 is missing
warning, device 2 is missing
warning, device 2 is missing
warning, device 2 is missing
Label: none uuid: 3e861d70-9a98-402d-8bbc-ddec6f869433
Total devices 2 FS bytes used 62.81GiB
devid 1 size 231.67GiB used 65.01GiB path /dev/mapper/new-root-0
*** Some devices missing
답변1
설치가 다운그레이드될 때 기록된 모든 데이터는 결국 단일 또는 이중 프로필에 저장될 수 있습니다. 균형 잡힌 실행은 그러한 데이터도 미러링되도록 보장합니다.