Mengubah Ukuran Partisi LVM2

1 Oct 2012

Sudah tahu apa itu Linux Volume Manager version 2 atau biasa disingkat LVM2? Mudahnya sih LVM itu adalah sebuah metode untuk mengelola volume ruang simpan dengan mudah. Ingat yang saya tulis di sini adalah volume ruang simpan, bukan harddisk. Kenapa begitu? Karena sebuah volume LVM2 dapat terdiri dari sebuah partisi atau beberapa partisi atau beberapa partisi yang berada di beberapa harddisk. Oleh karena itu saya menyebutnya sebagai volume ruang simpan.

Hal lain yang memudahkan adalah sebuah volume LVM2 dapat dibagi-bagi lagi menjadi beberapa partisi logikal seperti layaknya kita membuat partisi pada harddisk. Tetapi tentu saja semua partisi logikal tersebut tidak terlihat sendiri-sendiri jika kita buka menggunakan program manajer partisi. Hanya partisi tempat volume LVM2  berada yang dapat terlihat. Kemudian proses pengubahan ukuran partisi-partisi logikal di dalam volume LVM2 juga sangat mudah karena kita tidak perlu pusing memindahkan data-data dari suatu partisi ke tempat lain karena kita akan memperbesar ukuran partisi yang lainnya. Selama masih ada ruang kosong di dalam volume LVM2 tersebut kita dapat memperbesar ukuran partisi logikal yang kita miliki semudah ini (asumsi filesystem adalah EXT4 dan ruang kosong tersisa 90G+):

Berikut adalah langkah-langkah yang saya lakukan untuk menyusutkan ukuran partisi LVM2 saya:

PERHATIAN! JANGAN LUPA UNTUK MEM-BACKUP SELURUH DATA ANDA JIKA INGIN MELAKUKAN HAL BERIKUT INI! BERBAHAYA!

# pvdisplay -C --units M
  PV         VG   Fmt  Attr PSize      PFree    
  /dev/sda3  vg01 lvm2 a--  182531.92M 89724.55M

Perbesar ukuran partisi logikal pada LVM2 satu harddisk:
# lvresize -L +40G vg01/HOME

Perbesar ukuran partisi logikal pada LVM2 dua harddisk. Nantinya ruang tambahan 40G tersebut akan tersebar di harddisk satu (sda) dan dua (sdb):
# lvresize -L +40G vg01/HOME /dev/sda:0-1 /dev/sdb:0-1

Perbesar ukuran filesystem:
# resize2fs -p /dev/vg01/HOME

Selesai.

Lalu bagaimana jika kita ingin mengubah ukuran partisi LVM2 itu sendiri? Meskipun jarang atau tidak pernah dilakukan karena LVM2 sendiri jarang digunakan pada satu buah harddisk dan penggunaan rumahan biasa caranya tetap ada. Hanya saja semua proses pada volume LVM2 harus dilakukan manual karena sampai saat ini belum ada program manajer partisi yang dapat mengelola volume LVM2. Kalau mengelola partisinya sih bisa.

Jadi ceritanya karena suatu hal, bisa jadi karena saya ingin menambahi ukuran partisi primer lainnya atau karena saya pingin (suka-suka saya lah), saya ingin mengurangi ukuran partisi LVM2 saya yang hanya menggunakan 1 buah harddisk. Kira-kira beginilah tampilan aslinya

Struktur partisi awal

Nah saya ingin menambahi ukuran partisi di dalam partisi ekstended saya, caranya bagaimana?

Hal pertama yang harus dilakukan adalah mengurangi ukuran partisi logikal di dalam volume LVM2 tersebut. Akan tetapi karena di dalam partisi logikal tersebut ada filesystem dengan format EXT4, maka kita susutkan ukuran filesystemnya dahulu sebelum menyusutkan ukuran partisi logikal:

INGAT UNTUK UNMOUNT PARTISI SEBELUM MELAKUKAN AKSI

# df -h
Filesystem             Size  Used Avail Use% Mounted on
/dev/mapper/vg01-HOME  151G   56G   88G  39% /mnt/sda3

# umount /mnt/sda3

# e2fsck -vfy /dev/vg01/HOME 
e2fsck 1.42.1 (17-Feb-2012)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information

     243 inodes used (0.00%)
       8 non-contiguous files (3.3%)
       0 non-contiguous directories (0.0%)
         # of inodes with ind/dind/tind blocks: 0/0/0
         Extent depth histogram: 146/85/2
14560990 blocks used (36.92%)
       0 bad blocks
       1 large file

     221 regular files
      13 directories
       0 character device files
       0 block device files
       0 fifos
       0 links
       0 symbolic links (0 fast symbolic links)
       0 sockets
--------
     234 files

