lvmLogical Volume Management (LVM) merupakan dynamic partition yang dapat memudahkan seorang Administrator untuk melakukan management disk space. Prosesnya adalah dengan melakukan penggabungan beberapa media penyimpanan fisik (physical disk) atau storage disk dalam suatu volume group sehingga dari volume group tersebut dapat dibagi atau di partisi kembali menjadi satu atau beberapa logical volume sesuai dengan yang dibutuhkan. Seperti halnya melakukan proses partisi suatu disk fisik, hanya saja dengan menggunakan salah satu fitur LVM yaitu dapat memudahkan proses penambahan space (extend), pengurangan space (reduce) dan penyesuaian space (resize) suatu file sistem dalam LVM storage, baik Physical Volume (PV), Volume Group (VG) atau Logical Volume (LV).
Artikel ini merupakan dokumentasi hasil penerapan LVM pada mesin komputer dengan spesifikasi Sistem Operasi GNU/Linux CentOS 6.7 x86_64 dan dengan menggunakan 1x 500GB Hardisk Drive (HDD) termasuk dengan list partisinya sebagai berikut.

[root@server ~]# fdisk -l|grep /dev
Disk /dev/sda: 500.1 GB, 500107862016 bytes
/dev/sda1   *           1          83      520548   83  Linux
/dev/sda2              84        5100    31466624   83  Linux
/dev/sda3            5101       77867   456394624    5  Extended
/dev/sda5            5101       21819   104861540   83  Linux
/dev/sda6           21820       38538   104861540   83  Linux
/dev/sda7           38539       55257   104861540   83  Linux
/dev/sda8           55258       71976   104861540   83  Linux
/dev/sda9           71977       77867    36948324   82  Linux swap / Solaris

Partisi sda5, sda6, sda7 dan sda8 tersebut akan digunakan sebagai partisi LVM storage dengan kondisi hasilnya berupa logical volume yang akan di mount terhadap moint point /backup. Pada artikel ini tidak didokumentasikan proses pembuatan partisi Linux seperti diatas, Penulis beranggapan bahwa proses partisi sudah dapat diproses dan disiapkan secara mandiri, baik menggunakan fdisk, parted atau partition tools lainnya.

Cek Paket LVM2

Secara default sudah terinstall dengan CentOS 6.7 minimal namun apabila belum maka bisa dicoba install menggunakan perintah yum sebagai berikut.

[root@server ~]# yum -y install lvm2
[root@server ~]# rpm -qa|grep lvm
lvm2-2.02.118-3.el6_7.4.x86_64
lvm2-libs-2.02.118-3.el6_7.4.x86_64

Kondisi File Sistem Disk

[root@server ~]# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda2        30G  1.3G   27G   5% /
tmpfs           3.8G     0  3.8G   0% /dev/shm
/dev/sda1       485M   84M  376M  19% /boot

Dapat diketahui bahwa /backup masih menggunakan atau tergabung dengan partisi sda2. Sesuai dengan kondisi bahwa akan diterapkan LVM storage dengan logical volume yang akan termount terhadap mount point /backup.

Create LVM Partition

Proses create partisi LVM menggunakan perintah fdisk sebegai berikut.

[root@server ~]# fdisk /dev/sda

Setelahnya akan dihadapkan kedalam mode fdisk sebagai berikut.

WARNING: DOS-compatible mode is deprecated. It's strongly recommended to
         switch off the mode (command 'c') and change display units to
         sectors (command 'u').

Command (m for help):

Cek partisi label LVM terlebih dahulu melalui list yang tersedia sebagai berikut dengan opsi menu l.

