私はアーチLinuxを使用しています。単一のボリュームグループに2つのディスクで暗号化された論理ボリューム(LVMのLUKS)を複製したいと思います。小さな問題があります。一部のドライブを交換したいです。
私は持っています:
- VG1:LV:PV(既存ドライブ1)+ PV(既存ドライブ2)
sda (OldDrive1)
-vg1-luks_encrypted_lv
sdb (OldDrive2)
-vg1-luks_encrypted_lv
2つの異なるドライブ(NewDrive1とNewDrive2)があります。 VG1のレプリカであるVG2を作成したいです。しかし、いくつかのドライブを交換したいと思います。だから私は以下が欲しい:
- VG1:LV:PV(既存ドライブ1)+ PV(新しいドライブ1)
- VG2:LV:PV(既存ドライブ2)+ PV(新しいドライブ2)
sda (OldDrive1)
-vg1-luks_encrypted_lv
sdb (OldDrive2)
-vg2-cloned_luks_encrypted_lv
sdc (NewDrive1)
-vg1-luks_encrypted_lv
sdd (NewDrive2)
-vg2-cloned_luks_encrypted_lv
現在の計画は各ドライブを複製することです。以前はddの使用を検討していましたが、少し読んだ後にpvmoveを使用する必要がありますか? :
- 古いドライブ1 - >新しいドライブ1
- 既存のドライブ2 - >新しいドライブ2
その後、ドライブはビット単位で複製されるため、LVMで物理ドライブを交換できますか?私が何かを逃しているのではないか心配です。ニュースドライブをLVにマージする方法は?データを失いたくないのでアドバイスを求めたいです。ありがとうございます。
編集する:
@telcoMの答えは非常に有効です。とても感謝しています。私はオンライン方式を使用しています。似たようなことをしたい人がいるなら、注目すべきいくつかのことがあります。
ステップ7で:
デフォルトはlvconvert -m
lvm 独自のミラーシステムではなく raid1 です。詳細を読んでくださいman lvconvert
。ミラーをすぐに分割したいので、lvmのレガシーミラーを使用してミラーログをメモリに保存する方がはるかに簡単です。
lvconvert --type mirror -m +1 --mirrorlog core vg1/luks_encrypted_lv OldDrive2 NewDrive2
--mirrorlog core
これにより、ミラーログがメモリに保存されることに注意してください。したがって、実行する前にコンピュータをシャットダウンしないでください。lvconvert --splitmirrors
そうしないと、ミラーログファイルが失われます。
ステップ9で:
これを行う前に、次のものがvgsplit
必要です。ファイルシステムをアンマウントし、論理ボリュームを無効にします。。
ステップ11で:
$uuid
ほとんどの人はおそらくこれを知っているでしょう。ただし、実行する前にUUIDを割り当てる必要がありますcryptsetup luksUUID --uuid $(uuid) /dev/mapper/VG2-LVx
。次のことを実行して起動しますuuid=$(uuidgen)
。
答え1
「必要」は強い言葉です。欲しいものを達成する方法はいくつかあります。
を使用すると、pvmove
暗号化されたLVを使用しながらオンラインで作業できます。
1.)pvcreate
新しいドライバ 1
2.)vgextend VG1 NewDrive1
3.)pvmove OldDrive2
(実質的に意味:「可能であれば、OldDrive2が完全に割り当て解除されるように、LVM割り当て範囲をOldDrive2からVG1の他のドライブに移動します。」と時間がかかります。erboseオプションを使用してセッションをscreen
追加できます。) 。tmux
-v
4.) OldDrive2 を使用するか、pvs
完全pvdisplay OldDrive2
に割り当てられていないことを確認してください。
5.)pvcreate NewDrive2
6.)vgextend VG1 NewDrive2
7.)VG1の各LVについて:(lvconvert -m +1 VG1/LVx OldDrive2 NewDrive2
「VG1 / LVxでミラーを作成し、OldDrive2とNewDrive2にミラースペースを割り当てます」)。ディスクにミラーログ用のスペースがない場合は、--mirrorlog core
ここでオプションを使用する必要があります。
8.) ミラーが同期したら、VG1 の各 LV に対して次の操作を行います。lvconvert --splitmirrors 1 --name LVcopyx VG1/LVx OldDrive2 NewDrive2
("OldDrive2および/またはNewDrive2のLVxミラーを分割し、名前の競合を避けるために、名前を"LVcopyx"と指定します。)
9.) vgsplit VG1 VG2 OldDrive2 NewDrive2
("VG1 から OldDrive2 と NewDrive2 を切り離し、対応する LV を削除した後、新しい VG の名前を VG2 とします。")
10.)VG2の各LVについて:lvrename VG2 LVcopyx LVx
元のLV名を復元します。これでコピーが独自のVGに分割され、競合がなくなりました。ステップ8でLVミラーが分割されたときに存在したので、VG1のLVコピーを含む新しいVG2が作成されました。 )。
11.)実際にVG2を使用する前に、VG1とは異なるユニークなUUIDを割り当てる必要がありvgchange -ay VG2
、cryptsetup luksUUID --uuid $(uuid) /dev/mapper/VG2-LVx
暗号化のロックを解除した後は、その中のファイルシステムにも新しいUUIDを割り当てる必要があります。 BtrFSの場合、これは非常に重要です(btrfstune -u /dev/mapper/VG2-LVx-crypt
)。他のファイルシステムの場合、これは基本的にUUIDベースのインストールが機能できるようにするための便利なものです。
VGをオフラインにしてディスクを取り外して再接続できる場合は、次のこともできます。
1.)cryptsetup luksClose
VG(vgchange -an VG1
)を削除して無効にします。起動やホットプラグ時に不要な自動アクティベーションを防ぐために、エクスポートされたものとしてマーク(vgexport VG1
)してください。
2.) 計画に従ってドライブを複製します。
3.)システムがOldDrive2とNewDrive2のみを表示できるように、ドライブを取り外します。ハードウェアでホットスワップを許可する場合は、echo 1 > /sys/block/<device name>/device/delete
エレガントなホットスワッピングを使用してください。
4.) システムを起動するか、vgscan
通常のホットプラグ後に実行します。次に、VGをインポートして名前を変更し、を使用してvgimport VG1
新しいVG2に古いVG1とは異なる新しいIDを提供し、をvgrename VG1 VG2
使用してPVレベルで同じ操作を実行します。インポートして名前を変更したら、VGをインストールするか、他の作業を実行する前にVGを有効にする必要があることに注意してください。vgchange --uuid VG2
pvchange --uuid OldDrive2
pvchange --uuid NewDrive2
vgchange -ay VG2
5.)VGを有効にした後、cryptsetup luksUUID --uuid=$(uuid) /dev/mapper/VG2-LVx
doを使用してLUKSコンテナに一意の新しいIDを付与し、暗号化のロックを解除した後、ファイルシステム固有のツールを使用してファイルシステムレベルで同じ操作を実行します。 (これはBtrFSにとって特に重要です。 btrfstune -u /dev/mapper/VG2-LVx-crypt
)
vgscan
6.)これで、OldDrive1とNewDrive1(ホットプラグされた場合に使用されます)を再接続し、を使用してvgimport VG1
「再び」を有効にすることができますvgchange -ay VG1
。これで、必要に応じて使用できる2つの完全に独立したVGが作成されました。
答え2
dd clone プロセス中に LUKS コンテナーを終了できる場合、ステップは次のようになります。
- VG1にNewDrive1を追加
- 「pvmove OldDrive2 NewDrive1」を使用してください。
- VG1からOldDrive2を削除する
- OldDrive2 + NewDrive2を使用してVG2を作成する
- VG2で目的のLVを作成
- dd VG1/LV -> VG2/LVを使う
同じマシンで2つのコピーを使用する場合は、LUKSコンテナと含まれているファイルシステムのUUIDも変更する必要があります。この点を指摘してくれた@telcoMに感謝します!