ext4 파일 시스템과 기본 raid5 배열을 안전한 방법으로 축소할 수 있습니까?
ext4 파일 시스템이 포함된 15TB/6 드라이브 RAID 어레이를 축소하고 싶습니다.
라이브 시스템에서 이를 수행하기 전에 테스트 환경에서 시도해 보기로 결정했습니다. 나는 raid+파일 시스템 수명 주기(어셈블, mkfs, resize2fs, 축소 등)를 시뮬레이션하는 스크립트를 작성했지만 어떤 경우에는 파일 시스템이 손상되었습니다. 스크립트는 두 개의 서로 다른 배포판(그 중 하나는 Centos-8)에서 실행되었습니다.
나는 실패를 이해하려고 노력했고 뭔가 누락되지 않은 한 mdadm은 raid 축소 프로세스(mdadm --grow) 중에 ext4 파일 시스템에 대해 아무것도 모르고 이 도구가 제대로 작동하도록 도울 수 없는 것 같습니다.
내 시나리오에서 프로세스를 시뮬레이션하는 스크립트는 다음과 같습니다.
- 임의의 숫자를 선택합니다num_devices(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 메타데이터가 이유인가요?