LVMでボリュームグループのサイズを減らす方法は?


30
[root@localhost ~] vgdisplay
  --- Volume group ---
  VG Name               vg_root
  System ID             
  Format                lvm2
  Metadata Areas        1
  Metadata Sequence No  7
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                3
  Open LV               0
  Max PV                0
  Cur PV                1
  Act PV                1
  VG Size               297,59 GiB
  PE Size               4,00 MiB
  Total PE              76182
  Alloc PE / Size       59392 / 232,00 GiB
  Free  PE / Size       16790 / 65,59 GiB
  VG UUID               XXXXXXXXXX

PV:

[root@localhost ~] pvdisplay

  --- Physical volume ---
  PV Name               /dev/mapper/udisks-luks-uuid-ASDFASDF
  VG Name               vg_root
  PV Size               297,59 GiB / not usable 2,00 MiB
  Allocatable           yes 
  PE Size               4,00 MiB
  Total PE              76182
  Free PE               16790
  Allocated PE          59392
  PV UUID               YYYYYYYYYYY

だから、私は65ギガバイトの空き容量を持つVGを持っています。しかし、このボリュームグループを約50ギガバイトに縮小したい場合:

pvresize -tv --setphysicalvolumesize 247G /dev/mapper/udisks-luks-uuid-ASDFASDF
  Test mode: Metadata will NOT be updated and volumes will not be (de)activated.
    Using physical volume(s) on command line
    Test mode: Skipping archiving of volume group.
    /dev/mapper/udisks-luks-uuid-ASDFASDF: Pretending size is 517996544 not 624087040 sectors.
    Resizing volume "/dev/mapper/udisks-luks-uuid-ASDFASDF" to 624087040 sectors.
    Resizing physical volume /dev/mapper/udisks-luks-uuid-ASDFASDF from 0 to 63231 extents.
  /dev/mapper/udisks-luks-uuid-ASDFASDF: cannot resize to 63231 extents as later ones are allocated.
  0 physical volume(s) resized / 1 physical volume(s) not resized
    Test mode: Wiping internal cache
    Wiping internal VG cache

したがって、エラーメッセージは次のとおりです。

cannot resize to 63231 extents as later ones are allocated.

Q: vg_rootをデフラグして、不要な部分を削除するにはどうすればよいですか?

ps:VGのサイズを変更するためにPVのサイズを変更するだけでよいこと、またはVGのサイズを変更するためのより良いコマンドがあることを既に知りました(例:PVに複数のVGがある場合はどうすればよいですか?... )?

回答:


31

pvmoveこれらのエクステントをデバイスの先頭または別のデバイスに移動するために使用できます。

sudo pvmove --alloc anywhere /dev/device:60000-76182

次にpvmove、エクステントの移動先を選択するか、エクステントの移動先を指定できます。

参照してください。pvs -v --segments /dev/deviceエクステントが現在割り当てられているかを確認します。


1
私にとっての問題は、PEを他の場所に移動することでした。宛先を指定する必要があります。例:sudo pvmove --alloc anywhere /dev/sdX2:60000-76182 /dev/sdX2:3000-19182
-akostadinov

29

LVMまたはLVM2パーティションのサイズを変更するために必要な手順は次のとおりです。

sudo lvresize --verbose --resizefs -L -150G /dev/ubuntu/root

sudo pvresize --setphysicalvolumesize {any size here} /dev/sda5

最後のコマンドでpvresizeエラーが発生する場合があります

/dev/sda5: cannot resize to xxxxx extents as later ones are allocated.

LVMの最後に未割り当てスペースを再配置する必要があります。これは、rootおよびswap_1パーティションの後を意味します。このコマンドで現在のスペースの配置を確認できます

pvs -v --segments /dev/sda5

pvs このような出力が表示されます

/dev/sda5 ubuntu lvm2 a-- 698.04g 150g 0 xxx+1 root 0 linear /dev/sda:0-xxx
/dev/sda5 ubuntu lvm2 a-- 698.04g 150g xxx+1 iii 0 free
/dev/sda5 ubuntu lvm2 a-- 698.04g 150g yyyy jjj swap 0 linear /dev/sda5:yyyy-end

次にpvmove、外部フラグメンテーションを削除するために使用します。

