【前言】
幹運維一年以來,已經遇到好幾次需要擴展目錄空間的情景,每次都是同事幫忙解決,這次花一點時間瞭解下。在某搜索引擎上查閱大量資料以及諮詢大佬們的幫助下,有了點自己的小小的理解,如有不對,還請各位指出~
【相關名詞】
在進行步驟之前,先來了解幾個名詞,在Linux存儲系統中,有以下概念名詞:
物理存儲介質:
系統的物理存儲設備,也就是常說的磁盤/硬盤,在linux系統中查看標識如:/dev/sda、/dev/hda等。
物理卷(Physical Volume,PV):
是具體的硬盤分區,在linux系統中查看標識如:/dev/sda1、/dev/sda2等,是lvm的基本存儲單元,可以理解爲加了lvm相關管理參數的物理存儲介質。
物理塊(PE):
物理卷pv中可以分配的最小存儲單元,PE的大小可以指定,默認爲4MB
卷組(Volume Group,VG):
顧名思義,物理卷的組合,由一個或多個物理卷組成,類似與windows中的物理硬盤。卷組(VG)就好比一個櫃子,物理卷(PV)就是這個櫃子的抽屜。
邏輯卷(Logical Volume,LV):
可以類比爲windows中的c盤、d盤這樣子,具體在linux中的標識就是各個目錄,比如:/、/home、/data。我們現在用的CentOS的文件系統就基本是建立在這個之上的。
邏輯塊(LE):
邏輯卷LV中可以分配的最小存儲單元,在同一個卷組中LE和PE是相同的,並且一一對應
邏輯卷管理(Logical Volume Manager,LVM):
Linux環境中介於底層硬盤和文件系統中間的一種管理機制。它的原理就是通過對物理硬盤進行封裝爲物理卷(pv),添加到一個資源池--卷組(vg),然後再劃分各個邏輯卷(lv)提供給上層應用。如此一來,上層應用是通過邏輯卷對底層物理硬盤進行操作,這樣做的好處在於,可以靈活的增加/縮減空間。
爲什麼說能靈活的增加/縮減空間呢?如果上層應用是直接對接物理硬盤的,你一個盤滿了,那麼要怎麼達到擴展空間的目的呢?最先想到的是不是換個大點的物理硬盤,然後把文件拷貝到新盤去?如果說文件不大還好說,如果文件是幾個TB,那怎麼辦?好,就算幾個TB,你可以等,那如果是幾個PB呢?怎麼解決?還是用拷貝的方式?很顯然不是很現實,這個時候lvm的優勢就展現出來了,我只需要將新增的物理硬盤添加進卷組(VG),然後再給需要擴展的盤添加空間就可以了,是不是省去了拷貝這麼個步驟呢?
在別人博客借個圖,如下圖描述了整個lvm的大致架構流程,更好理解點。
那麼你會好奇了,我要如何進行這個空間的擴展/縮減呢?接下來就是具體的擴展內容了。
簡潔步驟見文末,以下爲詳細講解步驟
【lvm擴展已有磁盤】
首先給虛擬機添加一塊新的硬盤,這裏我加了個10G的硬盤
1、查看新增硬盤是否成功,如下圖可以看到新增了個/dev/sdb盤
fdisk -l
2、創建硬盤分區
fdisk /dev/sdb
3、改變分區格式
4、查看是否分區成功
fdisk -l
可以看到已經出現了/dev/sdb1,但是此時還並未真正成爲一個pv,需要進行下一步。
5、創建pv
pvcreat /dev/sdc1
6、查看確認pv創建成功
pvdisplay
7、查看現有的vg
vgdisplay
這裏我需要擴展根目錄所在的vg,即圖中vg名爲centos
8、擴展vg
vgextend centos /dev/sdb1
9、查看vg是否擴展成功
vgdisplay
可以看到Free PE 已經變爲10G了。
10、查看你想要擴展的目錄的lv路徑
lvdisplay
這裏我準備擴展根目錄,如圖路徑爲/dev/centos/root
11、擴展lv
lvextend -l +100%free /dev/centos/root
通過vgdisplay查看vg的free pe已經變爲0了,alloc pe也由原來的50G變爲60G了,但是這時候還需要最後一步
12、刷新格式xfx格式文件系統大小
xfs_growfs /dev/centos/root
這裏需要根據你的格式來用不同的命令,如果不是xfs系統就不能用這個命令,可以看到已經更新了,至此,擴展就完成了
簡潔版本:
1、分區
[root@VM171-test-ng_proxy ~]# fdisk /dev/sdb
Welcome to fdisk (util-linux 2.23.2).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
Device does not contain a recognized partition table
Building a new DOS disklabel with disk identifier 0xb5ab0716.
Command (m for help): n
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p): p
Partition number (1-4, default 1): 1
First sector (2048-20971519, default 2048):
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-20971519, default 20971519):
Using default value 20971519
Partition 1 of type Linux and of size 10 GiB is set
Command (m for help): t
Selected partition 1
Hex code (type L to list all codes): 8e
Changed type of partition 'Linux' to 'Linux LVM'
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.
2、創建pv
[root@VM171-test-ng_proxy ~]# pvcreate /dev/sdb1
Physical volume "/dev/sdb1" successfully created.
3、擴展vg
[root@VM171-test-ng_proxy ~]# vgextend centos /dev/sdb1
Volume group "centos" successfully extended
4、擴展lv
[root@VM171-test-ng_proxy ~]# lvextend -l +100%free /dev/centos/root
Size of logical volume centos/root changed from 46.99 GiB (12030 extents) to 56.99 GiB (14590 extents).
Logical volume centos/root successfully resized.
5、刷新xfs文件系統
[root@VM171-test-ng_proxy ~]# xfs_growfs /dev/centos/root
meta-data=/dev/mapper/centos-root isize=512 agcount=4, agsize=3079680 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0 spinodes=0
data = bsize=4096 blocks=12318720, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal bsize=4096 blocks=6015, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
data blocks changed from 12318720 to 14940160
在文末要再次感謝各位大佬耐心給我講解相關的知識點~