LVを複数のPVに分割 - 1つのPVに移動

LVを複数のPVに分割 - 1つのPVに移動

私のシステムには3つのドライブがあります。これらはすべてVG内のPVです。

このVGにはいくつかのLVがあります。そのうちの1つは、2つのドライブ/ PVにまたがるかなり大きな規模です。 3番目のドライブは、LV全体を収容するのに十分な大きさです。これが私が望むものです。

これが私が言うことです。ここに私のPVがあります(例えば、pvcreateパーティションではなくドライブ全体で実行されています)。

/dev/sda -> 10TB drive
/dev/sdb -> 4TB drive
/dev/sdc -> 3TB drive

3つのPVと複数のLVの両方を含むVGがあります。私は1つだけに興味があります:

MyData -> 5TB LV

によると、LVがオンになっていますlsblk -fMyData両方 /dev/sdbそして/dev/sdc。デフォルトでは、このシステムは1つのドライブから始めてさらに追加しました。私も小さなLVから始めて、より大きく使用lvextend/lvresize作成しました。

私がしたいことは動いています。全体的な到着しましたMyData/dev/sdaドキュメントを見ると、pvmove次のことができることがわかりました。

pvmove -n MyData /dev/sdb /dev/sda
pvmove -n MyData /dev/sdc /dev/sda

これが私が望むようになるはずです。

1つのコマンドでこれを行う方法はありますか?tmux両方のコマンドを同時に実行できますか?

これにより、すべての範囲が(断片化されずに)連続的に作成されますか/dev/sda

答え1

最も簡単な場合はそうです。そう動作します。

ただし、LV を大量に作成、削除、サイズ変更すると、範囲の断片化が発生する可能性があります。このような場合は、もう少し詳しく見てみると良いでしょう。

# check where there is free space
pvs

# check in detail if free space is contiguous
pvdisplay --maps /dev/sda

# show LV segments that require moving, in order
lvs -o seg_le_ranges VG/LV

この時点では、何をどこに移すべきかについて明確なアイデアが必要です。


ステップバイステップの例:

# pvdisplay --maps /dev/sdx1
  --- Physical volume ---
  PV Name               /dev/sdx1
  VG Name               HDD
  [...]
  Physical extent 10650 to 11174:
    FREE

# lvs -o lv_name,vg_name,seg_le_ranges HDD/MyData
  LV     VG  LE Ranges                       
  MyData HDD /dev/sdz1:11128-11143
  MyData HDD /dev/sdz2:7450-7457 
  MyData HDD /dev/sdz3:0-11      

# pvmove -n HDD/MyData /dev/sdz1:11128-11143 /dev/sdx1:10650-11174
  /dev/sdz1: Moved: 100.00%

# lvs -o lv_name,vg_name,seg_le_ranges HDD/MyData
  LV     VG  LE Ranges                       
  MyData HDD /dev/sdx1:10650-10665
  MyData HDD /dev/sdz2:7450-7457 
  MyData HDD /dev/sdz3:0-11      

# pvmove -n HDD/MyData /dev/sdz2:7450-7457 /dev/sdx1:10666-11174
  /dev/sdz2: Moved: 100.00%

# lvs -o lv_name,vg_name,seg_le_ranges HDD/MyData
  LV     VG  LE Ranges                       
  MyData HDD /dev/sdx1:10650-10673
  MyData HDD /dev/sdz3:0-11      

# pvmove -n HDD/MyData /dev/sdz3:0-11 /dev/sdx1:10674-11174
  /dev/sdz3: Moved: 100.00%

# lvs -o lv_name,vg_name,seg_le_ranges HDD/MyData
  LV     VG  LE Ranges                       
  MyData HDD /dev/sdx1:10650-10685

両方のインスタンスを並列に実行しようとするとpvmove失敗します。

  Skipping locked LV VG/MyData.
  All data on source PV skipped. It contains locked, hidden or non-top level LVs only.
  No data to move for VG.

したがって、順番に行わなければなりません。それ以外の場合は正常に動作します。


まったく異なるアプローチは、lvcreate新しいLVを作成してデータをコピーしてから、コピーが良好ですべてが機能することを確認したら、古いlvremoveLVをコピーすることです。

基本的には昔ながらのオフラインです。欠点(エラーをコピーしたりデータが失われる可能性があります)がありますが、利点もあります。ソースファイルシステムは変更されずに保持されるため、元に戻すことはできますが、元に戻すことはできませpvmoveん(すべてを元の場所に戻す必要はありません)。

関連情報