邁向 RHCE 之路 (Day20) - 邏輯磁碟管理員 LVM

1、前言

邏輯磁碟管理員 LVM (Logical Volume Manager),簡單來說便是把一堆硬碟結合成為一顆大硬碟讓空間使用更具彈性,整個 LVM 組成的架構圖請參考 RedHat - LVM Administrator Guide




文章目錄

1、前言
2、LVM 實作 (PV、VG、LV)
3、將 LV (mylv1) 由 1 GB 空間擴大為 1.5 GB
4、將 LV (mylv2) 由 1 GB 空間縮小為 512 MB

2、LVM 實作 (PV、VG、LV)

本次實作為將二顆 2 GB 的硬碟 (PV) 結合成為一顆 4 GB 的大硬碟 (VG) 在這大硬碟中切割出二顆 1 GB 的硬碟 (LV),相關資訊如下:
  • PV (Physical Volume): sdb (2 GB)、sdc (2 GB)
  • VG (Volume Group): myvg (4 GB)
  • LV (Logic Volume): mylv1 (1 GB)、mylv2 (1 GB)

請先以「fdisk」指令對 /dev/sdb、/dev/sdc 硬碟進行分割區及格式設定,格式請設定為 「8e(Linux LVM)」:
#fdisk /dev/sdb
  n > p > 1 > enter > enter > t > 8e > w
#fdisk /dev/sdc
  n > p > 1 > enter > enter > t > 8e > w
#cat /proc/partitions | grep -E "sdb|sdc"
    8       16    2097152 sdb
    8       17    2095662 sdb1
    8       32    2097152 sdc
    8       33    2095662 sdc1

確定系統可偵測到 /dev/sdb1、/dev/sdc1 分割區後即著手建立 PV、VG、LV 資訊,建立完成後可使用 「pvs、vgs、lvs」 查看相對應簡單資訊,或者使用 「pvdisplay、vgdisplay、lvdisplay」 查看詳細資訊。
#pvcreate /dev/sd{b,c}1          //建立 PV
   Physical volume "/dev/sdb1" successfully created
   Physical volume "/dev/sdc1" successfully created
#vgcreate myvg /dev/sd{b,c}1     //建立 VG
   Volume group "myvg" successfully created
#lvcreate -L 1G -n mylv1 myvg    //建立 LV
   Logical volume "mylv1" created
#lvcreate -L 1G -n mylv2 myvg    //建立 LV
   Logical volume "mylv2" created
#pvs                                //查看 PV 資訊    
   PV         VG    Fmt  Attr PSize PFree
   /dev/sdb1        lvm2 a-   2.00g 2.00g
   /dev/sdc1        lvm2 a-   2.00g 2.00g
#vgs                                //查看 VG 資訊
   VG       #PV#LV#SN Attr   VSize VFree
   myvg     2   0   0 wz--n- 3.99g 3.99g
#lvs                                //查看 LV 資訊
   LV     VG    Attr   LSize Origin Snap%  Move Log Copy%  Convert
   mylv1  myvg  -wi-a- 1.00g
   mylv2  myvg  -wi-a- 1.00g

接著將建立好的二個 LV 格式化後進行建資料夾及掛載的動作:
#mkfs.ext4 /dev/myvg/mylv1           //格式化 LV
#mkfs.ext4 /dev/myvg/mylv2
#mkdir /mnt/mylv{1,2}                //建立掛載資料夾
#mount /dev/myvg/mylv1 /mnt/mylv1  //掛載 LV
#mount /dev/myvg/mylv2 /mnt/mylv2
#df -h                                //查看檔案系統掛載資訊
  Filesystem                     Size   Used   Avail   Use%   Mounted on
  /dev/mapper/vg_centos6-lv_root 7.5G   2.1G    5.0G    30%   /
  tmpfs                          504M    88K    504M     1%   /dev/shm
  /dev/sda1                      485M    29M    431M     7%   /boot
  /dev/mapper/myvg-mylv1        1008M    34M    924M     4%   /mnt/mylv1
  /dev/mapper/myvg-mylv2        1008M    34M    924M     4%   /mnt/mylv2


3、將 LV (mylv1) 由 1 GB 空間擴大為 1.5 GB

一般來說將 LV 空間擴大比較簡單也才是合理的狀況,當然前提是 VG 還有空間可以撥給 LV 使用,因此只要使用「lvextend、resize2fs」即可達成將 LV 空間線上擴充的目的。
#lvextend -L +512M /dev/myvg/mylv1
   Extending logical volume mylv1 to 1.50 GiB
   Logical volume mylv1 successfully resized
#resize2fs -p /dev/myvg/mylv1
  resize2fs 1.41.12 (17-May-2010)
  Filesystem at /dev/myvg/mylv1 is mounted on /mnt/mylv1; on-line resizing required
  old desc_blocks = 1, new_desc_blocks = 1
  Performing an on-line resize of /dev/myvg/mylv1 to 393216 (4k) blocks.
  The filesystem on /dev/myvg/mylv1 is now 393216 blocks long.
#df -h
  Filesystem                      Size   Used   Avail   Use%   Mounted on
  /dev/mapper/vg_centos6-lv_root  7.5G   2.1G    5.0G    30%   /
  tmpfs                           504M    88K    504M     1%   /dev/shm
  /dev/sda1                       485M    29M    431M     7%   /boot
  /dev/mapper/myvg-mylv1          1.5G    34M    1.4G     3%   /mnt/mylv1
  /dev/mapper/myvg-mylv2         1008M    34M    924M     4%   /mnt/mylv2


4、將 LV (mylv2) 由 1 GB 空間縮小為 512 MB

一般來說將 LV 空間縮小比較複雜並且比較不合理 (資料可能會有遺失的風險!!),而縮小 LV 的空間會還給 VG,必須先把 LV 離線 (umount) 之後透過「resize2fs、lvreduce、mount」才可達成將 LV 空間縮小的目的。
#umount /mnt/mylv2
#e2fsck -f /dev/myvg/mylv2
  e2fsck 1.41.12 (17-May-2010)
  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
  /dev/myvg/mylv2: 11/65536 files (0.0% non-contiguous), 12635/262144 blocks
#resize2fs /dev/myvg/mylv2 512M
  resize2fs 1.41.12 (17-May-2010)
  Resizing the filesystem on /dev/myvg/mylv2 to 131072 (4k) blocks.
  The filesystem on /dev/myvg/mylv2 is now 131072 blocks long.
#lvreduce -L 512M /dev/myvg/mylv2
   WARNING: Reducing active logical volume to 512.00 MiB
   THIS MAY DESTROY YOUR DATA (filesystem etc.)
   Do you really want to reduce mylv2? [y/n]: y
   Reducing logical volume mylv2 to 512.00 MiB
   Logical volume mylv2 successfully resized
#mount /dev/myvg/mylv2 /mnt/mylv2
#df -h
  Filesystem                      Size   Used   Avail   Use%   Mounted on
  /dev/mapper/vg_centos6-lv_root  7.5G   2.1G    5.0G    30%   /
  tmpfs                           504M    88K    504M     1%   /dev/shm
  /dev/sda1                       485M    29M    431M     7%   /boot
  /dev/mapper/myvg-mylv1          1.5G    34M    1.4G     3%   /mnt/mylv1
  /dev/mapper/myvg-mylv2          504M    33M    446M     7%   /mnt/mylv2

以上都是使用指令進行操作,若是在圖形介面環境中您可以使用指令 「system-config-lvm」 呼叫出 Logical Volume Management 管理介面進行 LVM (PV、VG、LV) 的管理。