Linux LVM
前言
LVM是 Logical Volume Manager(邏輯卷管理)的簡寫,它是Linux環境下對磁盤分區進行管理的一種機制,它由Heinz Mauelshagen在Linux 2.4內核上實現,目前最新版本為:穩定版1.0.5,開發版 1.1.0-rc2,以及LVM2開發版。無論在Linux或者其他類似的系統,都是 非常的好用。傳統分區使用固定大小分區,重新調整大小十分麻煩。但是,LVM可以創建和管理“邏輯”卷,而不是直接使用物理硬盤??梢宰尮芾韱T彈性的管理 邏輯卷的擴大縮小,操作簡單,而不損壞已存儲的數據??梢噪S意將新的硬盤添加到LVM,以直接擴展已經存在的邏輯卷。LVM并不需重啟就可以讓內核知道分區的存在。
LVM分層結構
圖中頂部,首先是實際的物理磁盤,其劃分的分區并且創建的物理卷(PV)。一個或多個物理卷可以用來創建卷組(VG)。然后基于卷組可以創建邏輯卷 (LV)。只要在卷組中有可用空間,就可以創建邏輯卷。文件系統就是在邏輯卷上創建的,然后在操作系統掛載和訪問。
LVM測試說明
本文將介紹如何在linux中創建和管理LVM卷。我們將會分成兩個部分。第一個部分,我們首先要在一個硬盤上創建多個邏輯卷,然后將它們掛載在/lvm_data目錄。最后將對創建好的卷調整大小。而第二部分,我們將會從另外一塊硬盤增加額外的卷到LVM中。
實驗步驟
(一)準備磁盤分區
通過使用fdisk創建3個分區,分別為3G、5G、8G。分區的大小不要求一致。注意:創建LVM需要調整分區類型為'8e'。
[root@vm227 ~]# fdisk /dev/sdb Command (m for help): n ## 新建 Command action e extended p primary partition (1-4) p ## 主分區 Partition number (1-4): 1 ## 分區號 First cylinder (1-1044, default 1): ## 回車用默認的1 Last cylinder, +cylinders or +size{K,M,G} (1-1044, default 1044): +3G ## 大小 ####重復上面的操作來創建另外兩個分區### Command (m for help): t ## 改變類型 Selected partition 1 Hex code (type L to list codes): 8e ## LVM 的分區代碼 Changed system type of partition 1 to 8e (Linux LVM) Command (m for help): p ## 顯示類型 Device Boot Start End Blocks Id System /dev/sdb1 1 393 3156741 8e LinuxLVM /dev/sdb2 394 1047 5253255 8e Linux LVM /dev/sdb3 1048 2092 8393962+ 8e Linux LVM Command (m for help): w ## 保存退出 [root@vm227 ~]# partx -a /dev/sdb ###使分區生效
(二)創建物理卷(PV)
在剛創建好的分區上創建物理卷。創建PV命令:pvcreate
[root@vm227 ~]# pvcreate /dev/sdb{1,2,3} Physical volume "/dev/sdb1" successfully created Physical volume "/dev/sdb2" successfully created Physical volume "/dev/sdb3" successfully created ####使用命令pvs(簡單)和pvdisplay(詳細)查看物理卷的創建情況##### [root@vm227 ~]# pvs PV VG Fmt Attr PSize PFree /dev/sdb1 lvm2 a-- 3.01g 3.01g /dev/sdb2 lvm2 a-- 5.01g 5.01 /dev/sdb3 lvm2 a-- 8.01g 8.01g [root@vm227 ~]# pvdisplay "/dev/sdb2" is a new physical volume of "5.01 GiB" --- NEW Physical volume --- PV Name /dev/sdb2 VG Name PV Size 5.01 GiB Allocatable NO PE Size 0 Total PE 0 Free PE 0 Allocated PE 0 PV UUID N7EHil-Piij-pH85-hTTX-o5KD-iWYb-cocFA0 ####刪除物理卷使用命令:pvremove #### [root@vm227 ~]# pvremove /dev/sdb1
(三)創建卷組(Vg)
在剛創建好的PV上創建名為'volume-group1'的卷組,創建卷組命令:vgcreate
vgcreate [-s #[kKmMgGtTpPeE]] VolumeGroupName PhysicalDevicePath [PhysicalDevicePath…]
-s:用指定PE大小
[root@vm227 ~]# vgcreate volume-group1 /dev/sdb{1,2,3} ###使用下列命令可以來驗證卷組。vgs(簡單) 和vgdisplay(詳細)#### [root@vm227 ~]# vgdisplay --- Volume group --- VG Name volume-group1 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 16.02 GiB PE Size 4.00 MiB Total PE 4101 Alloc PE / Size 0 / 0 Free PE / Size 4101 / 16.02 GiB VG UUID Z3mTLf-44wM-ZLBM-SySO-7IZE-3xzh-mSDswO ###以上信息可以看出創建名為volume-group1卷組的使用量/總量信息。只要卷組中還有可用(Free)空間,就可以隨意創建邏輯卷(lv)。這里沒有指定PE大小,默認為4M#### ####刪除卷組使用vgremove#### [root@vm227 ~]# vgremove volume-group1
(四)創建邏輯卷(LV)
在創建好的VG上創建名為'mysqldata'、大小為2GB的邏輯卷。創建卷組命令:vgcreate
lvcreate -L #[mMgGtT] -n LV_NAME VolumeGroupName
-L: 指定創建lv容量大小
-n: 指定lv卷組名字
[root@vm227 ~]# lvcreate -L 2G -n mysqldata volume-group1 ####邏輯卷可使用lvs(簡單)和lvdisplay(詳細)命令查看#### [root@vm227 ~]# lvdisplay --- Logical volume --- LV Path /dev/volume-group1/mysqldata LV Name mysqldata VG Name volume-group1 LV UUID EoJlyJ-DA2l-Z827-YLIU-3Rts-BJTa-SUMrUY LV Write Access read/write LV Creation host, time vm227.happy.local, 2016-04-24 11:45:16 +0800 LV Status available # open 0 LV Size 2.00 GiB Current LE 512 Segments 1 Allocation inherit Read ahead sectors auto - currently set to 256 Block device 253:1 ###創建成功,命名格式為:/dev/volume-group1/mysqldata####
邏輯卷命令格式:
在/dev目錄下/dev/mapper/VG_NAME-LV_NAME和/dev/VG_NAME/LV_NAME分別為/dev/dm-# 入口
格式化掛
[root@vm227 ~]# mkfs.ext4 /dev/volume-group1/mysqldata [root@vm227 ~]# mkdir /lvm-data [root@vm227 ~]# mount /dev/volume-group1/mysqldata /lvm-mount/ [root@vm227 ~]# cd /lvm-data/ [root@vm227 lvm-data]# ll total 16 drwx------ 2 root root 16384 Apr 24 12:59 lost+found [root@vm227 lvm-data]# cp /etc/issue . [root@vm227 lvm-data]# ll total 20 -rw-r--r-- 1 root root 47 Apr 24 14:47 issue drwx------ 2 root root 16384 Apr 24 12:59 lost+found ####邏輯卷掛載完成,并且可以讀寫了#### ####要創建和掛載其它的邏輯卷,我們重復以上過程#### ####使用lvremove我們可以刪除邏輯卷#### [root@vm227 ~]# umount /lvm-data/ [root@vm227 ~]# lvremove /dev/volume-group1/mysqldata
(五)擴展卷組(LV)
調整邏輯卷大小的功能是LVM最有用的功能。下面我們將會把先前創建的邏輯卷‘mysqldata’擴大至6G。擴展邏輯卷,首先擴展物理邊界,然后擴展文件系統邊界。
擴展物理使用命令:vgextend
lvextend -L [+]#[mMgGtT] /dev/VG_NAME/LV_NAME
擴展文件系統使用命令:resize2fs
resize2fs /dev/VG_NAME/LV_NAME #[mMgGtT]
[root@vm227 ~]# lvextend -L 6G /dev/volume-group1/mysqldata Extending logical volume mysqldata to 6.00 GiB Logical volume mysqldata successfully resized [root@vm227 ~]# lvdisplay --- Logical volume --- LV Path /dev/volume-group1/mysqldata LV Name mysqldata VG Name volume-group1 LV UUID EoJlyJ-DA2l-Z827-YLIU-3Rts-BJTa-SUMrUY LV Write Access read/write LV Creation host, time m227.happy.local, 2016-04-24 11:45:16 +0800 LV Status available # open 1 LV Size 6.00 GiB Current LE 1536 Segments 2 Allocation inherit Read ahead sectors auto - currently set to 256 Block device 253:1 [root@vm227 ~]# df -h Filesystem Size Used Avail Use% Mounted on /dev/sda3 19G 1.3G 17G 8% / tmpfs 491M 0 491M 0% /dev/shm /dev/sda1 194M 29M 155M 16% /boot /dev/mapper/volume--group1-mysqldata 2.0G 68M 1.9G 4% /lvm-data #####可以看到已經成功提擴展成6G了,但是文件系統還是2G,下面擴展文件系統#### [root@vm227 ~]# resize2fs /dev/volume-group1/mysqldata 6G resize2fs 1.41.12 (17-May-2010) Filesystem at /dev/volume-group1/mysqldata is mounted on /lvm-data; on-line resizing required old desc_blocks = 1, new_desc_blocks = 1 Performing an on-line resize of /dev/volume-group1/mysqldata to 1572864 (4k) blocks. The filesystem on /dev/volume-group1/mysqldata is now 1572864 blocks long. [root@vm227 ~]# df -h Filesystem Size Used Avail Use% Mounted on /dev/sda3 19G 1.3G 17G 8% / tmpfs 491M 0 491M 0% /dev/shm /dev/sda1 194M 29M 155M 16% /boot /dev/mapper/volume--group1-mysqldata 6.0G 68M 5.6G 2% /lvm-data ####已經成功擴成功#####
(六)縮減邏輯卷(LV)
縮減LVM卷大小,命令的順序相當重要。注意:縮減危險系統很高,操作請謹慎。減少邏輯卷的空間大小一定要大于儲存的數據大小,否則存儲在后面的數據會丟失或者損壞。
減小邏輯卷大小使用命令:lvreduce
lvreduce -L [-]#[mMgGtT] /dev/VG_NAME/LV_NAME
[root@vm227 ~]# df -h ###查看空間使用情況 [root@vm227 ~]# umount /dev/volume-group1/mysqldata ###卸載掛載卷。 [root@vm227 ~]# e2fsck -f /dev/volume-group1/mysqldata ###檢測磁盤錯誤。 [root@vm227 ~]# resize2fs /dev/volume-group1/mysqldata 4G #### 縮小文件系統。 [root@vm227 ~]# lvreduce -L 4G /dev/volume-group1/mysqldata ####減少邏輯卷大小 WARNING: Reducing active logical volume to 100.00 MiB THIS MAY DESTROY YOUR DATA (filesystem etc.) Do you really want to reduce lv1? [y/n]: y Reducing logical volume lv1 to mysqldata to 4.00 GiB Logical volume mysqldata successfully resized #####最后,驗證調整后的邏輯卷大小#### [root@vm227 ~]# lvdisplay --- Logical volume --- LV Path /dev/volume-group1/mysqldata LV Name mysqldata VG Name volume-group1 LV UUID EoJlyJ-DA2l-Z827-YLIU-3Rts-BJTa-SUMrUY LV Write Access read/write LV Creation host, time vm227.happy.local, 2016-04-24 11:45:16 +0800 LV Status available # open 0 LV Size 4.00 GiB Current LE 1024 Segments 2 Allocation inherit Read ahead sectors auto - currently set to 256 Block device 253:1 [root@vm227 ~]# df -h Filesystem Size Used Avail Use% Mounted on /dev/sda3 19G 1.3G 17G 8% / tmpfs 491M 0 491M 0% /dev/shm /dev/sda1 194M 29M 155M 16% /boot /dev/mapper/volume--group1-mysqldata 4.0G 68M 5.6G 2% /lvm-data ####縮減成功####
(七)擴展卷組(VG)
下面介紹擴展卷組的方法,將一個物理卷添加到卷組。假設我們的卷組'volume-group1'已經滿了需要擴大。但硬盤(sdb)已經沒有空閑容量,增加了另外一個硬盤(sdc),如何把sdc的分區添加到卷組以擴展。
[root@vm227 ~]# vgdisplay volume-group --- Volume group --- VG Name volume-group1 System ID Format lvm2 Metadata Areas 3 Metadata Sequence No 4 VG Access read/write VG Status resizable MAX LV 0 Cur LV 1 Open LV 0 Max PV 0 Cur PV 3 Act PV 3 VG Size 16.02 GiB PE Size 4.00 MiB Total PE 4101 Alloc PE / Size 1024 / 4.00 GiB Free PE / Size 3077 / 12.02 GiB VG UUID Z3mTLf-44wM-ZLBM-SySO-7IZE-3xzh-mSDswO ####硬盤/dev/sdc分區/dev/sdc1### ####如何給硬盤/dev/sdc分區,就不介紹了### [root@vm227 ~]# # pvcreate /dev/sdc1
物理卷已經準備好了,將它增加到已存在的卷組'volume-group1'上。
增加VG使用命令:vgextend
vgextend VolumeGroupName PhysicalDevicePath [PhysicalDevicePath…]
[root@vm227 ~]# vgextend volume-group1 /dev/sdc1 ####使用vgdisplay來驗證(可以看到卷組大小已經增大)#### [root@vm227 ~]# vgdisplay --- Volume group --- VG Name volume-group1 System ID Format lvm2 Metadata Areas 4 Metadata Sequence No 5 VG Access read/write VG Status resizable MAX LV 0 Cur LV 1 Open LV 0 Max PV 0 Cur PV 4 Act PV 4 VG Size 19.03 GiB PE Size 4.00 MiB Total PE 4871 Alloc PE / Size 1024 / 4.00 GiB Free PE / Size 3847 / 15.03 GiB VG UUID Z3mTLf-44wM-ZLBM-SySO-7IZE-3xzh-mSDswO 以上看到卷組已經成功擴展了。
(八)縮減卷組(VG)
縮減VG使用命令:vgreduce
vgreduce之前先做pvmove 移動PE
pvmove PhysicalDevicePath [PhysicalDevicePath…]
vgreduce VolumeGroupName PhysicalDevicePath [PhysicalDevicePath…]
(九)快照組(snapshot)
快照卷是將元數據重新復制一份做為快照卷訪問入口,當數據本身發生變化時,將數據復制一份到快照空間,然后修改原數據,快照卷主要用于數據備份,創建的快照卷必須要和邏輯卷在同一卷組上,并且快照卷大小要大于等于快照卷存在周期內數據增長量。
創建快照使用命令:lvcreate
lvcreate -L #[mMgGtT] -p r -s -n snapshot_lv_name(快照卷名字) original_lv_name(原卷名字)
-L:指定快照卷大小
-p: 指權限,一般為只讀
-s: 指創建為快照卷
-n:指定快照卷名字
如:# lvcreate -L 6G -p r -s -n snap_mysql /dev/volume-group1/mysqldata
刪除快照使用命令:lvremove
lvremove snapshot_lv_name
總結
總結一下,LVM是一個非常給力的工具,用來創建和管理可變大小的分區。本文中,我們介紹了動態分區如何在LVM中創建和使用。我們也介紹了擴展/縮小邏輯卷和卷組的方法和如何增加一個新的磁盤到LVM。
水平有限, 還有許多不足之處,以后慢慢改進,如果有錯誤及時指出,謝謝?。?!~
作者: chrony QQ: 840595308
感謝: MageEdu
原創文章,作者:chrony,如若轉載,請注明出處:http://www.www58058.com/15307
最后的聯系方式亮了,不擔心被爬蟲抓?