# resize2fs -p /dev/vg01/HOME 72G
resize2fs 1.42.1 (17-Feb-2012)
Resizing the filesystem on /dev/vg01/HOME to 18874368 (4k) blocks.
Begin pass 2 (max = 5950340)
Relocating blocks             XXXXXXXXXXXXXXXXXXXXXXXXXXXXX-----------

# e2fsck -f /dev/vg01/HOME

# mount /dev/vg01/HOME

# df -h
Filesystem             Size  Used Avail Use% Mounted on
/dev/mapper/vg01-HOME   72G   55G   15G  80% /mnt/sda3

Sekarang kita bisa mengurangi ukuran partisi logikal /dev/vg01/HOME. Ingat unmount dulu!

# unmount /dev/vg01/HOME
# lvdisplay -C --units M
  LV   VG   Attr   LSize      Origin Snap%  Move Log Copy%  Convert
  HOME vg01 -wi--- 161526.84M                                      

Ada baiknya kita tes dulu konfigurasi penyusutan yang kita inginkan
# lvreduce -t -v -L -64G vg01/HOME
  Test mode: Metadata will NOT be updated and volumes will not be (de)activated.
    Finding volume group vg01
    Test mode: Skipping archiving of volume group.
  Reducing logical volume HOME to 86.43 GiB
    Found volume group "vg01"
    Found volume group "vg01"
    Found volume group "vg01"
    Test mode: Skipping backup of volume group.
  Logical volume HOME successfully resized
    Test mode: Wiping internal cache
    Wiping internal VG cache

Jika sudah yakin, penyusutan bisa kita lakukan
# lvreduce -v -L -64G vg01/HOME
    Finding volume group vg01
    Archiving volume group "vg01" metadata (seqno 31).
  Reducing logical volume HOME to 86.43 GiB
    Found volume group "vg01"
    Found volume group "vg01"
    Found volume group "vg01"
    Creating volume group backup "/etc/lvm/backup/vg01" (seqno 32).
  Logical volume HOME successfully resized

Kita cek kembali kondisi filesystem kita dengan memperbesar ukuran filesystem hingga memenuhi partisi logikalnya
# resize2fs -p /dev/vg01/HOME 
resize2fs 1.42.1 (17-Feb-2012)
Resizing the filesystem on /dev/vg01/HOME to 22658048 (4k) blocks.
Begin pass 1 (max = 116)
Extending the inode table     XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
The filesystem on /dev/vg01/HOME is now 22658048 blocks long.

Kita cek kembali filesystem kita
# e2fsck -vfy /dev/vg01/HOME

Setelah kita mount, akan tampak bahwa ukuran filesystem sudah berkurang
# mount /dev/vg01/HOME /mnt/sda3
# df -B 1M
Filesystem            1M-blocks  Used Available Use% Mounted on
/dev/mapper/vg01-HOME     88370 55676     28273  67% /mnt/sda3

Setelah itu kita cek apakah ruang yang tersisa dari volume LVM2 sudah tersedia. Unmount lagi.

# pvdisplay -C --units M
  PV         VG   Fmt  Attr PSize      PFree    
  /dev/sda3  vg01 lvm2 a--  182531.92M 89724.55M

Kita nonaktifkan dulu volume LVM2 kita, buat jaga2 saja.
# vgchange -a n vg01
  0 logical volume(s) in volume group "vg01" now active

Kita tes dulu konfigurasi penyusutan volume LVM2 yang kita mau. Siapa tahu ukuran yang kita inginkan itu kurang mencukupi untuk ditempati partisi logikalnya

# pvresize -t -v --setphysicalvolumesize 100G /dev/sda3 
  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/sda3: Pretending size is 209715200 not 356513792 sectors.
    Resizing volume "/dev/sda3" to 356513792 sectors.
    Resizing physical volume /dev/sda3 from 0 to 25599 extents.
  /dev/sda3: cannot resize to 25599 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

Ternyata jika kita kurangi ukuran volume menjadi 100G masih kurang, atau ukuran partisi logikal melebihi 100G. Kalau begitu kita tambahi sedikit, mudah2an cukup

# pvresize -t -v --setphysicalvolumesize 102G /dev/sda3 
  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/sda3: Pretending size is 213909504 not 356513792 sectors.
    Resizing volume "/dev/sda3" to 356513792 sectors.
    Resizing physical volume /dev/sda3 from 0 to 26111 extents.
    Updating physical volume "/dev/sda3"
    Test mode: Skipping backup of volume group.
  Physical volume "/dev/sda3" changed
  1 physical volume(s) resized / 0 physical volume(s) not resized
    Test mode: Wiping internal cache
    Wiping internal VG cache

Jika tidak ada masalah lagi, kita dapat menjalankan penyusutan hingga kita memperoleh ukuran volume LVM2 yang kita inginkan

