2021-05-12 14:32:11
Linux磁碟管理LVM使用手冊
一、LVM簡介
LVM是 Logical Volume Manager(邏輯卷管理)的簡寫,它是Linux環境下對磁碟分割區進行管理的一種機制.Linux使用者安裝Linux作業系統時遇到的一個常見的難以決定的問題就是如何正確地評估各分割區大小,以分配合適的硬碟空間。普通的磁碟分割區管理方式在邏輯分割區劃分好之後就無法改變其大小,當一個邏輯分割區存放不下某個檔案時,這個檔案因為受上層檔案系統的限制,也不能跨越多個分割區來存放,所以也不能同時放到別的磁碟上。而遇到出現某個分割區空間耗盡時,解決的方法通常是使用符號連結,或者使用調整分割區大小的工具,但這只是暫時解決辦法,沒有從根本上解決問題。隨著Linux的邏輯卷管理功能的出現,這些問題都迎刃而解,使用者在無需停機的情況下可以方便地調整各個分割區大小。
二、基本術語
- 物理卷(Physical Volume,PV):指系統的物理儲存裝置:磁碟,如:/dev/hda、/dev/sda等,是儲存系統最底層的儲存單元;
- 卷組(Volume Group,VG):類似於非LVM系統中的物理磁碟,其由一個或多個物理卷PV組成。可以在捲組上建立一個或多個LV(邏輯卷);
- 邏輯卷(Logical Volume,LV):類似於非LVM系統中的磁碟分割區,邏輯卷建立在捲組VG之上。在邏輯捲LV之上可以建立檔案系統(比如/home或者/usr等)。
從上面的定義我們可以了解到:邏輯卷(LV)是建立在卷組(VG)上的,而捲組(VG)則是建立在物理卷(PV)上的。
從中還可以作更深一層的理解:LVM的可伸縮性無非是建立在卷組(VG)和邏輯卷(LV)的可伸縮性的基礎上的:
- 只要存在尚未使用的磁碟或者分割區,就可以動態的擴充套件卷組(VG)的大小;
- 只要捲組(VG)中存在尚未分配的空間,就可以動態的擴充套件邏輯卷的大小。
從以上二點出發就可以達到動態調整分割區大小的目的。
因為本文中很多的命令都是以上述術語的縮寫開頭,因此了解各個縮寫對命令的記憶和使用是非常有幫助的。
三、基本命令
範例中的 vg1
和 lv1
分別為物理卷組名
和邏輯卷名
,可自行替換成任意名稱。
分類 | 命令 | 說明 | 範例 |
---|---|---|---|
PV | pvcreate | 建立物理卷 | pvcreate /dev/sdb1 |
PV | pvdisplay | 顯示已建立的物理卷的詳細資訊 | |
PV | pvs | 顯示已建立的物理卷的匯總資訊 | |
PV | pvremove | 刪除物理卷 | pvremove /dev/sdb1 |
VG | vgcreate | 建立卷組 | pvcreate vg1 /dev/sdb1 /dev/sdb2 … |
VG | vgdisplay | 顯示已建立的卷組的詳細資訊 | |
VG | vgs | 顯示已建立的卷組的匯總資訊 | |
VG | vgextend | 擴充套件卷組 | vgextend vg1 /dev/sdb3 … |
VG | vgreduce | 收縮捲組 | vgreduce vg1 /dev/sdb5 |
VG | vgremove | 刪除捲組 | vgremove vg1 |
LV | lvcreate | 建立邏輯卷 | lvcreate -L 1000M -n lv1 vg1 |
LV | lvdisplay | 顯示已建立的邏輯卷的詳細資訊 | |
LV | lvs | 顯示已建立的邏輯卷的匯總資訊 | |
LV | lvresize | 重設邏輯卷大小 | lvresize -L 1000M /dev/vg1/lv1 |
LV | resize2fs | 更新邏輯卷資訊(ext4) | resize2fs /dev/vg1/lv1 |
LV | lvremove | 刪除邏輯卷 | lvremove /dev/vg1/lv1 |
LV | xfs_growfs | 更新邏輯卷資訊(xfs) | xfs_growfs /dev/vg1/lv1 |
LV | e2fsck | 檢查邏輯卷錯誤(ext4) | e2fsck -f /dev/vg1/lv1 |
四、實驗的操作環境
- 虛擬機器:VirtualBox 5.6.2
- 作業系統:CentOS 7.4
- 磁碟:二塊:一塊安裝作業系統(/dev/sda),容量為20GB; 另一塊用於進行lvm分割區操作(/dev/sdb),容量為10GB
- 因為CentOS 7.4預設沒有安裝支援上述命令的軟體包,因此需要提前安裝
lvm2
軟體包,具體命令為:yum install -y lvm2
五、建立LVM
在這裡我帶著大家從一塊全新的磁碟開始,一步步建立LVM分割區。
流程
先介紹一下流程,以便大家從總體上對建立LVM有一個了解。
1. 對新磁碟進行分割區操作(fdisk
);
2. 逐一變更分割區型別為Linux LVM
(Hex程式碼為:8e
);
3. 針對每個分割區建立物理卷(pvcreate
);
4. 建立卷組(vgcreate
);
5. 建立邏輯卷(lvcreate
);
6. 格式化(mkfs.ext4
/mkfs.xfs
),並掛載(mount
)。
(一)、磁碟分割區及分割區型別更改
使用命令fdisk
對需要進行LVM操作的磁碟/dev/sdb
進行分割區
fdisk /dev/sdb
- 1
輸入n
進行分割區,一共分五個分割區,前三個是主分割區,後二個分割區在擴充套件分割區裡,每個分割區2GB。以下只列出第一個分割區的操作:
命令(輸入 m 獲取幫助):n
Partition type:
p primary (1 primary, 0 extended, 3 free)
e extended
Select (default p): p
分割區號 (2-4,預設 2):
起始 磁區 (4196352-20971519,預設為 4196352):
將使用預設值 4196352
Last 磁區, +磁區 or +size{K,M,G} (4196352-20971519,預設為 20971519):+2G
分割區 2 已設定為 Linux 型別,大小設為 2 GiB
輸入p
列印分割區完成後的情況:
命令(輸入 m 獲取幫助):p
磁碟 /dev/sdb:10.7 GB, 10737418240 位元組,20971520 個磁區
Units = 磁區 of 1 * 512 = 512 bytes
磁區大小(邏輯/物理):512 位元組 / 512 位元組
I/O 大小(最小/最佳):512 位元組 / 512 位元組
磁碟標簽型別:dos
磁碟識別符號:0x231b271d
裝置 Boot Start End Blocks Id System
/dev/sdb1 2048 4196351 2097152 83 Linux
/dev/sdb2 4196352 8390655 2097152 83 Linux
/dev/sdb3 8390656 12584959 2097152 83 Linux
/dev/sdb4 12584960 20971519 4193280 5 Extended
/dev/sdb5 12587008 16781311 2097152 83 Linux
/dev/sdb6 16783360 20971519 2094080 83 Linux
分割區完成後除了擴充套件分割區(上圖的Extended)外,需要變更所有分割區的磁碟型別:原型別為Linux
,變更後為Linux LVM
。這裡只列出針對第一個分割區的操作:
命令(輸入 m 獲取幫助):t
分割區號 (1-6,預設 6):1
Hex 程式碼(輸入 L 列出所有程式碼):8e
已將分割區“Linux”的型別更改為“Linux LVM”
輸入p
列印分割區型別變更後的情況:
命令(輸入 m 獲取幫助):p
磁碟 /dev/sdb:10.7 GB, 10737418240 位元組,20971520 個磁區
Units = 磁區 of 1 * 512 = 512 bytes
磁區大小(邏輯/物理):512 位元組 / 512 位元組
I/O 大小(最小/最佳):512 位元組 / 512 位元組
磁碟標簽型別:dos
磁碟識別符號:0x231b271d
裝置 Boot Start End Blocks Id System
/dev/sdb1 2048 4196351 2097152 8e Linux LVM
/dev/sdb2 4196352 8390655 2097152 8e Linux LVM
/dev/sdb3 8390656 12584959 2097152 8e Linux LVM
/dev/sdb4 12584960 20971519 4193280 5 Extended
/dev/sdb5 12587008 16781311 2097152 8e Linux LVM
/dev/sdb6 16783360 20971519 2094080 8e Linux LVM
以上操作完成後,輸入w
將操作寫入磁碟,完成分割區:
命令(輸入 m 獲取幫助):w
The partition table has been altered!
Calling ioctl() to re-read partition table.
正在同步磁碟。
(二)、建立物理卷
針對新建立的分割區建立物理卷,這是建立LVM的第一步。使用如下命令對每一個分割區進行操作:
pvcreate /dev/sdb1
- 1
其他分割區的操作類似,這裡就不逐一介紹了。
建立完物理卷後,有二種檢視的方法:
1、詳細資訊:pvdisplay,這裡只列出第一個分割區的資訊:
[root@localhost ~]# pvdisplay
"/dev/sdb1" is a new physical volume of "2.00 GiB"
--- NEW Physical volume ---
PV Name /dev/sdb1
VG Name
PV Size 2.00 GiB
Allocatable NO
PE Size 0
Total PE 0
Free PE 0
Allocated PE 0
PV UUID SCIOKN-i2fO-PylF-CJGI-T8Yw-e2dH-BYX0xq
2、匯總資訊:pvs
[root@localhost ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sdb1 lvm2 --- 2.00g 2.00g
/dev/sdb2 lvm2 --- 2.00g 2.00g
/dev/sdb3 lvm2 --- 2.00g 2.00g
/dev/sdb5 lvm2 --- 2.00g 2.00g
/dev/sdb6 lvm2 --- <2.00g <2.00g
(三)、建立卷組
建立物理捲完成後,就需要將物理捲加入到特定的捲組。
下面的操作將前二個分割區/dev/sdb1
和/dev/sdb2
加入到名稱為gv1
的卷組中:
[root@localhost ~]# vgcreate vg1 /dev/sdb1 /dev/sdb2
Volume group "vg1" successfully created
- 1
- 2
檢視卷組也有二種方法進行檢視:詳細資訊和彙總資訊:
1、詳細資訊:
[root@localhost ~]# vgdisplay
--- Volume group ---
VG Name vg1
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 3.99 GiB
PE Size 4.00 MiB
Total PE 1022
Alloc PE / Size 0 / 0
Free PE / Size 1022 / 3.99 GiB
VG UUID N2mK2P-tvev-bex2-LX4C-1DIs-nFci-Ay5e8H
2、匯總資訊:
[root@localhost ~]# vgs
VG #PV #LV #SN Attr VSize VFree
vg1 2 0 0 wz--n- 3.99g 3.99g
(四)、建立邏輯卷
建立捲組完成後,我們就可以在捲組上建立邏輯卷。使用下面的命令,我們在卷組vg1
上建立一個名稱為lv1
、大小為1GB的邏輯卷:
[root@localhost ~]# lvcreate -L 1G -n lv1 vg1
Logical volume "lv1" created.
檢視邏輯卷也有二種方法進行檢視:詳細資訊和彙總資訊:
1、詳細資訊:
[root@localhost ~]# lvdisplay
--- Logical volume ---
LV Path /dev/vg1/lv1
LV Name lv1
VG Name vg1
LV UUID LaLTid-eLAG-DNlq-h4fT-Xiia-PTDG-HnXL3i
LV Write Access read/write
LV Creation host, time localhost.localdomain, 2017-11-08 09:27:21 +0800
LV Status available
# open 0
LV Size 1.00 GiB
Current LE 256
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 8192
Block device 253:0
2、匯總資訊:
[root@localhost ~]# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
lv1 vg1 -wi-a----- 1.00g
(五)、格式化邏輯卷並掛載
使用下面的命令,對邏輯卷lv1
進行格式化:
[root@localhost ~]# mkfs.ext4 /dev/vg1/lv1
格式化完成後,將該邏輯捲掛載到目錄/mnt
上:
[root@localhost ~]# mount /dev/vg1/lv1 /mnt
檢視掛載後的情況:
[root@localhost ~]# df -h
檔案系統 容量 已用 可用 已用% 掛載點
/dev/sda2 17G 1.5G 15G 10% /
devtmpfs 488M 0 488M 0% /dev
tmpfs 497M 0 497M 0% /dev/shm
tmpfs 497M 6.6M 490M 2% /run
tmpfs 497M 0 497M 0% /sys/fs/cgroup
/dev/sda1 976M 115M 795M 13% /boot
tmpfs 100M 0 100M 0% /run/user/0
/dev/mapper/vg1-lv1 976M 2.6M 907M 1% /mnt
(六)、設定開機自動掛載分割區
1、檢視邏輯卷的UUID:
[root@localhost ~]# blkid
/dev/sda1: UUID="ee8a3a12-cb3e-4890-b255-4b706a718600" TYPE="ext4"
/dev/sda2: UUID="5863f890-3eb8-41a5-8239-4f41f48299bd" TYPE="ext4"
/dev/sda3: UUID="f7c02dd9-73e9-4a26-8da7-a2ca29f58747" TYPE="swap"
/dev/sdb1: UUID="2l1Llw-yFjj-YwbF-TtiN-P0XI-i7W8-9Lq4CF" TYPE="LVM2_member"
/dev/sdb2: UUID="h3uEZx-gw1W-1PMM-PPVT-dAuQ-zf1i-3RZThD" TYPE="LVM2_member"
/dev/sdb3: UUID="aFBSn0-0hwb-Mklg-vCKU-nhmF-lk1k-0uP9Ns" TYPE="LVM2_member"
/dev/sdb5: UUID="5kT4gk-6TRC-2jCj-Sbb5-HAeo-P0CE-cJZzm8" TYPE="LVM2_member"
/dev/sdb6: UUID="57LR2H-Kaua-vY0v-QgbQ-9Eej-qHJe-zXsVvf" TYPE="LVM2_member"
/dev/mapper/vg1-lv1: UUID="11262806-d796-4f49-8f08-897181e8ec33" TYPE="ext4"
最後一行就是邏輯卷的資訊,把該行的UUID複製出來,不含引號。
2、編輯fstab:
在最後新增一行,輸入如下內容:
UUID=11262806-d796-4f49-8f08-897181e8ec33 /mnt ext4 defaults 0 0
然後儲存退出(:wq
),重新啟動後檢視結果,如果能正常掛載就沒有問題了。
以上便完成的了LVM的建立和掛載的全部流程。
六、卷組擴容
我們上一節建立LVM
中建立了五個分割區,但只使得了其中二個分割區,在這一節中,我們要把剩餘的三個分割區加入到卷組vg1
中,對其進行擴容。下面的流程只針對新加入的磁碟或者分割區,因此這裡對流程1-3步的操作就不再做介紹了,具體的操作方法可參照建立LVM
。
流程
- 建立新的磁碟分割區(fdisk);
- 變更分割區型別為
Linux LVM
(Hex程式碼為:8e
); - 建立物理卷(
pvcreate
); - 擴充套件卷組(
vgextend
);
擴充套件卷組
使用如下命令將剩餘的三個分割區加入到卷組vg1
[root@localhost ~]# vgextend vg1 /dev/sdb3 /dev/sdb5 /dev/sdb6
Volume group "vg1" successfully extended
檢視擴充套件後的捲組:
[root@localhost ~]# vgs
VG #PV #LV #SN Attr VSize VFree
vg1 5 1 0 wz--n- 9.98g 8.98g
已經完了卷組的擴容。
七、卷組縮容
如果想要對卷組縮容,實際上就是要把加入的卷組的物理卷從卷組中移除。
這時需要注意的是:如果要移除的物理卷,已經被使用的話,移除操作可能會對檔案系統造成操作。因此移除操作應針對未被使用的物理卷。
(一)、確認物理卷使用情況
[root@localhost ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sdb1 vg1 lvm2 a-- <2.00g 0
/dev/sdb2 vg1 lvm2 a-- <2.00g 0
/dev/sdb3 vg1 lvm2 a-- <2.00g <1.99g
/dev/sdb5 vg1 lvm2 a-- <2.00g <2.00g
/dev/sdb6 vg1 lvm2 a-- <2.00g <2.00g
只有PFree
等於PSize
,也就是說沒有被使用的物理卷,還能被列入考慮範圍。根據上面命令的執行結果,只有/dev/sdb5
和/dev/sdb6
二個可以被移除。
檢視卷組的使用情況:
[root@localhost ~]# vgs
VG #PV #LV #SN Attr VSize VFree
vg1 5 0 0 wz--n- 5.99g 9.98g
(二)、捲組縮容
[root@localhost ~]# vgreduce vg1 /dev/sdb5 /dev/sdb6
Removed "/dev/sdb5" from volume group "vg1"
Removed "/dev/sdb6" from volume group "vg1"
檢視結果:
[root@localhost ~]# vgs
VG #PV #LV #SN Attr VSize VFree
vg1 3 1 0 wz--n- <5.99g <1.99g
可以看到VFree
的容量已經減少了,到此完成了捲組縮容
更多詳情見請繼續閱讀下一頁的精彩內容: http://www.linuxidc.com/Linux/2017-12/149610p2.htm
相關文章