LVM簡介
LVM全稱Logical Volume Manager(邏輯卷管理),是將幾個物理分區(或硬盤)通過軟件組合成一塊看起來是獨立大硬盤(VG),然后對這塊大硬盤分割成可使用的邏輯卷(LV),最終能夠掛載使用,以達到對磁盤空間進行彈性管理的目的。
LVM的基本原理
基本術語
dm(device mapper):將一個或多個底層塊設備組織成一個邏輯設備的模塊
PV(Physical Volume,物理卷):物理分區(或硬盤)通過 fdisk 調整系統識別碼 (system ID) 成為 8e (LVM 的識別碼),然后再經過 pvcreate 的命令將他轉成 LVM 最底層的物理卷(PV)
VG(Volume Group,卷組):由多個 PV 整合而成,每個 VG 最多能包含 65534 個 PE
PE(Physical Extend,物理塊):LVM 最小的儲存區塊,默認大小 4MB。文件數據都是藉由寫入 PE 來處理的。
LV(Logical Volume,邏輯卷):類似于非 LVM 系統中的磁盤分區,邏輯卷建立在卷組 VG 之上,有多個 PE組成
LE(Logical Extent,邏輯卷):LV 中的 PE 稱為 LE
基本流程
物理分區(或硬盤)轉化為PV,基于PV創建VG,VG包含若干個PE,通過劃分VG中的PE組成LV,LV格式化成文件系統,最終進行掛載。
原理圖
注:圖片來自維基百科
LVM的使用
相關工具及命令
-
PV管理工具
pvs:簡要PV信息顯示
pvdisplay:顯示PV的詳細信息
pvcreate /dev/DEVICE:創建PV
-
VG管理工具
vgs:簡要VG顯示信息
vgdisplay:顯示VG的詳細信息
vgcreate [-s #[kKmMgGtTpPeE]] VolumeGroupName PhysicalDevicePath [PhysicalDevicePath…]:創建VG
vgextend VolumeGroupName PhysicalDevicePath [PhysicalDevicePath…]:擴展VG
vgreduce VolumeGroupName PhysicalDevicePath [PhysicalDevicePath…]:縮減VG
vgremove:移除VG
注意:對VG做減法時,先做pvmove,把需要移除的pv上的pe先移到同一卷組中其他pv上
-
LV管理工具
lvs:簡要LV信息顯示
lvdisplay:顯示LV的詳細信息
lvcreate -L #[mMgGtT] -n NAME VolumeGroup:創建LV
lvremove /dev/VG_NAME/LV_NAME:移除LV
-
擴展邏輯卷
lvextend -L [+]#[mMgGtT] /dev/VG_NAME/LV_NAME
-L #:擴展至#大小
-L +#:擴展#大小
resize2fs /dev/VG_NAME/LV_NAME:重新定義文件系統的大小
-
縮減邏輯卷
umount /dev/VG_NAME/LV_NAME:卸載指定的LV掛載
e2fsck -f /dev/VG_NAME/LV_NAME:檢查文件系統
resize2fs /dev/VG_NAME/LV_NAME #[mMgGtT]:重新定義LV的大小
lvreduce -L [-]#[mMgGtT] /dev/VG_NAME/LV_NAME:縮減LV大小
mount
-
快照(snapshot)
lvcreate -L #[mMgGtT] -p r -s -n snapshot_lv_name original_lv_name:創建快照
LVM的創建
目標:創建一個有兩個PV組成的大小為20G的名為testvg的VG;要求PE大小為16MB, 而后在卷組中創建大小為5G的邏輯卷testlv;掛載至/users目錄
-
系統環境
操作系統:CentOS 6.7 磁盤信息: Disk /dev/sda: 128.8 GB, 128849018880 bytes 255 heads, 63 sectors/track, 15665 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x00013624 Device Boot Start End Blocks Id System /dev/sda1 * 1 64 512000 83 Linux Partition 1 does not end on cylinder boundary. /dev/sda2 64 15666 125316096 8e Linux LVM Disk /dev/sdb: 32.2 GB, 32212254720 bytes 255 heads, 63 sectors/track, 3916 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x00000000
-
初始化磁盤分區
注:為簡便操作,實驗將基于sdb盤的物理分區
[root@centos6 ~]# fdisk /dev/sdb Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel Building a new DOS disklabel with disk identifier 0x6cd53b57. Changes will remain in memory only, until you decide to write them. After that, of course, the previous content won't be recoverable. Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite) 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): n Command action e extended p primary partition (1-4) p Partition number (1-4): 1 First cylinder (1-3916, default 1): Using default value 1 Last cylinder, +cylinders or +size{K,M,G} (1-3916, default 3916): +10G Command (m for help): n Command action e extended p primary partition (1-4) p Partition number (1-4): 2 First cylinder (1307-3916, default 1307): Using default value 1307 Last cylinder, +cylinders or +size{K,M,G} (1307-3916, default 3916): +10G Command (m for help): t Partition number (1-4): 1 Hex code (type L to list codes): 8e Changed system type of partition 1 to 8e (Linux LVM) Command (m for help): t Partition number (1-4): 2 Hex code (type L to list codes): 8e Changed system type of partition 2 to 8e (Linux LVM) Command (m for help): w The partition table has been altered! Calling ioctl() to re-read partition table. Syncing disks. [root@centos6 ~]# partx -a /dev/sdb #通知內核重讀分區表 BLKPG: Device or resource busy error adding partition 1 BLKPG: Device or resource busy error adding partition 2
-
創建PV
[root@centos6 ~]# pvcreate /dev/sdb[1-2] Physical volume "/dev/sdb1" successfully created Physical volume "/dev/sdb2" successfully created [root@centos6 ~]# pvs /dev/sdb* #查看簡要信息,單獨pvs顯示所有PV PV VG Fmt Attr PSize PFree /dev/sdb1 lvm2 --- 10.00g 10.00g /dev/sdb2 lvm2 --- 10.00g 10.00g [root@centos6 ~]# pvdisplay /dev/sdb* #查看詳細信息,單獨pvdisplay顯示所有PV Failed to find device for physical volume "/dev/sdb". "/dev/sdb1" is a new physical volume of "10.00 GiB" --- NEW Physical volume --- PV Name /dev/sdb1 VG Name PV Size 10.00 GiB Allocatable NO PE Size 0 Total PE 0 Free PE 0 Allocated PE 0 PV UUID fRfYN1-N1xX-VBtQ-u4hH-FKjd-OSGL-N1n6b1 "/dev/sdb2" is a new physical volume of "10.00 GiB" --- NEW Physical volume --- PV Name /dev/sdb2 VG Name PV Size 10.00 GiB Allocatable NO PE Size 0 Total PE 0 Free PE 0 Allocated PE 0 PV UUID fjJ8ED-VTVk-8IJb-DCdx-82Bl-Go7g-wApVuK
-
創建VG
[root@centos6 ~]# vgcreate -s 16 testvg /dev/sdb[1-2] #創建名為testvg PE大小為16MB的卷組 Volume group "testvg" successfully created [root@centos6 ~]# vgs testvg #可根據VG名稱查找 VG #PV #LV #SN Attr VSize VFree testvg 2 0 0 wz--n- 20.00g 20.00g [root@centos6 ~]# vgdisplay testvg #可根據VG名稱查找 --- Volume group --- VG Name testvg 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 20.00 GiB PE Size 16.00 MiB Total PE 1280 Alloc PE / Size 0 / 0 Free PE / Size 1280 / 20.00 GiB VG UUID QPvR7X-2uRS-U8Ba-Kzz5-Z1Z0-WZ2i-WkkBpB
-
創建LV
[root@centos6 ~]# lvcreate -L 5g -n testlv testvg #在testvg下創建容量為5G名稱為testlv的LV Logical volume "testlv" created. [root@centos6 ~]# lvs /dev/testvg LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert testlv testvg -wi-a----- 5.00g [root@centos6 ~]# lvs /dev/testvg/testlv LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert testlv testvg -wi-a----- 5.00g [root@centos6 ~]# lvdisplay /dev/testvg/testlv --- Logical volume --- LV Path /dev/testvg/testlv LV Name testlv VG Name testvg LV UUID JNTrHH-bx2p-Z5k2-U6Cx-Fboi-BnGn-nNlqmZ LV Write Access read/write LV Creation host, time centos6.7, 2016-04-17 16:39:15 +0800 LV Status available # open 0 LV Size 5.00 GiB Current LE 320 Segments 1 Allocation inherit Read ahead sectors auto - currently set to 256 Block device 253:3
-
LV格式化及掛載
[root@centos6 ~]# mke2fs -t ext4 /dev/testvg/testlv mke2fs 1.41.12 (17-May-2010) 文件系統標簽= 操作系統:Linux 塊大小=4096 (log=2) 分塊大小=4096 (log=2) Stride=0 blocks, Stripe width=0 blocks 327680 inodes, 1310720 blocks 65536 blocks (5.00%) reserved for the super user 第一個數據塊=0 Maximum filesystem blocks=1342177280 40 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 正在寫入inode表: 完成 Creating journal (32768 blocks): 完成 Writing superblocks and filesystem accounting information: 完成 This filesystem will be automatically checked every 20 mounts or 180 days, whichever comes first. Use tune2fs -c or -i to override. [root@centos6 ~]# mkdir /users #創建users目錄 [root@centos6 ~]# mount /dev/testvg/testlv /users/ 將LV掛載到users目錄 [root@centos6 ~]# mount #查看是否掛載成功 /dev/mapper/vg_centos6-lv_root on / type ext4 (rw) proc on /proc type proc (rw) sysfs on /sys type sysfs (rw) devpts on /dev/pts type devpts (rw,gid=5,mode=620) tmpfs on /dev/shm type tmpfs (rw,rootcontext="system_u:object_r:tmpfs_t:s0") /dev/sda1 on /boot type ext4 (rw) /dev/mapper/vg_centos6-lv_home on /home type ext4 (rw) none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw) /dev/mapper/testvg-testlv on /users type ext4 (rw) #表示已經掛載成功 [root@centos6 ~]# df -lh #查看分區情況 Filesystem Size Used Avail Use% Mounted on /dev/mapper/vg_centos6-lv_root 50G 3.9G 43G 9% / tmpfs 491M 0 491M 0% /dev/shm /dev/sda1 477M 37M 416M 9% /boot /dev/mapper/vg_centos6-lv_home 67G 54M 63G 1% /home /dev/mapper/testvg-testlv 4.8G 10M 4.6G 1% /users
LVM的擴展
-
VG擴展
注:sdb3空間大小為5G,創建過程省略
[root@centos6 ~]# vgextend testvg /dev/sdb3 #擴展testvg,將sdb3的空間提供給testvg Volume group "testvg" successfully extended [root@centos6 ~]# vgs testvg #查看擴展后的容量 VG #PV #LV #SN Attr VSize VFree testvg 3 1 0 wz--n- 25.00g 20.00g #成功擴展5G容量
-
LV擴展
[root@centos6 ~]# lvextend -L +10g /dev/testvg/testlv #擴展10G空間給testlv Size of logical volume testvg/testlv changed from 5.00 GiB (320 extents) to 15.00 GiB (960 extents). Logical volume testlv successfully resized [root@centos6 ~]# lvs /dev/testvg/testlv #查看testlv信息,空間大小為15G LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert testlv testvg -wi-ao---- 15.00g [root@centos6 ~]# df -lh Filesystem Size Used Avail Use% Mounted on /dev/mapper/vg_centos6-lv_root 50G 3.9G 43G 9% / tmpfs 491M 0 491M 0% /dev/shm /dev/sda1 477M 37M 416M 9% /boot /dev/mapper/vg_centos6-lv_home 67G 54M 63G 1% /home /dev/mapper/testvg-testlv 4.8G 10M 4.6G 1% /users #分區空間不變,擴展的空間生效需要重新定義分區大小 [root@centos6 ~]# resize2fs /dev/testvg/testlv #分區大小重新定義 resize2fs 1.41.12 (17-May-2010) Filesystem at /dev/testvg/testlv is mounted on /users; on-line resizing required old desc_blocks = 1, new_desc_blocks = 1 Performing an on-line resize of /dev/testvg/testlv to 3932160 (4k) blocks. The filesystem on /dev/testvg/testlv is now 3932160 blocks long. [root@centos6 ~]# df -lh Filesystem Size Used Avail Use% Mounted on /dev/mapper/vg_centos6-lv_root 50G 3.9G 43G 9% / tmpfs 491M 0 491M 0% /dev/shm /dev/sda1 477M 37M 416M 9% /boot /dev/mapper/vg_centos6-lv_home 67G 54M 63G 1% /home /dev/mapper/testvg-testlv 15G 13M 14G 1% /users #擴展空間已經生效
注:如果文件系統是處于mount狀態下,resize2fs命令只能做到擴容
LVM縮減
注:LVM縮減有風險,操作需謹慎
-
VG縮減
[root@centos6 ~]# pvs -o+pv_used #查看pv的已使用情況 PV VG Fmt Attr PSize PFree Used /dev/sda2 vg_centos6 lvm2 a-- 119.51g 0 119.51g /dev/sdb1 testvg lvm2 a-- 10.00g 0 10.00g /dev/sdb2 testvg lvm2 a-- 10.00g 5.00g 5.00g /dev/sdb3 testvg lvm2 a-- 5.00g 5.00g 0 [root@centos6 ~]# pvmove /dev/sdb2 /dev/sdb3 #防止數據丟失將sdb2非空閑的PE與sdb3的空間PE交換 /dev/sdb2: Moved: 0.3% /dev/sdb2: Moved: 6.2% /dev/sdb2: Moved: 14.1% /dev/sdb2: Moved: 21.6% /dev/sdb2: Moved: 27.2% /dev/sdb2: Moved: 34.4% /dev/sdb2: Moved: 40.6% /dev/sdb2: Moved: 48.1% /dev/sdb2: Moved: 54.7% /dev/sdb2: Moved: 60.9% /dev/sdb2: Moved: 67.8% /dev/sdb2: Moved: 74.1% /dev/sdb2: Moved: 80.6% /dev/sdb2: Moved: 87.8% /dev/sdb2: Moved: 93.4% /dev/sdb2: Moved: 98.8% /dev/sdb2: Moved: 100.0% [root@centos6 ~]# pvs -o+pv_used PV VG Fmt Attr PSize PFree Used /dev/sda2 vg_centos6 lvm2 a-- 119.51g 0 119.51g /dev/sdb1 testvg lvm2 a-- 10.00g 0 10.00g /dev/sdb2 testvg lvm2 a-- 10.00g 10.00g 0 #此pv已經空閑,可進行縮減VG /dev/sdb3 testvg lvm2 a-- 5.00g 0 5.00g [root@centos6 ~]# vgreduce testvg /dev/sdb2 #縮減VG Removed "/dev/sdb2" from volume group "testvg" [root@centos6 ~]# vgs testvg VG #PV #LV #SN Attr VSize VFree testvg 2 1 0 wz--n- 15.00g 0 #成功縮減VG
-
LV縮減
[root@centos6 ~]# umount /users/ #卸載掛載目錄 [root@centos6 ~]# e2fsck -f /dev/testvg/testlv #檢查文件系統,該步驟不可少 e2fsck 1.41.12 (17-May-2010) 第一步: 檢查inode,塊,和大小 第二步: 檢查目錄結構 第3步: 檢查目錄連接性 Pass 4: Checking reference counts 第5步: 檢查簇概要信息 /dev/testvg/testlv: 11/983040 files (0.0% non-contiguous), 97664/3932160 blocks [root@centos6 ~]# resize2fs /dev/testvg/testlv 10g resize2fs 1.41.12 (17-May-2010) Resizing the filesystem on /dev/testvg/testlv to 2621440 (4k) blocks. The filesystem on /dev/testvg/testlv is now 2621440 blocks long. [root@centos6 ~]# lvreduce -L -5g /dev/testvg/testlv #縮減5G LV的空間 WARNING: Reducing active logical volume to 10.00 GiB THIS MAY DESTROY YOUR DATA (filesystem etc.) Do you really want to reduce testlv? [y/n]: y Size of logical volume testvg/testlv changed from 15.00 GiB (960 extents) to 10.00 GiB (640 extents). Logical volume testlv successfully resized [root@centos6 ~]# lvs /dev/testvg/testlv #查看testlv信息 LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert testlv testvg -wi-ao---- 10.00g [root@centos6 ~]# mount /dev/testvg/testlv /users/ #重新掛載 [root@centos6 ~]# df -lh Filesystem Size Used Avail Use% Mounted on /dev/mapper/vg_centos6-lv_root 50G 3.9G 43G 9% / tmpfs 491M 0 491M 0% /dev/shm /dev/sda1 477M 37M 416M 9% /boot /dev/mapper/vg_centos6-lv_home 67G 54M 63G 1% /home /dev/mapper/testvg-testlv 9.8G 12M 9.3G 1% /users
快照
LVM快照功能是在在時間點上對快照源分區的所有文件的元數據進行保存,如果源數據未發生改變,則訪問快照卷的相應文件將直接指向源分區的源文件,如源文件發生改變,舊數據將拷貝到快照卷的預留空間中起到備份數據的作用
-
快照創建
[root@centos6 users]# cp /etc/fstab /users/ [root@centos6 users]# ls fstab lost+found [root@centos6 users]# cat fstab # # /etc/fstab # Created by anaconda on Fri Mar 4 11:09:09 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 # /dev/mapper/vg_centos6-lv_root / ext4 defaults 1 1 UUID=3efc9d2d-ff60-4491-84c4-e1beb6701b83 /boot ext4 defaults 1 2 /dev/mapper/vg_centos6-lv_home /home ext4 defaults 1 2 /dev/mapper/vg_centos6-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 [root@centos6 users]# lvcreate -L 5g -p r -s -n testlv-snap /dev/testvg/testlv #創建testlv的快照卷 Logical volume "testlv-snap" created. [root@centos6 users]# mkdir /backup [root@centos6 users]# mount /dev/testvg/testlv-snap /backup/ #將快照卷掛載到/backup目錄 mount: block device /dev/mapper/testvg-testlv--snap is write-protected, mounting read-only
-
測試
[root@centos6 users]# vim fstab #編輯源文件 [root@centos6 users]# cat fstab # [root@centos6 users]# cat /backup/fstab #查看快照卷中的文件,發現文件內容不變實現了備份 # # /etc/fstab # Created by anaconda on Fri Mar 4 11:09:09 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 # /dev/mapper/vg_centos6-lv_root / ext4 defaults 1 1 UUID=3efc9d2d-ff60-4491-84c4-e1beb6701b83 /boot ext4 defaults 1 2 /dev/mapper/vg_centos6-lv_home /home ext4 defaults 1 2 /dev/mapper/vg_centos6-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
原創文章,作者:Net18-海濱,如若轉載,請注明出處:http://www.www58058.com/15011