Bagaimana cara mengurangi ukuran Volume Group di 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

Jadi saya punya VG dengan ruang kosong 65 GByte. Tetapi ketika saya ingin mengecilkan Volume Group ini sekitar ~ 50 GByte:

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

Jadi pesan kesalahannya adalah:

cannot resize to 63231 extents as later ones are allocated.

T: Bagaimana saya bisa mendefrag vg_root sehingga saya dapat menghapus bagian yang tidak dibutuhkan itu?

ps: Saya sudah mengetahui bahwa saya hanya perlu mengubah ukuran PV untuk mengubah ukuran VG, atau adakah perintah yang lebih baik untuk melakukan perubahan ukuran VG (mis .: apa yang dapat saya lakukan jika saya ingin beberapa VG menggunakan PV? ... )?

peter gasko
sumber

Jawaban:

31

Anda dapat menggunakan pvmoveuntuk memindahkan ekstensi itu ke awal perangkat atau perangkat lain:

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

Lalu pvmovepilih ke mana harus dipindahkan, atau Anda dapat menentukan ke mana harus memindahkannya.

Lihat pvs -v --segments /dev/deviceuntuk melihat luasan apa yang saat ini dialokasikan.

Stéphane Chazelas
sumber
1
Bagi saya masalah adalah memindahkan PE ke tempat lain. Harus menentukan tujuan misalnya:sudo pvmove --alloc anywhere /dev/sdX2:60000-76182 /dev/sdX2:3000-19182
akostadinov
29

Ini adalah langkah-langkah yang diperlukan untuk mengubah ukuran partisi LVM atau LVM2:

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

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

Perintah terakhir pvresize,, dapat menghasilkan kesalahan

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

Anda harus mengatur ulang ruang yang tidak terisi di akhir LVM. Itu berarti setelah partisi root dan swap_1. Anda dapat melihat pengaturan ruang saat ini dengan perintah ini

pvs -v --segments /dev/sda5

pvs akan menampilkan output seperti ini

/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

Sekarang gunakan pvmoveuntuk menghapus fragmentasi eksternal:

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

Sekarang mari kita lihat apakah perpindahan volume swap berhasil.

pvs -v --segments /dev/sda5

harus menunjukkan volume pesanan baru:

/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

Setelah itu, gunakan GParted dan ubah ukuran LVM ke area maksimum yang digunakan. Sisanya akan berada di ruang yang tidak terisi.

Ujjal Roy
sumber
Ini adalah jawaban yang cukup komprehensif - akan sangat membantu jika itu termasuk langkah 0 untuk melakukan perubahan ukuran filesystem, misalnya resize2fs. Saya tidak berpikir itu perlu secara rinci, tetapi hanya memiliki sesuatu di sana sebagai dorongan untuk pemirsa di masa depan akan membantu
Justin
Saya memiliki ruang kosong di awal, memanggil pvmove tanpa tujuan tidak memindahkannya ke awal. Yang berhasil adalah pvmove --alloc anywhere /dev/sda5:yyyy-end 0-newend"newend" yang dihitung sebagai akhir - yyyy. Namun saya tidak yakin apakah ini berfungsi jika ruang kosong di awal lebih kecil dari kisaran yang akan dipindahkan. Juga saya pikir ada kesalahan ketik pada output pvs Anda, saya pikir Anda maksudkan /dev/sda5:0-xxxbukan /dev/sda:0-xxx.
pcworld
2
@Justin --resizefsParameter lvresizesudah mengatur ukuran sistem file yang mendasarinya.
pcworld
@pcworld baru saja membaca halaman manual dan sepertinya Anda benar
Justin
Jawaban luar biasa - tetapi bisakah Anda menguraikan langkah terakhir? Saya menganggap "mengubah ukuran LVM" berarti "mengubah ukuran volume fisik?" Apakah ada cara untuk melakukan ini tanpa GParted, pada baris perintah, untuk sistem yang tidak memiliki GUI?
Kevin Keane
1

Posting lama ini mencakup jenis penyusutan sehingga Anda dapat menggunakan ruang baru untuk hal lain. Anda harus mengubah ukurannya menjadi data namun sebelumnya. Ini harus mencakup itu dan kesalahan lain yang Anda dapatkan juga. Karena sudah lebih tua, baca dulu:

DigitalTidBits
sumber
0

saya menggunakan metode ini, tidak yakin apakah itu yang terbaik tetapi bekerja untuk saya

gunakan dengan hati-hati dan bukan SysAdmin

menghitung perbedaan yang menyebabkan masalah

324% 4 = 0 tidak ada masalah

tapi

324% 32 = 10.125

itulah masalahnya sehingga tidak cocok

saya pikir itu disebut "dapatkan bilangan real"

lvmdiskscan

untuk daftar partisi yang terlibat

kemudian

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

saya harus menambahkan 4M ekstra untuk bekerja, saya pikir ini terkait dengan ukuran PE lama

akhirnya

vgchange -s 32M **
Mohamed Abo Badawy
sumber
0

Jawaban sebelumnya membantu saya memecahkan masalah ini, tetapi saya perlu mengotomatiskannya dan menulis 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

Ini memanggil pvmove untuk Anda sebanyak yang diperlukan untuk defragment PV, dan kemudian mengubah ukurannya ke ukuran minimum yang mungkin (yang sedikit lebih dari ukuran yang digunakan karena metadata).

pdw
sumber