Command (m for help): l

 0  Empty           24  NEC DOS         81  Minix / old Lin bf  Solaris
 1  FAT12           39  Plan 9          82  Linux swap / So c1  DRDOS/sec (FAT-
 2  XENIX root      3c  PartitionMagic  83  Linux           c4  DRDOS/sec (FAT-
 3  XENIX usr       40  Venix 80286     84  OS/2 hidden C:  c6  DRDOS/sec (FAT-
 4  FAT16 <32M      41  PPC PReP Boot   85  Linux extended  c7  Syrinx
 5  Extended        42  SFS             86  NTFS volume set da  Non-FS data
 6  FAT16           4d  QNX4.x          87  NTFS volume set db  CP/M / CTOS / .
 7  HPFS/NTFS       4e  QNX4.x 2nd part 88  Linux plaintext de  Dell Utility
 8  AIX             4f  QNX4.x 3rd part 8e  Linux LVM       df  BootIt
 9  AIX bootable    50  OnTrack DM      93  Amoeba          e1  DOS access
 a  OS/2 Boot Manag 51  OnTrack DM6 Aux 94  Amoeba BBT      e3  DOS R/O
 b  W95 FAT32       52  CP/M            9f  BSD/OS          e4  SpeedStor
 c  W95 FAT32 (LBA) 53  OnTrack DM6 Aux a0  IBM Thinkpad hi eb  BeOS fs
 e  W95 FAT16 (LBA) 54  OnTrackDM6      a5  FreeBSD         ee  GPT
 f  W95 Ext'd (LBA) 55  EZ-Drive        a6  OpenBSD         ef  EFI (FAT-12/16/
10  OPUS            56  Golden Bow      a7  NeXTSTEP        f0  Linux/PA-RISC b
11  Hidden FAT12    5c  Priam Edisk     a8  Darwin UFS      f1  SpeedStor
12  Compaq diagnost 61  SpeedStor       a9  NetBSD          f4  SpeedStor
14  Hidden FAT16 <3 63  GNU HURD or Sys ab  Darwin boot     f2  DOS secondary
16  Hidden FAT16    64  Novell Netware  af  HFS / HFS+      fb  VMware VMFS
17  Hidden HPFS/NTF 65  Novell Netware  b7  BSDI fs         fc  VMware VMKCORE
18  AST SmartSleep  70  DiskSecure Mult b8  BSDI swap       fd  Linux raid auto
1b  Hidden W95 FAT3 75  PC/IX           bb  Boot Wizard hid fe  LANstep
1c  Hidden W95 FAT3 80  Old Minix       be  Solaris boot    ff  BBT
1e  Hidden W95 FAT1

Dapat diketahui bahwa label LVM Partition menggunakan hexacode 8e. Selanjutnya sesuaikan dengan mengganti label partisi default sda5, sda6, sda7, sda8 menjadi label LVM Partition dengan menggunakan hexacode 8e melalui opsi menu t.

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

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

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

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

Cek dengan menampilkan atau print hasil penyesuaian LVM Partition tersebut menggunakan opsi menu p kemudian save write dengan menggunakan opsi menu w. Perlu dicatat proses tersebut dapat menhapus data partisi terkait.

Command (m for help): p

Disk /dev/sda: 500.1 GB, 500107862016 bytes
224 heads, 56 sectors/track, 77867 cylinders
Units = cylinders of 12544 * 512 = 6422528 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x000e94c0

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1          83      520548   83  Linux
/dev/sda2              84        5100    31466624   83  Linux
/dev/sda3            5101       77867   456394624    5  Extended
/dev/sda5            5101       21819   104861540   8e  Linux LVM
/dev/sda6           21820       38538   104861540   8e  Linux LVM
/dev/sda7           38539       55257   104861540   8e  Linux LVM
/dev/sda8           55258       71976   104861540   8e  Linux LVM
/dev/sda9           71977       77867    36948324   82  Linux swap / Solaris

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

Calling ioctl() to re-read partition table.

WARNING: Re-reading the partition table failed with error 16: Device or resource busy.
The kernel still uses the old table. The new table will be used at
the next reboot or after you run partprobe(8) or kpartx(8)
Syncing disks.

Create Physical Volume (PV)

Tahapan awal dalam penerapan LVM storage adalah mempersiapkan physical volume terlebih dahulu. Dalam hal ini partisi sda5, sda6, sda7 dan sda8 akan dibuat sebagai physical volume.

[root@server ~] pvcreate /dev/sda5 /dev/sda6 /dev/sda7 /dev/sda8
  Physical volume "/dev/sda5" successfully created
  Physical volume "/dev/sda6" successfully created
  Physical volume "/dev/sda7" successfully created
  Physical volume "/dev/sda8" successfully created

Cek Physical Volume

[root@server ~]# pvs
  PV         VG   Fmt  Attr PSize   PFree
  /dev/sda5       lvm2 ---  100.00g 100.00g
  /dev/sda6       lvm2 ---  100.00g 100.00g
  /dev/sda7       lvm2 ---  100.00g 100.00g
  /dev/sda8       lvm2 ---  100.00g 100.00g

Create Volume Group (VG)

Setelah physical volume siap maka selanjutnya menyiapkan volume group, dalam kondisi ini akan dibuat 1 volume group dengan nama chrootid_vg0 menggunakan 2 physical volume saja dari 4 physical volume yang tersedia mengingat 2 physical volume yang tersisa akan di gunakan penerapan resize lvm storage yang akan disampaikan dalam tahapan lanjut.

[root@server ~]# vgcreate -s 16M chrootid_vg0 /dev/sda5 /dev/sda6
  Volume group "chrootid_vg0" successfully created

Cek Volume Group

[root@server ~]# vgs
  VG           #PV #LV #SN Attr   VSize   VFree
  chrootid_vg0   2   0   0 wz--n- 200.00g 200.00g

Cek Detail Volume Group

[root@server ~]# vgdisplay
  --- Volume group ---
  VG Name               chrootid_vg0
  System ID
  Format                lvm2
  Metadata Areas        2
  Metadata Sequence No  1
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                0
  Open LV               0
  Max PV                0
  Cur PV                2
  Act PV                2
  VG Size               200.00 GiB
  PE Size               16.00 MiB
  Total PE              12800
  Alloc PE / Size       0 / 0
  Free  PE / Size       12800 / 200.00 GiB
  VG UUID               ZNDS2Y-EuRv-I1E2-7xK8-cG4y-jQOA-B7p4LY

VG Name: Nama suatu volume group
VG Access: Akses terhadap suatu volume group
VG Status: Status suatu volume group
VG Size: Besar ukuran suatu volue group
PE Size: Besar ukuran suatu Physical extend
Total PE: Jumlah PE
Alloc PE / Size: Total PE serta ukurannya yang telah dialokasikan
Free PE / Size: Total PE serta ukurannya yang masih tersedia di dalam suatu volume group
Perlu diketahui bahwa PE atau Physical Extend merupakan satuan MB yang menjadi acuan atau tolak ukur dalam menentukan size suatu volume. Misal satu PE Size atau ukurannya adalah sebesar 16MB. Jika ingin menambahkan (extend) size atau ukuran suatu volume sebesar 1GB = 1x1024MB maka memerlukan 1024/16 = 64PE dan untuk contoh lain apabila memerlukan volume sebesar 200GB = 200x1024MB = 204800MB maka memerlukan 204800/16 = 12800PE hasilnya sama seperti VG Size dan Total PE atas VG Name chrootid_vg0 diatas.

Create Logical Volume

Dalam pembuatan suatu logical volume bisa berdasarkan PE atau size dari kondisi Volume Group yang diketahui dalam mementukan besar kapasitas Logical Volumenya sesuai dengan yang dikehendaki.

Dalam kondisi artikel ini akan di dokumentasikan create 1x Logical Volume (LV) sebesar 200GB berdasarkan Physical Extend atau PE dengan kalkulasinya sebagai berikut.

(TotalPE / nLV) x PEsize = Extended Size (MB)
12800PE/1LV = 12800PE x 16MB = 204800MB = 200GB

Apabila keseluruhan VG Size ingin dibuat dan dibagi sebanyak n Logical Volume maka dapat menggunakan formula sederhana tersebut diatas. Kemudian untuk perintahnya berdasarkan PE adalah sebagai berikut.

[root@server ~]# lvcreate -l 12800 -n data0 chrootid_vg0
  Logical volume "data0" created.

Dimana opsi -l untuk alokasi PE untuk menetukan besar suatu volume dan opsi -n untuk drive letter suatu volume yang dicreate dari Volume Group chrootid_vg0. Kemudian untuk create Logical Volume beradasarkan size dapat mengganti opsi -l menjadi -L dan sesuiakan nilainya dengan yang dikehendaki, misal 200GB adalah sebagai berikut.

[root@server ~]# lvcreate -L 200G -n data0 chrootid_vg0
  Logical volume "data0" created.

Delete Logical Volume

[root@server ~]# lvremove /dev/chrootid_vg0/data0
Do you really want to remove active logical volume data0? [y/n]: y
  Logical volume "data0" successfully removed

Cek Logical Volume

[root@server ~]# lvs
  LV    VG           Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  data0 chrootid_vg0 -wi-a----- 200.00g

Cek Detail Logical Volume

[root@server ~]# lvdisplay
  --- Logical volume ---
  LV Path                /dev/chrootid_vg0/data0
  LV Name                data0
  VG Name                chrootid_vg0
  LV UUID                k7MQlR-dw8r-S3k7-AHqt-b9Sz-H6UM-1G9EeV
  LV Write Access        read/write
  LV Creation host, time server.chrootid.com, 2016-04-11 10:59:51 +0700
  LV Status              available
  # open                 0
  LV Size                200.00 GiB
  Current LE             12800
  Segments               2
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:0
[root@server ~]# lvs -v
    Using logical volume(s) on command line.
    Finding all volume groups.
  LV    VG           #Seg Attr       LSize   Maj Min KMaj KMin Pool Origin Data%  Meta%  Move Cpy%Sync Log Convert LV UUID                                LProfile
  data0 chrootid_vg0    2 -wi-a----- 200.00g  -1  -1  253    0

Format Logical Volume

Proses formating suatu disk atau partisi tentu harus diketahui terlebih dahulu lokasi disk partisinya tersebut termasuk dengan Logical Volume. Untuk Logical Volume yang sebelumnya telah dicreate dengan nama data0 dari Volume Group chrootid_vg0 adalah berada di dalam lokasi /dev/chrootid_vg0/data0 berdasarkan hasil pengecekan lvs atau lvdisplay. Setelah diketahui maka dapat diproses format dengan menggunakan mkfs.ext4 untuk label /backup karena akan dikondisikan mount pointnya terhadap direktori tersebut.

[root@server ~]# mkfs.ext4 -L /backup /dev/chrootid_vg0/data0
mke2fs 1.41.12 (17-May-2010)
Filesystem label=/backup
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
13107200 inodes, 52428800 blocks
2621440 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=4294967296
1600 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
        4096000, 7962624, 11239424, 20480000, 23887872

Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done

This filesystem will be automatically checked every 29 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.

Mounting Logical Volume

[root@server ~]# mkdir /backup
[root@server ~]# mount -l /dev/chrootid_vg0/data0 /backup/

Kondisi file sistem setelah logical volume termount terhadap mount point /backup adalah sebagai berikut.

[root@server ~]# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda2              30G  1.3G   27G   5% /
tmpfs                 3.8G     0  3.8G   0% /dev/shm
/dev/sda1             485M   84M  376M  19% /boot
/dev/mapper/chrootid_vg0-data0
                      197G   60M  187G   1% /backup

Setiap Logical Volume juga memiliki UUID dan bisa ditambahkan label. UUI dan label tersebut bisa digunakan untuk proses auto mount melalui /etc/fstab mengingat apabila mengacu pada manual mount seperti contoh diatas perlu di mount kembali apabila sistem mengalami reboot.
Pertama cek label serta UUID atas Logical Volume terlebih dahulu.

[root@server ~]# blkid |grep vg
/dev/mapper/chrootid_vg0-data0: LABEL="/backup" UUID="ea6fb1cc-0bc4-4282-8d2e-20e66ecae992" TYPE="ext4"

Setelah diketahui label serta UUID nya maka bisa langsung ditambahkan baris sebagai berikut melalui /etc/fstab
.
Berdasarkan Label

LABEL="/backup" /backup         ext4    defaults 1 2

Contoh konfig file /etc/fstab nya adalah sebagai berikut.

#
# /etc/fstab
# Created by anaconda on Mon Apr 11 09:27:49 2016
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
LABEL="/" /                       ext4    defaults        1 1
LABEL="/boot" /boot                   ext4    defaults        1 2
LABEL="/backup" /backup         ext4    defaults 1 2
UUID=2d5d081e-723c-4be5-b323-1df8e381e135 swap                    swap    defaults        0 0
tmpfs                   /dev/shm                tmpfs   defaults        0 0
devpts                  /dev/pts                devpts  gid=5,mode=620  0 0
sysfs                   /sys                    sysfs   defaults        0 0
proc                    /proc                   proc    defaults        0 0

Berdasarkan UUID

UUID="ea6fb1cc-0bc4-4282-8d2e-20e66ecae992" /backup         ext4    defaults 1 2

Contoh konfig file /etc/fstab nya adalah sebagai berikut.

#
# /etc/fstab
# Created by anaconda on Mon Apr 11 09:27:49 2016
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
LABEL="/" /                       ext4    defaults        1 1
LABEL="/boot" /boot                   ext4    defaults        1 2
UUID="ea6fb1cc-0bc4-4282-8d2e-20e66ecae992" /backup         ext4    defaults 1 2
UUID=2d5d081e-723c-4be5-b323-1df8e381e135 swap                    swap    defaults        0 0
tmpfs                   /dev/shm                tmpfs   defaults        0 0
devpts                  /dev/pts                devpts  gid=5,mode=620  0 0
sysfs                   /sys                    sysfs   defaults        0 0
proc                    /proc                   proc    defaults        0 0

Silahkan lakukan percobaan reboot sistem kemudian cek menggunakan perintah df -h dan pastikan bahwa partisi logical volume yang telah tercreate dan termount terhadap mount point tujuan atau /backup yang telah ditentukan sudah termount dengan baik.