ext4 파일 시스템과 기본 raid5 배열을 안전한 방법으로 축소할 수 있습니까?
ext4 파일 시스템이 포함된 15TB/6 드라이브 RAID 어레이를 축소하고 싶습니다.
실제 시스템에서 이 작업을 수행하기 전에 테스트 환경에서 시도해 보기로 결정했습니다. 나는 raid+파일 시스템(어셈블, mkfs, resize2fs, 축소 등)의 수명 주기를 시뮬레이션하는 스크립트를 작성했지만 어떤 경우에는 파일 시스템이 손상되었습니다. 스크립트는 두 가지 다른 배포판(그 중 하나는 Centos-8)에서 실행됩니다.
이러한 실패를 이해하려고 노력 중이며, 제가 누락한 것이 없으면 mdadm은 raid 축소 프로세스(mdadm --grow) 중에 ext4 파일 시스템에 대해 아무것도 모르고 도구가 제대로 작동하도록 돕는 것이 불가능해 보입니다.
내 시나리오에서 프로세스를 시뮬레이션하는 스크립트는 다음과 같습니다.
- 임의의 숫자를 선택하세요장비 수량선택(5~10) - 테스트 배열의 장치 수를 결정합니다.
- 임의의 숫자를 선택하세요장치 크기(300~350) - 단일 장치의 크기(MiB)
- 생성 및 조립/dev/md0- RAID 5 어레이(저의 경우 메타데이터 0.90) - 어레이의 크기는array_size=($num_devices-1)*$device_size
- ext4 파일 시스템 생성/dev/md0그리고 그것을 설치/mnt
- 참조 파일을 복사합니다(제 경우에는 /boot의 커널 이미지 중 하나입니다).$num_devices도착/mnt(파일 시스템의 무결성을 확인할 수 있는 데이터가 있습니다.) - 파일 시스템의 여유 공간은 약 80%입니다.
파일 시스템이 마운트 해제되고 fscked(
e2fsck -f
)된 다음 축소(resize2fs -M
최소 크기 또는reisze2fs /dev/md0 {calculated_size}
)된 다음 다시 fscked됩니다.스크립트는 mdadm 재구축 프로세스가 완료될 때까지 기다립니다(/proc/mdstat 확인).
- 새 배열 크기를 계산합니다.new_array_size=($num_devices-2)*$device_size
- 하드 드라이브 오류를 시뮬레이션한
mdadm --manage /dev/md0 --fail /dev/loop3
다음mdadm --manage /dev/md0 --remove /dev/loop3
- 모양 변경 프로세스가 완료될 때까지 기다립니다.
재구성 프로세스가 완료되면 /dev/loop3은 삭제된 것으로 표시되고 다른 루프 장치(예: /dev/loop2)는 예비로 표시됩니다.
- 프로 시 저는 스페어를 결정하고 이를 어레이에 다시 추가합니다(
mdadm --manage /dev/md0 --remove /dev/loop2
뒤에mdadm --manage /dev/md0 --add /dev/loop2
- 스크립트는 RAID 재구축이 완료될 때까지 기다립니다(/proc/mdstat 보기).
이 시점에서 손상이 발생합니다.
- 파일 시스템이 /mnt에 다시 마운트됩니다.
- 참조 파일과 축소 파일 시스템의 복사본 간의 md5 체크섬 비교가 1-2개 파일에 대해 성공하거나 실패합니다.
- 파일 시스템이 마운트 해제되고, fscked(
e2fsck -f
)되고, 최대 크기로 증가(resize2fs)되고 다시 fscked됩니다. - 부패는 여전히 존재한다
내가 뭔가 잘못하고 있는 걸까요, 아니면 raid5 축소 프로세스가 실제로 지원되지 않는 걸까요? 아니면 0.90 메타데이터의 이유인가요?