在系統運維和服務器管理過程中,經常遇到服務器磁盤容量不足,需要在線擴容的情況。普通磁盤分區的管理方式在邏輯分區劃好之後就無法改變其大小。而LVM可以實現Linux服務器下面磁盤空間的在線擴容和動態管理,相對於普通的磁盤分區有很大的靈活性。
一、LVM簡介
LVM是 Logical VolumeManager(邏輯卷管理)的簡寫,它是Linux環境下對磁盤分區進行管理的一種機制,它由Heinz Mauelshagen在Linux 2.4內核上實現。LVM將一個或多個硬盤的分區在邏輯上進行組合,做爲一個大的硬盤空間來使用,當硬盤的剩餘空間不夠的時候,可以將其它的硬盤加入到分區當中,這樣可以實現磁盤空間的動態管理。
二、LVM基本術語
物理卷(physical volume,PV):物理卷就是指硬盤分區,也可以是整個硬盤或已創建的RAID ,是LVM的基本存儲設備,與普通物理存儲介質的區別是該設備包含有LVM相關的管理參數。
卷組(volume group,VG):卷組是由一個或多個物理卷所組成的存儲池,在卷組上能創建一個或多個“LVM分區”(邏輯卷)。
邏輯卷(logical volume,LV):LVM的邏輯卷類似於非LVM系統中的硬盤分區,它建立在卷組之上,是一個標準的塊設備,在邏輯卷之上可以建立文件系統。
物理塊(physical extent,PE):物理卷以大小相等的物理塊爲存儲的基本單位,同時也是LVM尋址的最小單元。
邏輯塊(logical extent,LE):邏輯卷以大小相等的邏輯塊爲存儲的基本單位,在同一個卷組中,LE的大小和PE是相等的,並且一一對應。
三、通過LVM分區方式安裝Centos
1.選擇安裝類型,選擇最後一個複選框,即創建自定義佈局。
2.首先劃分/boot分區,/boot分區建議使用物理分區。
3.將剩餘空間劃分爲一個物理卷(PV)。
4.創建一個卷組(VG)。默認卷組名爲VolGroup00,修改卷組名爲vg51cto_lv。
5.在VG上面創建邏輯卷(LV)。邏輯卷默認爲LogVol00,LogVol01……末兩位由00開始依次遞增。
6.LVM分區完成。
7.df -h 查看磁盤空間。
[root@hadoop01 ~]# df -h Filesystem Size Used Avail Use% Mounted on /dev/mapper/vg51cto_lv-LogVol01 9.9G 1.2G 8.2G 13% / tmpfs 495M 0 495M 0% /dev/shm /dev/sda1 194M 29M 155M 16% /boot /dev/mapper/vg51cto_lv-LogVol03 20G 172M 19G 1% /data /dev/mapper/vg51cto_lv-LogVol02 5.0G 138M 4.6G 3% /home /dev/mapper/vg51cto_lv-LogVol04 23G 173M 22G 1% /usr/local
四、LVM管理
第一部分:卷組(volume group ,VG)相關的操作。
1.查看卷組(VG)名,卷組名爲vg51cto_lv。
[root@hadoop01 ~]# vgscan Reading allphysical volumes. This may take awhile... Foundvolume group "vg51cto_lv" using metadata type lvm2
2.查看卷組(VG)包含的PV、LV信息。
[root@hadoop01 ~]# vgdisplay -v vg51cto_lv Usingvolume group(s) on command line Findingvolume group "vg51cto_lv" --- Volumegroup --- VGName vg51cto_lv SystemID Format lvm2 MetadataAreas 1 MetadataSequence No 6 VGAccess read/write VGStatus resizable MAX LV 0 Cur LV 5 OpenLV 5 Max PV 0 Cur PV 1 Act PV 1 VGSize 59.80 GiB PESize 4.00 MiB TotalPE 15309 Alloc PE /Size 15309 / 59.80 GiB Free PE / Size 0 / 0 VGUUID uF4S1y-21AZ-KOfs-rNIF-lFmN-wQ75-2sX7F1 --- Logicalvolume --- LVPath /dev/vg51cto_lv/LogVol04 LVName LogVol04 VGName vg51cto_lv LVUUID rvOZeO-Oz2G-wx7Z-u0b6-CvXj-FKEj-RwCLXO LV WriteAccess read/write LV Creationhost, time hadoop01, 2015-11-05 17:30:51 +0800 LVStatus available # open 1 LVSize 22.80 GiB CurrentLE 5837 Segments 1 Allocation inherit Read aheadsectors auto - currentlyset to 256 Blockdevice 253:2 --- Logicalvolume --- LVPath /dev/vg51cto_lv/LogVol01 LVName LogVol01 VGName vg51cto_lv LVUUID d6YKrd-fWMJ-x61I-cfWG-v2me-Hn8V-xdm96L LV WriteAccess read/write LV Creationhost, time hadoop01, 2015-11-05 17:30:56 +0800 LVStatus available # open 1 LVSize 10.00 GiB CurrentLE 2560 Segments 1 Allocation inherit Read aheadsectors auto - currentlyset to 256 Blockdevice 253:0 --- Logicalvolume --- LVPath /dev/vg51cto_lv/LogVol00 LVName LogVol00 VGName vg51cto_lv LVUUID hSyH2r-mvMV-th7q-geKg-sVpm-O1zJ-D6DwT8 LV WriteAccess read/write LV Creationhost, time hadoop01, 2015-11-05 17:30:58 +0800 LVStatus available # open 1 LVSize 2.00 GiB CurrentLE 512 Segments 1 Allocation inherit Read aheadsectors auto - currentlyset to 256 Blockdevice 253:1 --- Logicalvolume --- LVPath /dev/vg51cto_lv/LogVol03 LVName LogVol03 VGName vg51cto_lv LVUUID gKHLfz-O5Lm-TGMq-2LcF-xcH1-ASea-QCVVNc LV WriteAccess read/write LV Creationhost, time hadoop01, 2015-11-05 17:30:58 +0800 LVStatus available # open 1 LVSize 20.00 GiB CurrentLE 5120 Segments 1 Allocation inherit Read aheadsectors auto - currentlyset to 256 Blockdevice 253:3 --- Logicalvolume --- LVPath /dev/vg51cto_lv/LogVol02 LVName LogVol02 VGName vg51cto_lv LVUUID lkqKmO-Dt0u-3CnB-UqeD-d6gc-2rmP-gWtKVp LV WriteAccess read/write LV Creationhost, time hadoop01, 2015-11-05 17:31:00 +0800 LVStatus available # open 1 LVSize 5.00 GiB CurrentLE 1280 Segments 1 Allocation inherit Read aheadsectors auto - currentlyset to 256 Blockdevice 253:4 ---Physical volumes --- PV Name /dev/sda2 PVUUID pKC6SA-fkfe-OAl2-scVr-tq0h-EAXD-AWpwgX PVStatus allocatable Total PE /Free PE 15309 / 0
3.修改卷組名,由vg51cto_lv修改成vg51cto。
1)修改卷組名的命令爲vgrename,語法如下:
vgrename OldVolumeGroupNameNew VolumeGroupName
[root@hadoop01 ~]# vgrename vg51cto_lv vg51cto Volumegroup "vg51cto_lv" successfully renamed to "vg51cto"
2)修改/etc/fstab配置文件,把vg51cto_lv修改成vg51cto。
[root@hadoop01 ~]# vim /etc/fstab # # /etc/fstab # Created by anaconda on Thu Nov 5 17:33:46 2015 # # Accessible filesystems, by reference, aremaintained under '/dev/disk' # See man pages fstab(5), findfs(8), mount(8)and/or blkid(8) for more info # /dev/mapper/vg51cto-LogVol01 / ext4 defaults 1 1 UUID=9c02e519-3b85-4918-b9fd-395535cab496/boot ext4 defaults 1 2 /dev/mapper/vg51cto-LogVol03 /data ext4 defaults 1 2 /dev/mapper/vg51cto-LogVol02 /home ext4 defaults 1 2 /dev/mapper/vg51cto-LogVol04 /usr/local ext4 defaults 1 2 /dev/mapper/vg51cto-LogVol00 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
3)修改grub.conf配置文件,把vg51cto_lv修改成vg51cto。
[root@hadoop01 ~]# vim /etc/grub.conf # grub.conf generated by anaconda # # Note that you do not have to rerun grub aftermaking changes to this file # NOTICE: You have a /boot partition. Thismeans that # all kernel and initrd paths are relative to /boot/, eg. # root (hd0,0) # kernel /vmlinuz-version ro root=/dev/mapper/vg51cto_lv-LogVol01 # initrd /initrd-[generic-]version.img #boot=/dev/sda default=0 timeout=5 splashp_w_picpath=(hd0,0)/grub/splash.xpm.gz hiddenmenu title CentOS (2.6.32-431.el6.x86_64) root(hd0,0) kernel/vmlinuz-2.6.32-431.el6.x86_64 ro root=/dev/mapper/vg51cto-LogVol01 rd_NO_LUKSrd_LVM_LV=vg51cto/LogVol01 rd_LVM_LV=vg51cto/LogVol00 rd_NO_MD crashkernel=autoLANG=zh_CN.UTF-8 KEYBOARDTYPE=pcKEYTABLE=us rd_NO_DM rhgb quiet initrd/initramfs-2.6.32-431.el6.x86_64.img
4)reboot重啓後用df -h查看。
[root@hadoop01 ~]# df -h Filesystem Size Used Avail Use% Mounted on /dev/mapper/vg51cto-LogVol01 9.9G 1.2G 8.2G 13% / tmpfs 495M 0 495M 0% /dev/shm /dev/sda1 194M 29M 155M 16% /boot /dev/mapper/vg51cto-LogVol03 20G 172M 19G 1% /data /dev/mapper/vg51cto-LogVol02 5.0G 138M 4.6G 3% /home /dev/mapper/vg51cto-LogVol04 23G 173M 22G 1% /usr/local
第二部分:邏輯卷(logical volume,LV)相關的操作。
1.查看邏輯卷(LV)名。
使用LVM安裝系統時,默認的卷組名爲VolGroup00,卷組內的邏輯卷爲LogVol00,LogVol01……末兩位由00開始依次遞增。
[root@hadoop01 ~]# lvscan ACTIVE '/dev/vg51cto/LogVol04' [22.80 GiB]inherit ACTIVE '/dev/vg51cto/LogVol01' [10.00 GiB]inherit ACTIVE '/dev/vg51cto/LogVol00' [2.00 GiB]inherit ACTIVE '/dev/vg51cto/LogVol03' [20.00 GiB]inherit ACTIVE '/dev/vg51cto/LogVol02' [5.00 GiB]inherit
2.查看邏輯卷詳細信息
lvdisplay 命令查看所有邏輯卷的詳細信息
lvdisplay 邏輯卷名稱
[root@hadoop01 ~]# lvdisplay /dev/vg51cto/LogVol00 --- Logicalvolume --- LVPath /dev/vg51cto/LogVol00 LVName LogVol00 VGName vg51cto LVUUID hSyH2r-mvMV-th7q-geKg-sVpm-O1zJ-D6DwT8 LV WriteAccess read/write LV Creationhost, time hadoop01, 2015-11-05 17:30:58 +0800 LVStatus available # open 1 LVSize 2.00 GiB CurrentLE 512 Segments 1 Allocation inherit Read aheadsectors auto - currentlyset to 256 Block device 253:1
3.修改邏輯卷名
1)修改邏輯卷命令爲lvrename,語法如下:
lvrename OldLogicalVolumePath NewLogicalVolumePath [root@hadoop01 ~]# lvrename /dev/vg51cto/LogVol00 /dev/vg51cto/lv_swap Renamed"LogVol00" to "lv_swap" in volume group "vg51cto" [root@hadoop01 ~]# lvrename /dev/vg51cto/LogVol01 /dev/vg51cto/lv_root Renamed"LogVol01" to "lv_root" in volume group "vg51cto" [root@hadoop01 ~]# lvrename /dev/vg51cto/LogVol02 /dev/vg51cto/lv_home Renamed"LogVol02" to "lv_home" in volume group "vg51cto" [root@hadoop01 ~]# lvrename /dev/vg51cto/LogVol03 /dev/vg51cto/lv_data Renamed"LogVol03" to "lv_data" in volume group "vg51cto" [root@hadoop01 ~]# lvrename /dev/vg51cto/LogVol04 /dev/vg51cto/lv_usr Renamed"LogVol04" to "lv_usr" in volume group "vg51cto"
2)修改/etc/fstab配置文件。
[root@hadoop01 ~]# vim /etc/fstab # # /etc/fstab # Created by anaconda on Thu Nov 5 17:33:46 2015 # # Accessible filesystems, by reference, aremaintained under '/dev/disk' # See man pages fstab(5), findfs(8), mount(8)and/or blkid(8) for more info # /dev/mapper/vg51cto-lv_root / ext4 defaults 1 1 UUID=9c02e519-3b85-4918-b9fd-395535cab496/boot ext4 defaults 1 2 /dev/mapper/vg51cto-lv_data /data ext4 defaults 1 2 /dev/mapper/vg51cto-lv_home /home ext4 defaults 1 2 /dev/mapper/vg51cto-lv_usr /usr/local ext4 defaults 1 2 /dev/mapper/vg51cto-lv_swap 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
3)修改grub.conf配置文件。
[root@hadoop01 ~]# vim /etc/grub.conf # grub.conf generated by anaconda # # Note that you do not have to rerun grub aftermaking changes to this file # NOTICE: You have a /boot partition. Thismeans that # all kernel and initrd paths are relative to /boot/, eg. # root (hd0,0) # kernel /vmlinuz-version ro root=/dev/mapper/vg51cto_lv-LogVol01 # initrd /initrd-[generic-]version.img #boot=/dev/sda default=0 timeout=5 splashp_w_picpath=(hd0,0)/grub/splash.xpm.gz hiddenmenu title CentOS (2.6.32-431.el6.x86_64) root(hd0,0) kernel/vmlinuz-2.6.32-431.el6.x86_64 ro root=/dev/mapper/vg51cto-lv_root rd_NO_LUKSrd_LVM_LV=vg51cto/lv_root rd_LVM_LV=vg51cto/lv_swap rd_NO_MD crashkernel=autoLANG=zh_CN.UTF-8 KEYBOARDTYPE=pc KEYTABLE=usrd_NO_DM rhgb quiet initrd/initramfs-2.6.32-431.el6.x86_64.img
第三部分:物理卷(physical volume,PV)相關操作。
1.查看物理卷(PV)名,這裏爲/dev/sda2,linux中SCSI的第1塊硬盤爲/dev/sda,第2塊硬盤爲/dev/sdb,依此類推。
[root@hadoop01 ~]# pvscan PV /dev/sda2 VG vg51cto lvm2 [59.80 GiB / 0 free] Total: 1[59.80 GiB] / in use: 1 [59.80 GiB] / in no VG: 0 [0 ]
2.查看物理卷詳細信息。
[root@hadoop01 ~]# pvdisplay ---Physical volume --- PVName /dev/sda2 VGName vg51cto PVSize 59.80 GiB / not usable 3.00 MiB Allocatable yes (butfull) PESize 4.00 MiB TotalPE 15309 FreePE 0 AllocatedPE 15309 PVUUID pKC6SA-fkfe-OAl2-scVr-tq0h-EAXD-AWpwgX
四、LVM空間管理
1.LVM減少LV空間
舉例:減少/data空間,從20G減少到10G。
1)卸載設備(Unmount thefilesystem)
[root@hadoop01 ~]# umount /data/
2)e2fsck命令檢查文件系統(Checkthe filesystem)
[root@hadoop01 ~]# e2fsck -f/dev/mapper/vg51cto-lv_data e2fsck 1.41.12 (17-May-2010) 第一步: 檢查inode,塊,和大小 第二步: 檢查目錄結構 第3步: 檢查目錄連接性 Pass 4: Checking reference counts 第5步: 檢查簇概要信息 /dev/mapper/vg51cto-lv_data: 11/1310720files (0.0% non-contiguous), 126289/5242880 blocks
3)resize2fs命令調整lv大小,10G表示調整後/data剩餘空間。
[root@hadoop01 ~]# resize2fs/dev/mapper/vg51cto-lv_data 10G resize2fs 1.41.12 (17-May-2010) Resizing the filesystem on/dev/mapper/vg51cto-lv_data to 2621440 (4k) blocks. The filesystem on/dev/mapper/vg51cto-lv_data is now 2621440 blocks long.
4)lvreduce命令減少文件系統大小(Resizethe filesystem),表示將/data的空間減少9G。
[root@hadoop01 ~]# lvreduce -L -9G /dev/mapper/vg51cto-lv_data WARNING: Reducing active logical volume to 11.00 GiB THIS MAY DESTROY YOUR DATA (filesystem etc.) Do you really want to reduce lv_data?[y/n]: y Reducing logical volume lv_data to 11.00 GiB Logical volume lv_data successfully resized
5)vgs命令查看卷組剩餘空間爲9G。
6)mount 文件系統並查看磁盤空間剩餘空間。
2.LVM增加LV空間
舉例:將剛纔9G空間增加到/home分區。
1)vgs命令查看是否有空閒空間可以擴容。
[root@hadoop01 ~]# vgs VG #PV #LV #SN Attr VSize VFree vg51cto 1 5 0wz--n- 59.80g 9.00g
2)df -h查看當前磁盤空間
3)lvextend命令將home分區空間增加9G。
[root@hadoop01 ~]# lvextend -L +9G -f -r /dev/mapper/vg51cto-lv_home Extending logical volume lv_home to 14.00 GiB Logical volume lv_home successfully resized resize2fs 1.41.12 (17-May-2010) Filesystem at /dev/mapper/vg51cto-lv_homeis mounted on /home; on-line resizing required old desc_blocks = 1, new_desc_blocks = 1 Performing an on-line resize of/dev/mapper/vg51cto-lv_home to 3670016 (4k) blocks. The filesystem on/dev/mapper/vg51cto-lv_home is now 3670016 blocks long.
4)查看分區是否增加成功。
五、LVM 在線擴容
服務器磁盤空間不足,添加新的硬盤後,需要把空間添加當前分區當中。
linux中SCSI的第1個硬盤/dev/sda,第2個硬盤/dev/sdb依此類推。其中服務器第一塊硬盤/dev/sda已經劃分爲LVM分區。/dev/sdb是新加的硬盤。
1) 用pvcreate /dev/sdb命令初始化分區sdb爲物理卷(PV)。
[root@hadoop01 ~]# pvcreate /dev/sdb Physical volume "/dev/sdb" successfully created
2)pvdisplay命令顯示物理卷的信息
[root@hadoop01 ~]# pvdisplay ---Physical volume --- PVName /dev/sda2 VGName vg51cto PVSize 59.80 GiB / not usable3.00 MiB Allocatable yes (butfull) PESize 4.00 MiB Total PE 15309 Free PE 0 Allocated PE 15309 PVUUID pKC6SA-fkfe-OAl2-scVr-tq0h-EAXD-AWpwgX "/dev/sdb" is a new physical volume of "40.00 GiB" ---NEW Physical volume --- PVName /dev/sdb VGName PVSize 40.00 GiB Allocatable NO PESize 0 Total PE 0 Free PE 0 Allocated PE 0 PVUUID dMeOLS-Sks3-8k3q-pVWp-Iuz2-0Hh2-8njjhY
3)vgextend命令將pv加入到vg,vgcreate命令爲新創建vg(vgcreate vg51cto /dev/sdb),這裏的vg51cto已經存在,只需要用vgextend加入即可。
[root@hadoop01 ~]# vgextend vg51cto/dev/sdb Volume group "vg51cto" successfully extended
4)用vgdisplay命令查看vg信息,看到已經有40G空閒PE。
5)lvextend命令擴展分區,將40G空間全部添加到/data分區。
直接增加40G空間不足,報下面的錯誤,因此添加39.9G的空間。
Insufficient free space:10240 extents needed, but only 10239 available
[root@hadoop01 ~]# lvextend -L +39.99G/dev/mapper/vg51cto-lv_data Rounding size to boundary between physical extents: 39.99 GiB Extending logical volume lv_data to 50.99 GiB Logicalvolume lv_data successfully resized
6)上一步操作只是增加了邏輯卷的大小,用resize2fs命令重新定義文件系統的大小。
[root@hadoop01 ~]# resize2fs /dev/mapper/vg51cto-lv_data resize2fs 1.41.12 (17-May-2010) Filesystem at /dev/mapper/vg51cto-lv_datais mounted on /data; on-line resizing required old desc_blocks = 1, new_desc_blocks = 4 Performing an on-line resize of/dev/mapper/vg51cto-lv_data to 13367296 (4k) blocks. The filesystem on/dev/mapper/vg51cto-lv_data is now 13367296 blocks long.
7)查看磁盤在線擴容是否正常。
總結:
1)/分區不能umount,說明/分區只能擴容,不能減少/分區的空間。
2)減少分區的時候需要卸載分區,進行umount操作。
3)擴容的分區的時候不需要卸載分區。
4)重命名vg,lv命名後,需要修改/etc/fstab和/etc/grub.conf引導文件。