最近新上線SSD伺服器,SSD成本太高,所以上線SSD硬碟不能像HDD那樣直接來個幾TB容量,只能是根據業務的需要來逐漸擴容硬碟,於是本篇文章的主題就這樣產生了:Linux動態擴容硬碟容量,保留原有的資料不變。
傳統意義上的VPS硬碟擴充使用的是掛載,即將某一個新硬碟重新劃分為另一個分割區,然後將該分割區掛載到原來的硬碟的某一個目錄下。這樣的做法簡單方便,如果只是用於儲存擴充功能還是可行的,但是對於多需求的儲存業務就力不從心了。
而對硬碟進行動態擴容,則是保留原有的資料不變的情況下,增加或減少硬碟的空間容量,從而達到滿足我們日常建站需求。這篇文章就來介紹Linux LVM管理磁碟空間的方法,LVM是Linux環境中對磁碟分割區進行管理的一種機制。
Linux LVM是建立在硬碟和分割區之上、檔案系統之下的邏輯層,可提高磁碟分割管理的彈性。對於Linux磁碟空間管理的問題,我們也可以透過清理、掛載雲端磁碟、共享等方式來解決空間不足的情況,這裡有:
- Linux系統磁碟空間佔滿的解決方法-No Space Left on Device錯誤
- VPS掛載國內外網盤實現免費擴容工具:Rclone,COS-Fuse及OSSFS
- 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。