一、簡介
LVM是 Logical Volume Manager(邏輯卷管理)的簡寫,它是基於內核的一種邏輯卷管理器,LVM適合於管理大存儲設備,並允許用戶動態調整文件系統大小。此外,LVM的快照功能可以幫助我們快速備份數據。LVM爲我們提供了邏輯概念上的磁盤,使得文件系統不在關心底層物理磁盤的概念。並且它是Linux環境下對磁盤分區進行管理的一種機制,使用lvm用戶可以在無需停機的情況下方便地調整各個分區大小。
看圖識LVM
二、LVM基本概念
1、Physical Volume(PV),物理卷:創建分區時,標記分區類型爲8e後,就可以將該分區做成物理卷供LVM使用了。可以用任意塊設備做成物理卷,單個分區、整塊硬盤、RAID設備都可以。
2、Volume Group(VG),卷組:顧名思義,就是將一個或多個PV組合爲一個卷組,以PE爲存儲單位。一個VG至少包含一個PV,VG可以創建多個。
3、Physical Extent(PE),物理區域:PE是整個LVM中可分配的最小存儲單元,大小在創建卷組時指定且確定後不能更改;同一卷組的PE大小需一致。新的PV加入卷組後,PE的大小會自動更改爲原卷組PE的大小。
4、Logical Volume(LV),邏輯卷:建立在卷組的基礎上,卷組中空閒的PE可分配給LV使用,創建LV後可通過增加或減少PE來動態擴展和縮小空間大小。LV可以直接創建文件系統並掛載使用。兩種寫入模式:線性模式(linear)、交錯模式(triped)。
三、LVM常用管理工具
準備工作:
# fdisk /dev/sda #創建分區並調整分區格式(lvm格式爲8e) 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) e Selected partition 4 First cylinder (1632-26108, default 1632): Using default value 1632 Last cylinder, +cylinders or +size{K,M,G} (1632-26108, default 26108): Using default value 26108 Command (m for help): n First cylinder (1632-26108, default 1632): Using default value 1632 Last cylinder, +cylinders or +size{K,M,G} (1632-26108, default 26108): +5G Command (m for help): n First cylinder (2286-26108, default 2286): Using default value 2286 Last cylinder, +cylinders or +size{K,M,G} (2286-26108, default 26108): +5G Command (m for help): n First cylinder (2940-26108, default 2940): Using default value 2940 Last cylinder, +cylinders or +size{K,M,G} (2940-26108, default 26108): +5G Command (m for help): n First cylinder (3594-26108, default 3594): +5G Value out of range. First cylinder (3594-26108, default 3594): Using default value 3594 Last cylinder, +cylinders or +size{K,M,G} (3594-26108, default 26108): +5G Command (m for help): t Partition number (1-8): 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-8): 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-8): 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-8): 8 Hex code (type L to list codes): 8e Changed system type of partition 8 to 8e (Linux LVM) 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. # kpartx -af /dev/sda # partx -a /dev/sda (centos6.7需要這兩步才能讀取硬盤) # cat /proc/partitions (查看磁盤情況) major minor #blocks name 8 0 209715200 sda 8 1 819200 sda1 8 2 10240000 sda2 8 3 2048000 sda3 8 4 31 sda4 8 5 5246007 sda5 8 6 5253223 sda6 8 7 5253223 sda7 8 8 5253223 sda8 # fdisk -l Disk /dev/sda: 214.7 GB, 214748364800 bytes 255 heads, 63 sectors/track, 26108 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: 0x000711d9 Device Boot Start End Blocks Id System /dev/sda1 * 1 103 819200 83 Linux Partition 1 does not end on cylinder boundary. /dev/sda2 103 1377 10240000 83 Linux /dev/sda3 1377 1632 2048000 82 Linux swap / Solaris /dev/sda4 1632 26108 196604286 5 Extended /dev/sda5 1632 2285 5246007 8e Linux LVM /dev/sda6 2286 2939 5253223+ 8e Linux LVM /dev/sda7 2940 3593 5253223+ 8e Linux LVM /dev/sda8 3594 4247 5253223+ 8e Linux LVM
1、物理卷(PV)的常用管理命令
pvcreate #創建一個物理卷 pvchange #修改物理卷的屬性 pvresize #調整一個PV的大小 pvremove #刪除一個PV pvdisplay #顯示PV的屬性信息 pvmove #移動PE到指定物理卷 pvscan #搜索所有磁盤上的物理卷 pvs #顯示PV的簡要信息
示例1:創建4個PV
# pvcreate /dev/sda{5..8} Physical volume "/dev/sda5" successfully created Physical volume "/dev/sda6" successfully created Physical volume "/dev/sda7" successfully created Physical volume "/dev/sda8" successfully created # pvs #查看磁盤PV情況 PV VG Fmt Attr PSize PFree /dev/sda5 lvm2 --- 5.00g 5.00g /dev/sda6 lvm2 --- 5.01g 5.01g /dev/sda7 lvm2 --- 5.01g 5.01g /dev/sda8 lvm2 --- 5.01g 5.01g # pvdisplay #查看PV詳細信息 "/dev/sda5" is a new physical volume of "5.00 GiB" --- NEW Physical volume --- #新PV PV Name /dev/sda5 #物理卷名稱 VG Name PV Size 5.00 GiB #物理卷大小 Allocatable NO PE Size 0 Total PE 0 Free PE 0 Allocated PE 0 PV UUID F4waZ4-gQtM-lrZm-RN7O-1HFX-axqe-M5IdE0 "/dev/sda6" is a new physical volume of "5.01 GiB" --- NEW Physical volume --- PV Name /dev/sda6 VG Name PV Size 5.01 GiB Allocatable NO PE Size 0 Total PE 0 Free PE 0 Allocated PE 0 PV UUID fykqC3-4PPg-lgfR-iWQO-WzPK-goRT-W4S7uy "/dev/sda7" is a new physical volume of "5.01 GiB" --- NEW Physical volume --- PV Name /dev/sda7 VG Name PV Size 5.01 GiB Allocatable NO PE Size 0 Total PE 0 Free PE 0 Allocated PE 0 PV UUID xakBcc-U6lL-vLC7-WIc1-X2Td-tetj-GKBlOu "/dev/sda8" is a new physical volume of "5.01 GiB" --- NEW Physical volume --- PV Name /dev/sda8 VG Name PV Size 5.01 GiB Allocatable NO PE Size 0 Total PE 0 Free PE 0 Allocated PE 0 PV UUID OOr5Dh-i7ZW-UjsC-rTxW-MrnP-USMI-XQcmOO
示例2:刪除PV
# pvmove /dev/sda5 /dev/sda6 #注意:兩個PV必須在同一卷組內 # pvremove /dev/sda5 #刪除PV前要確保該PV沒有在任何卷組中 Labels on physical volume "/dev/sda5" successfully wiped # pvs PV VG Fmt Attr PSize PFree /dev/sda6 lvm2 --- 5.01g 5.01g /dev/sda7 lvm2 --- 5.01g 5.01g /dev/sda8 lvm2 --- 5.01g 5.01g
2、卷組(VG)的常用管理命令
vgcreate #創建卷組 -l:設置可容納的LV最大數,默認爲255 -p:設置包含PV的最大數,默認爲255 -s:設置PE大小,默認爲4M vgextend #擴展VG大小 vgdisplay #顯示VG屬性信息 vgchange #修改VG屬性信息 vgreduce #縮減VG大小 vgremove #刪除VG vgscan #搜索所有磁盤上的卷組 vgs #顯示VG簡要信息 vgck #檢查VG元數據
示例1:創建一個卷組,要求PE大小爲8M,名稱爲bjwf,最大支持LV不能超過10個,包含的PV不能超過2個
# vgcreate -s 8M -l 10 -p 2 bjwf /dev/sda{7,8} Volume group "bjwf" successfully created # vgdisplay bjwf #查看VG屬性信息驗證結果 --- Volume group --- VG Name bjwf #VG名稱 System ID Format lvm2 Metadata Areas 2 Metadata Sequence No 1 VG Access read/write VG Status resizable MAX LV 10 #可以看到,支持最大LV數爲10個 Cur LV 0 Open LV 0 Max PV 2 #支持最大PV數爲2個 Cur PV 2 Act PV 2 VG Size 10.02 GiB #卷組大小 PE Size 8.00 MiB #PE的大小 Total PE 1282 Alloc PE / Size 0 / 0 Free PE / Size 1282 / 10.02 GiB #剩餘容量 VG UUID 7q5Lka-cnTN-qqlh-eIg1-Fpr2-2IPY-yrHA1S
示例2:擴展bjwf的大小
# vgextend bjwf /dev/sda6 #這塊由於此前定義了VG的最大PV數,所以無法擴展 No space for '/dev/sda6' - volume group 'bjwf' holds max 2 physical volume(s). Unable to add physical volume '/dev/sda6' to volume group 'bjwf'. # vgchange -p 3 bjwf #修改VG屬性 Volume group "bjwf" successfully changed # vgextend bjwf /dev/sda6 #擴展VG Volume group "bjwf" successfully extended #顯示成功 # vgdisplay bjwf #查看新擴展的VG --- Volume group --- VG Name bjwf System ID Format lvm2 Metadata Areas 3 Metadata Sequence No 3 VG Access read/write VG Status resizable MAX LV 10 Cur LV 0 Open LV 0 Max PV 3 #最大PV數已經改爲3個 Cur PV 3 Act PV 3 VG Size 15.02 GiB #VG大小也已經改變 PE Size 8.00 MiB Total PE 1923 Alloc PE / Size 0 / 0 Free PE / Size 1923 / 15.02 GiB VG UUID 7q5Lka-cnTN-qqlh-eIg1-Fpr2-2IPY-yrHA1S
示例3:縮減bjwf大小,然後刪除bjwf
# vgreduce bjwf /dev/sda8 #注意:把PV移除卷組時要保證該PV數據已經遷移或未使用 Removed "/dev/sda8" from volume group "bjwf" # vgchange -an bjwf #標記bjwf爲不可用狀態 0 logical volume(s) in volume group "bjwf" now active # vgremove bjwf #不論VG包含多少PV都可以刪除,前提是該VG上沒有任何LV,如果有就需要先刪除LV Volume group "bjwf" successfully removed # vgs #查看VG情況
3、邏輯卷(LV)的常用管理命令
lvcreate #創建LV -l:設置LV大小,以PE爲單位 -L:設置LV大小,以字節爲單位 -n:設置LV名稱 -p:設置LV權限讀寫權限,默認爲可讀可寫 -s:設置一個快照卷,對一個已存在的LV做快照 lvextend #擴展LV大小 lvreduce #縮減LV大小 lvchange #修改LV屬性信息 -ay:標記LV爲可用狀態 -an:標記LV爲不可用狀態 lvremove #刪除LV lvdisplay #顯示LV屬性信息 lvscan #搜索所有磁盤上的邏輯卷 lvs #顯示LV簡要信息
示例1:創建一個LV,要求大小爲10G,名稱爲mylv,指定卷組爲bjwf,並掛載到/data上
# lvcreate -L 10G -n mylv bjwf Logical volume "mylv" created. # lvdisplay #LV詳細情況 --- Logical volume --- LV Path /dev/bjwf/mylv #邏輯卷mylv的陸佳 LV Name mylv #邏輯卷名稱爲mylv VG Name bjwf #基於bjwf卷組 LV UUID gvQMEB-1Zzo-IVth-KV7v-O6QH-8Nxw-IK1RIf LV Write Access read/write LV Creation host, time mail.bjwf.com, 2016-02-01 17:16:57 +0800 LV Status available # open 0 LV Size 10.00 GiB Current LE 2560 Segments 2 Allocation inherit Read ahead sectors auto - currently set to 256 Block device 253:0 # mke2fs -t ext4 /dev/bjwf/mylv #格式化mylv # mkdir /data #創建目錄 # mount /dev/bjwf/mylv /data #掛載到指定目錄 # df -h Filesystem Size Used Avail Use% Mounted on /dev/sda2 9.5G 6.6G 2.5G 73% / tmpfs 3.9G 0 3.9G 0% /dev/shm /dev/sda1 772M 39M 693M 6% /boot /dev/mapper/bjwf-mylv 9.8G 23M 9.2G 1% /data #大小爲10G的/data
示例2:擴展mylv的大小,增加5G空間
# lvextend -L 15G /dev/bjwf/mylv #方法一,擴展物理邊界增加到15G # lvextend -L +5G /dev/bjwf/mylv #方法二,擴展物理邊界增加5G # df -h Filesystem Size Used Avail Use% Mounted on /dev/sda2 9.5G 6.6G 2.5G 73% / tmpfs 3.9G 0 3.9G 0% /dev/shm /dev/sda1 772M 39M 693M 6% /boot /dev/mapper/bjwf-mylv 9.8G 23M 9.2G 1% /data #仍然爲10G,邏輯卷沒有增加 # resize2fs /dev/bjwf/mylv #擴展邏輯邊界。 注:只對ext文件系統使用。這裏也可以指定擴展邏輯邊界大小,默認物理邊界大小。 resize2fs 1.41.12 (17-May-2010) Filesystem at /dev/bjwf/mylv is mounted on /data; on-line resizing required old desc_blocks = 1, new_desc_blocks = 1 Performing an on-line resize of /dev/bjwf/mylv to 3932160 (4k) blocks. The filesystem on /dev/bjwf/mylv is now 3932160 blocks long. # lvs LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert mylv bjwf -wi-ao---- 15.00g # df -h Filesystem Size Used Avail Use% Mounted on /dev/sda2 9.5G 6.6G 2.5G 73% / tmpfs 3.9G 0 3.9G 0% /dev/shm /dev/sda1 772M 39M 693M 6% /boot /dev/mapper/bjwf-mylv 15G 25M 14G 1% /data #大小已經增加到15G
示例三:縮減mylv的大小,減少9G空間(縮減的順序與創建時的順序相反,也就是先卸載文件系統,縮減邏輯卷,縮減物理卷。縮減很危險,不到最後一步千萬不要縮減,縮減需要離線。)
# umount /data/ #卸載,住:卸載前先將數據拿走,血的教訓 # e2fsck -f /dev/bjwf/mylv #強制檢查 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/bjwf/mylv: 12/983040 files (0.0% non-contiguous), 100865/3932160 blocks # resize2fs /dev/bjwf/mylv 7G #縮減邏輯邊界至7G resize2fs 1.41.12 (17-May-2010) Resizing the filesystem on /dev/bjwf/mylv to 1835008 (4k) blocks. The filesystem on /dev/bjwf/mylv is now 1835008 blocks long. # lvreduce -L 7G /dev/bjwf/mylv #縮減物理邊界至7G WARNING: Reducing active logical volume to 7.00 GiB THIS MAY DESTROY YOUR DATA (filesystem etc.) Do you really want to reduce mylv? [y/n]: y #確認,後果自負 Size of logical volume bjwf/mylv changed from 15.00 GiB (3840 extents) to 7.00 GiB (1792 extents). Logical volume mylv successfully resized # mount /dev/bjwf/mylv /data/ #重新掛載 # df -h Filesystem Size Used Avail Use% Mounted on /dev/sda2 9.5G 6.6G 2.5G 73% / tmpfs 3.9G 0 3.9G 0% /dev/shm /dev/sda1 772M 39M 693M 6% /boot /dev/mapper/bjwf-mylv 6.8G 23M 6.4G 1% /data #已經縮減至7G
示例四:對mylv創建一個快照卷,快照恢復後,卸載快照卷並刪除
# lvcreate -L 50M -n mylv_snap -p r -s /dev/bjwf/mylv #對mylv做快照,首先要確定邏輯卷裏面暫用的空間大小小於50M,不然快照沒意義 Rounding up size to full physical extent 52.00 MiB Logical volume "mylv_snap" created. # lvs LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync C onvert mylv bjwf owi-a-s--- 10.00g mylv_snap bjwf sri-a-s--- 52.00m mylv 0.00 #快照卷 # mkdir /snap #創建掛載點 # mount /dev/bjwf//mylv_snap /snap/ #掛載快照至指定目錄 mount: block device /dev/mapper/bjwf-mylv_snap is write-protected, mounting read-only # umount /snap/ #卸載,一定要確定數據是否移除 # lvremove /dev/bjwf/mylv_snap #刪除快照卷 Do you really want to remove active logical volume mylv_snap? [y/n]: y #確認 Logical volume "mylv_snap" successfully removed
示例五:刪除mylv
# lvchange -an /dev/bjwf/mylv #標記mylv爲不可用狀態 # lvremove /dev/bjwf/mylv #刪除LV Logical volume "mylv" successfully removed
以上乃是個人學習總結,如有錯誤或遺留問題,還望指正!!!!!!!!!!!!!!