sudo pvmove --alloc anywhere /dev/sda5:yyyy-end

次に、スワップボリュームの移動が成功したかどうかを確認します。

pvs -v --segments /dev/sda5

ボリュームの新しい順序を表示する必要があります。

/dev/sda5 ubuntu lvm2 a-- 698.04g 150g 0 xxx+1 root 0 linear /dev/sda:0-xxx
/dev/sda5 ubuntu lvm2 a-- 698.04g 150g xxx+1 iii swap 0 linear /dev/sda5:xxx+1-yyyy
/dev/sda5 ubuntu lvm2 a-- 698.04g 150g yyyy+1 end 0 free

その後、GPartedを使用し、LVMを最大使用領域にサイズ変更します。残りは未割り当てスペースになります。


これは非常に包括的な回答です。たとえば、resize2fsのようにファイルシステムのサイズ変更を行うためのステップ0が含まれていれば役立ちます。私はそれが詳細である必要があるとは思わないが、将来の視聴者へのナッジとしてそこに何かを持っていることは役に立つだろう
ジャスティン

最初に空きスペースがあったので、宛先なしでpvmoveを呼び出しても、先頭に移動しませんでした。うまくいったのはpvmove --alloc anywhere /dev/sda5:yyyy-end 0-newend、「newend」をend-yyyyとして計算したことです。ただし、最初の空き領域が移動する範囲よりも小さい場合、これが機能するかどうかはわかりません。また、私はあなたのPVS出力にタイプミスがあると思う、私はあなたが意味するものだと思う/dev/sda5:0-xxxの代わりに/dev/sda:0-xxx
pcworld

2
@Justinの--resizefsパラメータはlvresize、基礎となるファイルシステムのサイズ変更をすでに処理しています。
pcworld

@pcworldはmanページを読むだけで、あなたは正しいようです
ジャスティン

優れた答え-しかし、最後のステップについて詳しく説明できますか?「LVMのサイズ変更」は「物理ボリュームのサイズ変更」を意味すると思います。GUIを持たないシステムの場合、コマンドラインでGPartedを使用せずにこれを行う方法はありますか?
ケビンキーン

1

この古い投稿では、この種の縮小について説明しているため、新しいスペースを他の用途に使用できます。ただし、前にデータに合わせてサイズを変更する必要があります。これは、それとあなたが得る他のエラーをカバーするはずです。それが古いので、最初に読んでください:


0

私はこの方法を使用しますが、それが最良かどうかはわかりませんが、私にとってはうまくいきます

SysAdmin ではなく、注意して使用してください

問題の原因となる差を計算する

324%4 = 0問題なし

しかし

324%32 = 10.125

それが問題なので、合わない

「実数を取得」と呼ばれると思います

lvmdiskscan

関連するパーティションをリストする

それから

pvresize /dev/*** --setphysicalvolumesize ***M

私は仕事に余分な4Mを追加する必要があります、私はそれが古いPEサイズに関連していると思います

最後に

vgchange -s 32M **

0

以前の回答はこの問題を解決するのに役立ちましたが、私はそれを自動化する必要があったので、pvshrinkを書きました。

# ./pvshrink /dev/vda2 
Moving 50 blocks from 714 to 664
  /dev/vda2: Moved: 4.00%
  /dev/vda2: Moved: 100.00%
50 of 50 (100.00%) done
Defragmentation complete.
Metadata size: 1048576 b
PE size: 4.0 MiB
Total size 1048576 b + 714 x 4194304 b = 2995781632 b (2.8 GiB)
    Wiping internal VG cache
    Wiping cache of LVM-capable devices
    Archiving volume group "fedora" metadata (seqno 15).
    /dev/vda2: Pretending size is 5851136 not 6287360 sectors.
    Resizing volume "/dev/vda2" to 5851136 sectors.
    Resizing physical volume /dev/vda2 from 0 to 714 extents.
    Updating physical volume "/dev/vda2"
    Creating volume group backup "/etc/lvm/backup/fedora" (seqno 16).
  Physical volume "/dev/vda2" changed
  1 physical volume(s) resized / 0 physical volume(s) not resized

これにより、PVの最適化に必要な回数だけpvmoveが呼び出され、最小サイズ(メタデータにより使用サイズよりもわずかに大きいサイズ)にサイズ変更されます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.