故事前景
有一vmware虛擬機,磁盤大小設置為默認的20GB,安裝的是CentOS7.4,安裝CentOS默認使用GPT分區格式建立LVM分區。分區格式如下圖所示:
系統根分區"/",其大小為17G,現覺得空間過小,滿足不了使用需求**,因此產生了基于LVM技術對它進行擴容的想法。以下是具體的操作過程。
1. 增加磁盤空間
增加磁盤空間,可以調整原磁盤的大小,或者給虛擬機添加新的硬盤,操作期間都先關閉虛擬機。
我選擇的是直接將原有的磁盤空間加大。操作如下圖所示:
將原磁盤大小由20GB,拖動至100GB。確認以后,vmware會彈出提示:新的磁盤需要在虛擬機系統中進行相應操作后才能使用。(大致意思,對話框沒有截圖)
2. 進行LVM擴容
啟動虛擬機,進入以后"df -h"查看分區和調整前一樣。然后按如下順序開始LVM擴容操作。
2.1 給新增加的硬盤建立分區
因為系統使用GPT分區格式建立的分區,所以這里使用"parted"指令完成對新增加硬盤空間的分區工作。(parted指令需要yum install parted安裝)
系統中只有一塊硬盤,剛才也只是將這塊硬盤大小增加了,所以其設備名仍為前面圖中的"/dev/sda",然后使用"parted /dev/sda"完成LVM分區操作。如果是新增加了另一塊磁盤,則先通過"parted -l"查找到系統識別出來的磁盤設備名,再進行后續操作。
-
print
查看現有分區
node1-原磁盤分區.png -
mkpart primary 21.5GB 100%
21.5GB是原有磁盤最后一個分區的位置,放在此處作為新建分區的起始位置,100%則表示整塊磁盤的最大容量的位置處,簡而言之就是將新增加的磁盤空間全部劃為一個分區。
node1-新建分區.png -
name 4 addpart
4表示分區編號,在原有的三個分區之上又新建了一個分區,所以其編號自然為4,"addpart"自定義的分區名稱,此步也可省略。
node1-給新建分區命名.png -
set 4 lvm
將新建的分區設置為lvm分區。
node1-將新建分區創建為lvm.png
然后使用"quit"退出"parted"交互模式。parted區別于fdisk的地方,除了支持超過2T大小的分區外就是它的操作執行后即刻生效,無需顯示地執行"w"操作。
2.2 LVM分區擴容
"parted"分區完成以后,使用fdisk也可以看到新建分區(sda4)的相關信息,如下可見原磁盤(/dev/sda)新增了80GB空間。
-
pvcreate /dev/sda4
將/dev/sda4創建為新的PV。
node1-創建新的PV.png -
pvdisplay
查看磁盤中的PV信息。
node1-PV信息.png
從上可以看到兩個PV都屬于同一個名為"centos"的VG。 -
vgextend centos /dev/sda4
擴容VG的大小,讓centos這個VG包含新增的磁盤(/dev/sda4)。
node1-VG擴容.png -
vgdisplay
查看VG的大小。
node1-VG擴容前的大小.png
node1-VG擴容后的大小.png -
lvextend -L 80G /dev/centos/root
80G表示將名為root的LV擴充到80GB,顯然不夠準確,增加了80GB空間,不應該是擴充至80GB。還可以使用+80GB,或者+unit 表示增加多個單位(扇區)。以下是我lvextend擴容過程。
node1-LV擴容1.png
node1-LV擴容2.png -
resize2fs /dev/centos/root
調整名為root的lv的大小,使其識別到新lv的大小。但出現錯誤"resize2fs: Bad magic number in super-block" centos為vg名,root為lv名。
node1-LV擴容3.png
出現此錯誤的原因是resize2fs只支持ext2,ext3,ext4文件系統分區大小調整。 -
xfs_growfs /dev/mapper/centos-root
通過"mount"指令可以查詢到CentOS7默認使用的是xfs文件系統,因此此處使用xfs_growfs指令調整其大小即可。"xfs_growfs"是xfs文件專用的擴容工具。
node1-xfs分區擴容.png
3. 驗證擴容結果
-
df -h
查看擴容的根分區大小。
node1-根分區擴容后.png
從上面可以看到根分區擴容成功,重啟后系統也工作正常,原磁盤數據未見損壞。