lvmgroup の縮小 - 後で割り当てられるため、xxxx エクステントにサイズ変更できません

lvmgroup の縮小 - 後で割り当てられるため、xxxx エクステントにサイズ変更できません

私は、lvmgroup を縮小して Centos 6.10 イメージのサイズを縮小するプロセスを実行してきました。現在、次のコマンドを実行できるようになっています。

pvresize -tv --setphysicalvolumesize  1600G /dev/md125p2

そして、次のエラーメッセージが表示されます。

 /dev/md125p2: cannot resize to 409599 extents as later ones are allocated.

エラーを解消するために pvmove コマンドを構築する方法を理解しようとしていますが、その概念がよくわかりません。

このコマンドの出力は次のとおりです pvs -v --segments /dev/md125p

  PV           VG            Fmt  Attr PSize PFree   Start  SSize  LV       Start Type   PE Ranges                 
  /dev/md125p2 vg_centos6svr lvm2 a--u 1.86t 320.11g      0 384000 lv_mysql     0 linear /dev/md125p2:0-383999     
  /dev/md125p2 vg_centos6svr lvm2 a--u 1.86t 320.11g 384000  81947              0 free                             
  /dev/md125p2 vg_centos6svr lvm2 a--u 1.86t 320.11g 465947  12800 lv_root      0 linear /dev/md125p2:465947-478746
  /dev/md125p2 vg_centos6svr lvm2 a--u 1.86t 320.11g 478747   1998 lv_swap      0 linear /dev/md125p2:478747-480744
  /dev/md125p2 vg_centos6svr lvm2 a--u 1.86t 320.11g 480745   7500 lv_home      0 linear /dev/md125p2:480745-488244

移動コマンドは次のようになるはずです:

pvmove --alloc anywhere /dev/md125p2 vg_centos6svr:yyyy-end

yyyy-end の部分をどのように計算すればよいのかよくわかりません。384000 から始まる 81947 (ブロック?) を移動するという意味だとは思いますが、「yyyy」と「end」とは何でしょうか?

答え1

つまり、すべてがオンになっている/dev/md125p2ので、この PV のサイズを縮小したいということです。

からの出力を見ると、 の後ろと の前にpvs -v --segments /dev/md125p非常に大きな空き領域 ( SSize==81947)があることがわかります。これは、 を収容するのに十分な大きさです。lv_mysqllv_rootlv_root全て物理レイアウトでその後に続く LV です。

したがって、私が提案する最初の数字のセットは次のとおりです。

***# pvmove --alloc anywhere /dev/md125p2:480745-488244 /dev/md125p2:384000+7499

つまり、 全体を のlv_home直後から始まる空き領域に移動しますlv_mysql

次に、再度実行してpvs -v --segments /dev/md125p修正された数値を確認し、残っている空きスペースに次のブロックを移動します。

これにより、PV が効果的にデフラグされます。

pvmoveさて、方法私が使用しているものよりも多くのオプションがあります (範囲ではなく PV を指定するなど) が、ブロックを明示的に指定するだけで十分です。そのため、すべてのソースとターゲットは または の形式になってい/dev/<dev>:<Start>-<End>ます/dev/<dev>:<Start>+<SSize-1>

問題は主に「ソース」仕様の範囲が欠落していることにあると思われます。

いくつか例を見ましたが-end、それが何かは分かりません想定機能するが、それは「?"です。そのため、私はそれを避け、明示的なブロック番号を使用します。構文+プラスSSize より 1 小さくする必要があります。

余分な

-name lv_home /dev/md125p2OK、ソース側では、の短縮形として実行できるようです/dev/md125p2:480745-488244。ただし、複数のエクステントに断片化されている場合は、より複雑になることに注意してくださいlh_home(「すべてのフラグメント」を意味するのでしょうか?) - 私はまだ数値アプローチを好むと思います。質問の例に注意してくださいしなかったpvmoveLV 名が含まれているので、あなたが提供したものから何が理解されたかはわかりません...

答え2

PV を縮小するには、希望のサイズより前の空き領域にエクステントを移動する必要があります。この場合、エクステントは 409599 未満です。

まず、バックアップの復元をテストして、必要に応じてデータを回復できることを確認します。

lvremove必要のないボリューム。

pvmoveLV 名でエクステントを指定し、+ 表記を使用してオフセットで宛先を指定できます。宛先を指定する場合、VG ではなく PV である必要があります。

1 つの LV を空き領域の最初のエクステントに移動します。オフセットは、移動するセグメントのサイズです。

pvmove --alloc anywhere  -n lv_swap /dev/md125p2 /dev/md125p2:384000+1998

再度、新しいセグメント レイアウトを取得します。異なる LV と新しい空き領域の開始範囲を使用して、pvs -v --segmentsを繰り返します。pvmove

個人的には、データ VG をオペレーティング システム VG とは別にすることを好みます。ただし、これはあなたのストレージなので、好きなようにレイアウトしてください。

関連情報