最近新上線SSD伺服器,SSD成本太高,所以上線SSD硬碟不能像HDD那樣直接來個幾TB容量,只能是根據業務的需要來逐漸擴容硬碟,於是本篇文章的主題就這樣產生了:Linux動態擴容硬碟容量,保留原有的資料不變。

傳統意義上的VPS硬碟擴充使用的是掛載,即將某一個新硬碟重新劃分為另一個分割區,然後將該分割區掛載到原來的硬碟的某一個目錄下。這樣的做法簡單方便,如果只是用於儲存擴充功能還是可行的,但是對於多需求的儲存業務就力不從心了。

而對硬碟進行動態擴容,則是保留原有的資料不變的情況下,增加或減少硬碟的空間容量,從而達到滿足我們日常建站需求。這篇文章就來介紹Linux LVM管理磁碟空間的方法,LVM是Linux環境中對磁碟分割區進行管理的一種機制。

Linux獨立伺服器與VPS主機硬碟動態擴容-LVM邏輯磁碟區擴大縮小方法

Linux LVM是建立在硬碟和分割區之上、檔案系統之下的邏輯層,可提高磁碟分割管理的彈性。對於Linux磁碟空間管理的問題,我們也可以透過清理、掛載雲端磁碟、共享等方式來解決空間不足的情況,這裡有:

  1. Linux系統磁碟空間佔滿的解決方法-No Space Left on Device錯誤
  2. VPS掛載國內外網盤實現免費擴容工具:Rclone,COS-Fuse及OSSFS
  3. Linux共享資料夾目錄三種方法-NFS遠端掛載,GlusterFS共享儲存和samba共享目錄

一、resize2fs指令直接擴容

命令使用範例:

resize2fs -f /dev/vda1  #针对的是ext2、ext3、ext4文件系统
#参数说明
-d:打开调试特性;
-p:打印已完成的百分比进度条;
-f:强制执行调整大小操作,覆盖掉安全检查操作;
-F:开始执行调整大小前,刷新文件系统设备的缓冲区。

如果你的Linux分割區採用了LVM(SolusVM VPS都使用的LVM),那麼你可以直接使用resize2fs指令來擴充原有的磁碟。這種情況一般見於:用df -h指令查看硬碟的容量小於用fdisk –l指令查看硬碟分割區的容量,如下圖:

執行resize2fs指令擴充指令後,再查看,硬碟分割區的容量增加了。

二、新建分區掛載給硬碟擴容

如果你的主機商在原來分配硬碟時沒有全部做好分區,或者是重新劃分了硬碟大小(SolusVM VPS升級硬碟就是這樣),這時你會發現用df -h指令查看硬碟的容量等於用fdisk –l指令查看硬碟分割區的容量,但是小於fdisk的總空間, 如下圖:

這時候我們就可採用新建分割區然後掛載給硬碟達到擴充的目的了。執行指令:fdisk /dev/vda(依實際調整硬碟路徑),進入fdisk分割區,依序輸入n(新建分割區)→p(主分割區)→1.2.3(分區號碼)→回車→p(查看分割區)→w(儲存)。

新建的分割區不是LVM格式,我們還需要再進入fdisk指令,然後輸入:t(轉換格式)→分割區號1.2.3→8e(LVM)→p(檢視分割區)→w(保存)。如下圖:

利用上面的方法,我們將多出來的3GB硬碟新建了一個sda3的分割區,並設定為LVM格式。重新啟動VPS主機生效,或執行指令(該指令在CentOS 6可能會不支援):partprobe。 (如果提示該指令不存在,先執行安裝:yum -y install parted

使用以下指令將整個分割區建立為LV邏輯磁碟區:(關於PV、VG、LV的詳細介紹請參考第三部分內容)

pvcreate /dev/vda3  //创建物理卷
vgcreate qyfoutt /dev/vda3   //创建逻辑卷组
vgchange -ay qyfoutt //激活逻辑卷组
vgdisplay qyfoutt | grep "Total PE"  //查看该卷组所有的PE
lvcreate -l 17919 -n qimm qyfoutt  //创建逻辑卷
mkfs.ext4 /dev/qyfoutt/qimm //格式化逻辑卷

這裡我建立一個名為qyfoutt的邏輯磁碟區組,共70GB可供分配。然後創建了一個名為qimm的邏輯卷,將70GB都賦予給它。開機自動掛載,新增加的/dev/qyfoutt/qimm 分割區掛載到某一個目錄下了。格式如下:

vim /etc/fstab 
/dev/sdb1(磁盘分区)  /data1(挂载目录-需要提前创建好) ext4(文件格式,也可写ext3)defaults  0  0 

/dev/qyfoutt/qimm     /ttfou            ext4    defaults        0 0

掛載所有目錄:mount -a(注意是英文的-)掛載成功。

三、新增硬碟直接擴充到原硬碟上

如果你買了第二塊硬碟,這時候不需要掛載了,直接將新硬碟的空間容量增加到原硬碟上。如下圖,已有了一個256GB的硬碟(已劃成3個分區,其中sda3為lvm格式)。依照上面新建分割區的方法,將整個硬碟劃分為一個分割區:sdb1。

3.1  新建PV物理卷

基本指令:

pvcreate /dev/sda3 #新建PV
#有两个以上的分区还可以一起新建PV
pvcreate /dev/sda3 /dev/sdb1

-f:强制创建物理卷,不需要用户确认;
-u:指定设备的UUID;
-y:所有的问题都回答“yes”;
-Z:是否利用前4个扇区。

pvs  #查看pv基本信息
pvdisplay  #查看pv详细信息

如下圖為sdb1建立了PV物理卷。

3.2  擴容VG卷組

依照上面的方法,我們已經建立了PV、VG和LV,並且將LV掛載到了某一個目錄。現在把將要建置的PV加入到原來的VG中。基本命令範例:

vgcreate wzfou /dev/sda3 /dev/sdb1 #将两个PV卷加入到卷组wzfou
-l:卷组上允许创建的最大逻辑卷数;
-p:卷组中允许添加的最大物理卷数;
-s:卷组上的物理卷的PE大小。

vgs或者vgdisplay来查看创建的卷组

vgextend qyfoutt /dev/sdb1 #扩容VG组

如下圖我把sdb1和sda3加入了同一個VG組。

s可以指定PE大小,例如我們在SolusVM主控與被控安裝過程中就要求PE為128MB,這裡我們就可以透過此指令來指定PE大小了。後期如果還有新的PV的話,可以繼續往VG裡加:

3.3  擴容LV邏輯卷

上面我們已經擴容了VG卷容量,現在我們只需要將原來的LV擴容到所有的VG卷容量即可,指令如下:

vgdisplay qyfoutt | grep "Total PE"  #查看所有PE

lvresize -l 1279 /dev/qyfoutt/qimm  #将VG组所有空间都给LV,1279是最后一个PE

resize2fs /dev/qyfoutt/qimm  #重设LV大小

例:VG組有5GB容量,VG下的LV只有3GB。

現在將VG組剩餘的2GB空間全部給LV,完成LV的擴容。

四、總結

如果要給硬碟擴容,建議使用LVM的方式來管理硬碟擴容,後期想要再增加硬碟對於LVM來說是一件非常簡單的事情。擴容的基本順序是:增加PV→VG組擴容→LV擴容

增加PV有兩種方式:一種是新增硬碟再做分割區,另一種是在原有的硬碟上新建分割區。無論用哪種方式為硬碟擴容,首先要建立實體磁碟區PV,之後建立磁碟區組VG,最後才建立邏輯磁碟區LV。

發表評論