# pvresize -v --setphysicalvolumesize 102G /dev/sda3 
    Using physical volume(s) on command line
    Archiving volume group "vg01" metadata (seqno 32).
    /dev/sda3: Pretending size is 213909504 not 356513792 sectors.
    Resizing volume "/dev/sda3" to 356513792 sectors.
    Resizing physical volume /dev/sda3 from 0 to 26111 extents.
    Updating physical volume "/dev/sda3"
    Creating volume group backup "/etc/lvm/backup/vg01" (seqno 33).
  Physical volume "/dev/sda3" changed
  1 physical volume(s) resized / 0 physical volume(s) not resized

Cek apakah ukuran volume LVM2 sudah sesuai.

# vgscan
  Reading all physical volumes.  This may take a while...
  Found volume group "vg01" using metadata type lvm2

Aktifkan kembali volume LVM2 kita
# vgchange -a y vg01
  1 logical volume(s) in volume group "vg01" now active

# pvdisplay -C --units M
  PV         VG   Fmt  Attr PSize      PFree    
  /dev/sda3  vg01 lvm2 a--  109517.47M 16710.11M

# lvdisplay -C --units M
  LV   VG   Attr   LSize     Origin Snap%  Move Log Copy%  Convert
  HOME vg01 -wi-ao 92807.36M                                      

# df -B 1M
Filesystem            1M-blocks  Used Available Use% Mounted on
/dev/mapper/vg01-HOME     88370 55676     28273  67% /mnt/sda3

Lho kok ruang kosongnya malah ikut berkurang. Bukannya kita ingin menambahi jumlah ruang kosong? Itu karena yang kita ubah adalah ukuran volume yang ditempati oleh partisi logikal. Jika sebelum disusutkan ukuran ruang kosong dalam volume tersebut sekitar 92G-94G, setelah kita susutkan volume LVM2-nya sementara partisi logikalnya tidak ikut berkurang maka ruang kosong dalam volume tersebut akan berkurang. Sisanya kemana? Sisanya tidak digunakan oleh volume LVM2 kita alias benar-benar ruang kosong dalam harddisk tetapi masih di dalam partisi LVM2 kita.

Akan tetapi, meskipun telah kita susutkan, ukuran volume LVM2 akan tetap seperti gambar awal. Mengapa? Karena operasi yang kita jalankan tadi hanya diterapkan di dalam volume LVM2. Jadi jika kita lihat menggunakan program manajer partisi seperti GParted, secara fisik di harddisk posisi titik awal dan akhir dari partisi LVM2 belum berubah. Agar ukuran partisi LVM2 berubah (berkurang), kita harus mengubahnya secara manual menggunakan fdisk.

Catat dahulu struktur/layout partisi kita utamanya partisi LVM2 kita

# fdisk /dev/sda

Command (m for help): p

Disk /dev/sda: 500.1 GB, 500107862016 bytes
255 heads, 63 sectors/track, 60801 cylinders, total 976773168 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x1707a8a5

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1            4096    33050623    16523264   83  Linux
/dev/sda2   *    33054720    90152959    28549120    7  HPFS/NTFS/exFAT
/dev/sda3        90155008   467642367   188743680   8e  Linux LVM
/dev/sda4       467642368   976773119   254565376    5  Extended
/dev/sda5       467644416   972208127   252281856   83  Linux
/dev/sda6       972210176   976773119     2281472   82  Linux swap / Solaris

Setelah itu hapus partisi tersebut dan buat kembali sekaligus kita kurangi ukuran partisi LVM2-nya

Command (m for help): d
Partition number (1-6): 3

Command (m for help): n
Partition type:
   p   primary (2 primary, 1 extended, 1 free)
   l   logical (numbered from 5)
Select (default p): 
Using default response p
Selected partition 3
First sector (2048-976773167, default 2048): 90155008
Last sector, +sectors or +size{K,M,G} (90155008-467642367, default 467642367): +120G    

Command (m for help): t
Partition number (1-6): 3
Hex code (type L to list codes): 8e
Changed system type of partition 3 to 8e (Linux LVM)

Cek kembali, jika sudah sesuai dengan keinginan kita (bandingkan ukurannya), tuliskan tabel partisi yang baru tersebut ke MBR

Command (m for help): p

Disk /dev/sda: 500.1 GB, 500107862016 bytes
255 heads, 63 sectors/track, 60801 cylinders, total 976773168 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x1707a8a5

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1            4096    33050623    16523264   83  Linux
/dev/sda2   *    33054720    90152959    28549120    7  HPFS/NTFS/exFAT
/dev/sda3        90155008   341813247   125829120   8e  Linux LVM
/dev/sda4       467642368   976773119   254565376    5  Extended
/dev/sda5       467644416   972208127   252281856   83  Linux
/dev/sda6       972210176   976773119     2281472   82  Linux swap / Solaris

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.

Untuk mengkonfirmasi secara visual kita lihat kembali di GParted.

Ruang kosong hasil penyusutan partisi LVM2

Bagaimana? Mudah bukan?