一、簡介
LVM是邏輯盤卷管理(Logical Volume Manager)的簡稱,它是Linux環境下對磁盤分區進行管理的一種機制,LVM是建立在硬盤和分區之上的一個邏輯層,來提高磁盤分區管理的靈活性。
LVM的工作原理其實很簡單,它就是通過將底層的物理硬盤抽象的封裝起來,然後以邏輯卷的方式呈現給上層應用。在傳統的磁盤管理機制中,我們的上層應用是直接訪問文件系統,從而對底層的物理硬盤進行讀取,而在LVM中,其通過對底層的硬盤進行封裝,當我們對底層的物理硬盤進行操作時,其不再是針對於分區進行操作,而是通過一個叫做邏輯卷的東西來對其進行底層的磁盤管理操作。比如說我增加一個物理硬盤,這個時候上層的服務是感覺不到的,因爲呈現給上層服務的是以邏輯卷的方式。
LVM最大的特點就是可以對磁盤進行動態管理。因爲邏輯卷的大小是可以動態調整的,而且不會丟失現有的數據。如果我們新增加了硬盤,其也不會改變現有上層的邏輯卷。作爲一個動態磁盤管理機制,邏輯卷技術大大提高了磁盤管理的靈活性。
基本的邏輯卷管理概念:
PV(Physical Volume)- 物理卷
物理卷在邏輯卷管理中處於最底層,它可以是實際物理硬盤上的分區,也可以是整個物理硬盤,也可以是raid設備。
VG(Volumne Group)- 卷組
卷組建立在物理卷之上,一個卷組中至少要包括一個物理卷,在卷組建立之後可動態添加物理捲到卷組中。一個邏輯卷管理系統工程中可以只有一個卷組,也可以擁有多個卷組。
LV(Logical Volume)- 邏輯卷
邏輯卷建立在卷組之上,卷組中的未分配空間可以用於建立新的邏輯卷,邏輯卷建立後可以動態地擴展和縮小空間。系統中的多個邏輯卷可以屬於同一個卷組,也可以屬於不同的多個卷組。
好的我們瞭解了這麼多,那麼我們就來玩下吧!
一、準備好我們的分區,然後更改好分區的格式
[root@bogon ~]# fdisk -l Disk /dev/sdb: 128.8 GB, 128849018880 bytes, 251658240 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes #查看下有哪些空閒的磁盤,我這裏使用/dev/sdb和塊,部分信息省略。 [root@bogon ~]# fdisk /dev/sdb Command (m for help): t Partition number (1-4, default 4): Hex code (type L to list all codes): 8e ##更改格式爲8e Changed type of partition 'Linux' to 'Linux LVM' Command (m for help): p Disk /dev/sdb: 128.8 GB, 128849018880 bytes, 251658240 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk label type: dos Disk identifier: 0x6428a1e6 Device Boot Start End Blocks Id System /dev/sdb1 2048 62916607 31457280 8e Linux LVM /dev/sdb2 62916608 125831167 31457280 8e Linux LVM /dev/sdb3 125831168 188745727 31457280 8e Linux LVM /dev/sdb4 188745728 251658239 31456256 8e Linux LVM ########################################看此時我們的格式都全部改爲了8e lvm格式。 [root@bogon ~]# ls /dev/sdb* #查看下有沒有識別到我們分區 /dev/sdb /dev/sdb1 /dev/sdb2 /dev/sdb3 /dev/sdb4 [root@bogon ~]# partprobe /dev/sdb #如果分區沒識別我們需要刷新下強制識別。
二、創建pv卷
PV 有關的命令:
pvcreate :將實體 partition 創建成爲 PV ;
pvscan :掃描系統存在的pv,pvs簡要顯示
pvdisplay :顯示出目前系統上面的 PV 狀態;
pvremove :將 PV 屬性移除,讓該 partition 不具有 PV 屬性。
[root@bogon ~]# pvcreate /dev/sdb{1,2,3} Device /dev/sdb1. not found (or ignored by filtering). Physical volume "/dev/sdb2" successfully created Physical volume "/dev/sdb3" successfully created ##我們一次創建了三個pv,分別爲/dev/sdb1 /dev/sdb2 /dev/sdb3 [root@bogon ~]# pvscan PV /dev/sdb2 lvm2 [30.00 GiB] PV /dev/sdb3 lvm2 [30.00 GiB] PV /dev/sdb1 lvm2 [30.00 GiB] Total: 3 [90.00 GiB] / in use: 0 [0 ] / in no VG: 3 [90.00 GiB] ## 顯示pv的基本信息,總共pv大小,vg已經使用pv大小,剩餘pv的大小 [root@bogon ~]# pvdisplay ##顯示pv的詳細信息 "/dev/sdb2" is a new physical volume of "30.00 GiB" --- NEW Physical volume --- PV Name /dev/sdb2 ##pv的名稱 VG Name ##沒有被分配所以顯示空白 PV Size 30.00 GiB ##pv容量大小 Allocatable NO #是否被分配 PE Size 0 #PE的大小 Total PE 0 已分配出去PE大小 Free PE 0 空閒PE大小 Allocated PE 0 #剩下可用PE大小 PV UUID bmWNn0-7PND-2yVL-TGT7-U9mf-Du01-ERq7FY#pv的id號 ##由於PE是在啊VG創建的時候纔會指定各種的大小,所以此次大不分都顯示0 "/dev/sdb3" is a new physical volume of "30.00 GiB" --- NEW Physical volume --- PV Name /dev/sdb3 VG Name PV Size 30.00 GiB Allocatable NO PE Size 0 Total PE 0 Free PE 0 Allocated PE 0 PV UUID sRE2ko-dd80-RxF3-zTGi-OMFH-z1AD-KFN0cL "/dev/sdb1" is a new physical volume of "30.00 GiB" --- NEW Physical volume --- PV Name /dev/sdb1 VG Name PV Size 30.00 GiB Allocatable NO PE Size 0 Total PE 0 Free PE 0 Allocated PE 0 PV UUID 67mTD7-OroO-n5iK-GWBQ-Mqow-BYzi-HXraKm
三、創建VG
創建 VG 相關的命令:
vgcreate -s 大小 VG名 pv名(創建的時候可以指定PE大小)
vgcreate :就是主要創建 VG 的命令
vgscan :搜尋系統上面是否有 VG ,vgs顯示簡要信息
vgdisplay :顯示目前系統上面的 VG 狀態
vgextend :擴展VG
vgreduce :在 VG 內移除 PV
vgchange :配置 VG 是否啓動 (active)
vgremove :刪除一個 VG
[root@bogon ~]# vgcreate vg0 /dev/sdb{1,2,3} Volume group "vg0" successfully created [root@bogon ~]# vgs VG #PV #LV #SN Attr VSize VFree vg0 3 0 0 wz--n- 89.99g 89.99g [root@bogon ~]# vgscan Reading all physical volumes. This may take a while... Found volume group "vg0" using metadata type lvm2 [root@bogon ~]# vgdisplay --- Volume group --- VG Name vg0 System ID Format lvm2 Metadata Areas 3 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 3 Act PV 3 VG Size 89.99 GiB##VG總共的大小90G(我pv每個大小30G) PE Size 4.00 MiB ##每個PE的大小爲4MB Total PE 23037 Alloc PE / Size 0 / 0 Free PE / Size 23037 / 89.99 GiB VG UUID p8dacU-UFYP-eazU-Jelp-vRAN-wEP3-hxzXfW
四、創建LVM
LVM創建相關命令:
lvcreate :創建 LV
lvscan :查詢系統上面的
lvdisplay :顯示系統上面的 LV 狀態啊
lvextend :擴展容量
lvreduce :減少容量
lvremove :刪除一個 LV
[root@bogon ~]# lvcreate -L +50G -n lv0 vg0 ##創建LVM大小50G,名稱lv0,從vg0中調容量 Logical volume "lv0" created.##創建成功 [root@bogon ~]# lvs LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert lv0 vg0 -wi-a----- 50.00g [root@bogon ~]# lvscan ACTIVE '/dev/vg0/lv0' [50.00 GiB] inherit [root@bogon ~]# lvdisplay --- Logical volume --- LV Path /dev/vg0/lv0#lv全名稱 LV Name lv0 VG Name vg0 LV UUID bCpncg-nTn7-V5vk-NWVq-NTT5-lmQx-Ayfcqd LV Write Access read/write ##可讀可寫權限 LV Creation host, time bogon, 2016-06-04 15:16:40 +0800#創建時間和創建人 LV Status available # open 0 LV Size 50.00 GiB Current LE 12800 Segments 2 Allocation inherit Read ahead sectors auto - currently set to 8192 Block device 253:0
五、將創建好的lvm捲進行文件系統格式處理,然後掛載供我們使用
[root@bogon ~]# mkfs.ext4 /dev/vg0/lv0 mke2fs 1.42.9 (28-Dec-2013) Filesystem label= OS type: Linux Block size=4096 (log=2) Fragment size=4096 (log=2) Stride=0 blocks, Stripe width=0 blocks 3276800 inodes, 13107200 blocks 655360 blocks (5.00%) reserved for the super user First data block=0 Maximum filesystem blocks=2162163712 400 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 Allocating group tables: done Writing inode tables: done Creating journal (32768 blocks): done Writing superblocks and filesystem accounting information: done [root@bogon ~]# mkdir /lvmtest/ [root@bogon ~]# mount /dev/vg0/lv0 /lvmtest/ [root@bogon ~]# mount /dev/sda5 on /testdir type xfs (rw,relatime,seclabel,attr2,inode64,noquota) /dev/sda1 on /boot type xfs (rw,relatime,seclabel,attr2,inode64,noquota) tmpfs on /run/user/42 type tmpfs (rw,nosuid,nodev,relatime,seclabel,size=100136k,mode=700,uid=42,gid=42) tmpfs on /run/user/0 type tmpfs (rw,nosuid,nodev,relatime,seclabel,size=100136k,mode=700) /dev/mapper/vg0-lv0 on /lvmtest type ext4 (rw,relatime,seclabel,data=ordered) [root@bogon ~]# cd /lvmtest/ [root@bogon lvmtest]# ls lost+found [root@bogon lvmtest]# mkdir lvmtest1 [root@bogon lvmtest]# ls lost+found lvmtest1 創建了/lvmtest目錄,然後掛載到此目錄下,去寫了點東西,測試OK沒有問題!
當我們的vg和lv空間不夠用了那麼我們該怎麼辦呢?
六、vg的擴展,縮減,移除
擴展vg卷大小
我之前還有一個/dev/sdb4分區沒有,現在可以派上用場了。
[root@bogon ~]# vgextend vg0 /dev/sdb4 Physical volume "/dev/sdb4" successfully created##將/dev/sdb4分區創建成了pv Volume group "vg0" successfully extended###/dev/sdb4這個pv成功的加入到了vg中來了 [root@bogon ~]# pvscan PV /dev/sdb1 VG vg0 lvm2 [30.00 GiB / 0 free] PV /dev/sdb2 VG vg0 lvm2 [30.00 GiB / 9.99 GiB free] PV /dev/sdb3 VG vg0 lvm2 [30.00 GiB / 30.00 GiB free] PV /dev/sdb4 VG vg0 lvm2 [30.00 GiB / 30.00 GiB free]##看此時相比前面多了一個pv Total: 4 [119.98 GiB] / in use: 4 [119.98 GiB] / in no VG: 0 [0 ] [root@bogon ~]# vgscan Reading all physical volumes. This may take a while... Found volume group "vg0" using metadata type lvm2 [root@bogon ~]# vgdisplay --- Volume group --- VG Name vg0 System ID Format lvm2 Metadata Areas 4 Metadata Sequence No 3 VG Access read/write VG Status resizable MAX LV 0 Cur LV 1 Open LV 1 Max PV 0 Cur PV 4 Act PV 4 VG Size 119.98 GiB###看大小發生了改變了 PE Size 4.00 MiB Total PE 30716 Alloc PE / Size 12800 / 50.00 GiB Free PE / Size 17916 / 69.98 GiB VG UUID p8dacU-UFYP-eazU-Jelp-vRAN-wEP3-hxzXfW
縮減vg大小
[root@bogon ~]# pvscan PV /dev/sdb1 VG vg0 lvm2 [30.00 GiB / 0 free] PV /dev/sdb2 VG vg0 lvm2 [30.00 GiB / 9.99 GiB free] PV /dev/sdb3 VG vg0 lvm2 [30.00 GiB / 30.00 GiB free] PV /dev/sdb4 VG vg0 lvm2 [30.00 GiB / 30.00 GiB free] Total: 4 [119.98 GiB] / in use: 4 [119.98 GiB] / in no VG: 0 [0 ] ##查看下pv有哪些是沒有被使用的,由此我們可以看出/dev/sdb3 /dev/sdb4沒用 [root@bogon ~]# vgreduce vg0 /dev/sdb4 Removed "/dev/sdb4" from volume group "vg0" [root@bogon ~]# pvscan PV /dev/sdb1 VG vg0 lvm2 [30.00 GiB / 0 free] PV /dev/sdb2 VG vg0 lvm2 [30.00 GiB / 9.99 GiB free] PV /dev/sdb3 VG vg0 lvm2 [30.00 GiB / 30.00 GiB free] PV /dev/sdb4 lvm2 [30.00 GiB] Total: 4 [119.99 GiB] / in use: 3 [89.99 GiB] / in no VG: 1 [30.00 GiB] [root@bogon ~]# vgdisplay --- Volume group --- VG Name vg0 System ID Format lvm2 Metadata Areas 3 Metadata Sequence No 9 VG Access read/write VG Status resizable MAX LV 0 Cur LV 1 Open LV 1 Max PV 0 Cur PV 3 Act PV 3 VG Size 89.99 GiB PE Size 4.00 MiB Total PE 23037 Alloc PE / Size 12800 / 50.00 GiB Free PE / Size 10237 / 39.99 GiB VG UUID p8dacU-UFYP-eazU-Jelp-vRAN-wEP3-hxzXfW
七、擴展、縮減LV
擴展邏輯卷:(支持在線擴展)
[root@bogon ~]# lvextend -L +30G /dev/vg0/lv0 Size of logical volume vg0/lv0 changed from 80.00 GiB (20480 extents) to 110.00 GiB (28160 extents). Logical volume lv0 successfully resized.##o擴展成功 root@bogon ~]# lvs LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert lv0 vg0 -wi-ao---- 110.00g [root@bogon ~]# df -h Filesystem Size Used Avail Use% Mounted on /dev/sda2 94G 3.2G 90G 4% / devtmpfs 475M 0 475M 0% /dev tmpfs 489M 84K 489M 1% /dev/shm tmpfs 489M 7.1M 482M 2% /run tmpfs 489M 0 489M 0% /sys/fs/cgroup /dev/sda5 19G 33M 19G 1% /testdir ##lv已經擴展成功了,但是我們文件系統中的大小沒加大,所以我麼還需要處理下。 [root@bogon ~]# resize2fs /dev/vg0/lv0 ##通過此命令讓文件系統容量確實增大 resize2fs 1.42.9 (28-Dec-2013) Filesystem at /dev/vg0/lv0 is mounted on /lvmtest; on-line resizing required old_desc_blocks = 7, new_desc_blocks = 14 The filesystem on /dev/vg0/lv0 is now 28835840 blocks long. [root@bogon ~]# df -h Filesystem Size Used Avail Use% Mounted on /dev/sda2 94G 3.2G 90G 4% / devtmpfs 475M 0 475M 0% /dev tmpfs 489M 84K 489M 1% /dev/shm tmpfs 489M 7.1M 482M 2% /run tmpfs 489M 0 489M 0% /sys/fs/cgroup /dev/sda5 19G 33M 19G 1% /testdir /dev/sda1 473M 153M 321M 33% /boot tmpfs 98M 16K 98M 1% /run/user/42 tmpfs 98M 0 98M 0% /run/user/0 /dev/mapper/vg0-lv0 109G 60M 104G 1% /lvmtest ### ok顯示現在已經是110G
縮減邏輯卷:(不支持在線擴展,必須先卸載)
確保縮減後的空間可以存儲原來所有數據。並且在縮減前先要進行強制檢查,確保文件系統處於一致狀態
[root@bogon ~]# umount /lvmtest/##卸載 [root@bogon ~]# e2fsck -f /dev/vg0/lv0 ##強行檢查文件系統 e2fsck 1.42.9 (28-Dec-2013) 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/vg0/lv0: 12/7208960 files (0.0% non-contiguous), 500575/28835840 blocks [root@bogon ~]# resize2fs /dev/vg0/lv0 5G ##縮減邏輯空間到5G resize2fs 1.42.9 (28-Dec-2013) Resizing the filesystem on /dev/vg0/lv0 to 1310720 (4k) blocks. The filesystem on /dev/vg0/lv0 is now 1310720 blocks long. [root@bogon ~]# lvreduce -L 5G /dev/vg0/lv0 ##縮減邏輯空間到5G WARNING: Reducing active logical volume to 5.00 GiB THIS MAY DESTROY YOUR DATA (filesystem etc.) Do you really want to reduce lv0? [y/n]: y #輸入y同意 Size of logical volume vg0/lv0 changed from 110.00 GiB (28160 extents) to 5.00 GiB (1280 extents). Logical volume lv0 successfully resized.##縮減成功 [root@bogon ~]# lvs LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert lv0 vg0 -wi-a----- 5.00g ##查看lv已經變成5G大小了 [root@bogon ~]# mount /dev/vg0/lv0 /lvmtest/##重新掛載我麼的文件系統 [root@bogon ~]# df -h Filesystem Size Used Avail Use% Mounted on /dev/sda2 94G 3.2G 90G 4% / devtmpfs 475M 0 475M 0% /dev tmpfs 489M 84K 489M 1% /dev/shm tmpfs 489M 7.1M 482M 2% /run tmpfs 489M 0 489M 0% /sys/fs/cgroup /dev/sda5 19G 33M 19G 1% /testdir /dev/sda1 473M 153M 321M 33% /boot tmpfs 98M 16K 98M 1% /run/user/42 tmpfs 98M 0 98M 0% /run/user/0 /dev/mapper/vg0-lv0 4.8G 33M 4.6G 1% /lvmtest [root@bogon ~]# cd /lvmtest/ [root@bogon lvmtest]# ls lost+found lvmtest1#####測試看ok沒有問,數據沒損壞壞