
[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
太陽光:
[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
そのため、65GBの空き容量があるVGがあります。ただし、そのボリュームグループを約50GB縮小したい場合:
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.
尋ねる:vg_rootの不要な部分を削除するためにどのようにデフラグすることができますか?
ps:VGのサイズを調整するにはPVだけを調整すればよいことがわかりました。それとも、VGのサイズを変更するためのより良いコマンドがあります(たとえば、1つのPVに複数のVGを配置する場合はどうすればよいですか?...)。
答え1
以下は、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 のサイズを最大使用領域に調整します。残りは未割り当て領域に保存されます。
答え2
pvmove
以下を使用して、これらの範囲をデバイスまたは他のデバイスの先頭に移動できます。
sudo pvmove --alloc anywhere /dev/device:60000-76182
その後、pvmove
範囲を移動する位置を選択するか、範囲を移動する位置を指定できます。
pvs -v --segments /dev/device
現在割り当てられている範囲を表示します。
答え3
以前の回答はこの問題を解決するのに役立ちましたが、自動化する必要があるため作成しました。太陽電池収縮
# ./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を呼び出します。
答え4
私はこの方法を使用していますが、それが最善かどうかはわかりませんが、私には効果があります
注意を払ういいえシステム管理者
問題を引き起こす違いを計算します。
324%4 = 0問題なし
しかし、
324%32 = 10.125
それは問題だからそうではありません。
私はこれを「間違いを得る」と思います。
lvmdiskscan
関連パーティションのリスト
それから
pvresize /dev/*** --setphysicalvolumesize ***M
動作するには4Mを追加する必要がありましたが、以前のPEサイズに関連しているようです。
ついに
vgchange -s 32M **