同じサイズの2つの大容量ハードドライブで構成されるbtrfs raid1があります。さて、同じハードドライブ上の2つの暗号化Luksデバイスで構成されているbtrfs raid1にデータを移行したいと思います。バックアップ用に別のボックスに別々のデータコピーがあります。私の計画はraid1から1つのデバイスを削除し、削除されたデバイスにluksボリュームを作成し、luksデバイスにbtrfsファイルシステムを作成し、データを新しいデバイスにコピーし、2番目のデバイスにluksボリュームを作成し、2番目のデバイスを追加することです。暗号化されたbtrfsシステム。
これは合理的に聞こえますか?これについてアドバイスがある人はいますか?それとも、マイグレーションのために3番目のハードドライブを購入する方が良いでしょうか?
答え1
私の質問に答えるために、スペアハードドライブで次の実験を行いました。有効で回復可能なバックアップがあることを確認してください。たとえば、誤ったデバイスに適用すると、これらのコマンドは貴重なデータを回復できないほど破壊する可能性があります。
テストシステムの作成
まず、使用する2つのパーティションが必要です。 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
その後、いずれかのデバイスを削除できます。時間がかかる場合はチェックステータスを使用できます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
見て、私たちはまだデータを含む2つの暗号化されたデバイスにRAID 1を持っています!
> cat /mnt/tmp/hello.txt
Hello World