동일한 크기의 두 개의 대용량 하드 드라이브로 구성된 btrfs raid1이 있습니다. 이제 동일한 하드 드라이브에 있는 두 개의 암호화된 Luks 장치로 구성된 btrfs raid1로 데이터를 마이그레이션하고 싶습니다. 백업용으로 다른 상자에 별도의 데이터 복사본이 있습니다. 내 계획은 raid1에서 장치 하나를 제거하고, 제거된 장치에 luks 볼륨을 만들고, luks 장치에 btrfs 파일 시스템을 만들고, 데이터를 새 장치에 복사하고, 두 번째 장치에 luks 볼륨을 만들고, 두 번째 장치를 추가하는 것입니다. 암호화된 btrfs 시스템.
이것이 합리적으로 들리나요? 이에 대한 조언이 있는 사람이 있나요? 아니면 마이그레이션을 위해 세 번째 하드 드라이브를 구입하는 것이 더 나을까요?
답변1
내 질문에 답하기 위해 예비 하드 드라이브에서 다음 실험을 수행했습니다. 유효하고 복구 가능한 백업이 있는지 확인하십시오. 예를 들어 잘못된 장치에 적용하면 이러한 명령은 귀중한 데이터를 복구할 수 없을 정도로 파괴할 수 있습니다.
테스트 시스템 만들기
먼저 사용할 두 개의 파티션이 필요합니다. fdisk를 사용하여 파티션을 생성하여 다음을 얻습니다.
Device Boot Start End Sectors Size Id Type
/dev/sda1 2048 20973567 20971520 10G 83 Linux
/dev/sda2 20973568 41945087 20971520 10G 83 Linux
그런 다음 암호화되지 않은 btrfs raid1을 만들었습니다(파티션을 사용하는 경우 -f를 강제로 실행해야 하지만 수행 중인 작업이 무엇인지 확인해야 합니다).
> mkfs.btrfs -m raid1 -d raid1 /dev/sda1 /dev/sda2
...
Devices:
ID SIZE PATH
1 10.00GiB /dev/sda1
2 10.00GiB /dev/sda2
그런 다음 사용할 수 있는 라이브 시스템을 갖기 위해 파일 시스템을 마운트하고 테스트 파일을 만들었습니다.
> mount /dev/sda1 /mnt/tmp
> echo "Hello World" > /mnt/tmp/hello.txt
마이그레이션하기
나중에 장치를 더 작은 암호화 버전으로 교체할 수 있도록 파일 시스템 크기를 조정하는 것부터 시작하세요.
> btrfs fi resize 1:9G /mnt/tmp
> btrfs fi resize 2:9G /mnt/tmp
그런 다음 시스템에서 중복 항목을 제거합니다(데이터 손실 위험이 증가하므로 강제 실행이 필요함). 대용량 파일 시스템에서는 모든 데이터를 다시 쓰기 때문에 시간이 오래 걸립니다. 를 통해 진행 상황을 확인할 수 있습니다 btrfs balance status /mnt/tmp
.
> btrfs balance start -mconvert=single -dconvert=single /mnt/tmp --force
Done, had to relocate 3 out of 3 chunks
그런 다음 장치 중 하나를 삭제할 수 있습니다. 시간이 오래 걸리면 check status 를 사용할 수 있습니다 btrfs device usage /mnt/tmp
.
> btrfs device remove 1 /mnt/tmp
> btrfs device usage /mnt/tmp
/dev/sda2, ID: 2
Device size: 10.00GiB
Device slack: 1.00GiB
Data,single: 1.00GiB
Metadata,single: 256.00MiB
System,single: 32.00MiB
Unallocated: 7.72GiB
그런 다음 LUKS 장치로 변환합니다.
> cryptsetup luksFormat /dev/sda1
> cryptsetup luksOpen /dev/sda1 crypt_1
암호화된 장치를 파일 시스템에 추가하고 다른 장치를 제거합니다.
> btrfs device add /dev/mapper/crypt_1 /mnt/tmp
> btrfs device remove /dev/sda2 /mnt/tmp
데이터 양이 많은 파일 시스템의 경우 모든 데이터를 이동해야 하므로 시간이 오래 걸립니다.
그런 다음 다른 장치를 LUKS로 변환하고 파일 시스템에 다시 추가한 다음 Raid1에 재조정합니다.
> cryptsetup luksFormat /dev/sda2
> cryptsetup luksOpen /dev/sda2 crypt_2
> btrfs device add /dev/mapper/crypt_2 /mnt/tmp
> btrfs balance start -dconvert=raid1 -mconvert=raid1 /mnt/tmp
Done, had to relocate 3 out of 3 chunks
물론 데이터가 많으면 마지막 명령에도 시간이 오래 걸립니다. 결과를 확인해 봅시다:
> btrfs filesystem show /mnt/tmp
Label: none uuid: e894df1a-b62f-49cb-bcdc-8e6eb25945a4
Total devices 2 FS bytes used 448.00KiB
devid 3 size 9.98GiB used 1.28GiB path /dev/mapper/crypt_1
devid 4 size 9.98GiB used 1.28GiB path /dev/mapper/crypt_2
> btrfs filesystem df /mnt/tmp
Data, RAID1: total=1.00GiB, used=320.00KiB
System, RAID1: total=32.00MiB, used=16.00KiB
Metadata, RAID1: total=256.00MiB, used=112.00KiB
GlobalReserve, single: total=16.00MiB, used=0.00B
보라, 우리는 여전히 데이터를 포함하고 있는 두 개의 암호화된 장치에 RAID 1을 가지고 있습니다!
> cat /mnt/tmp/hello.txt
Hello World