Linux LVM磁盤空間擴容的新方法

導讀

傳統LVM擴容方法需要增加PV磁盤,擴容多次後,服務器的磁盤數量會越來越多,容易增加日後維護存儲和磁盤佈局的難度。當服務器是虛擬機,或者使用SAN/NAS存儲的物理機時,由於分配給服務器磁盤空間可以直接擴容,只需增加原本正在使用中的PV磁盤空間即可完成擴容,這樣分配給服務器的磁盤數量較少,磁盤佈局結構較簡單。


LVM擴容方法介紹

  傳統的LVM擴容方法,是通過添加新的磁盤或者磁盤分區來建立新的PV,再將PV加入到VG中,從而擴大VG空間,再對相關的LV進行擴容,最後增加文件系統空間完成整個擴容工作。這種方法比較適合使用本地存儲的物理機,因爲磁盤空間都是固定的,只能通過增加硬盤來增加磁盤空間,這種方法可以在線完成,無需停機重啓。但擴容多次後,VG中會存在多個PV,磁盤邏輯結構變得複雜,容易增加日後維護存儲和磁盤分區佈局的難度。

  當服務器是虛擬機,或者使用SAN/NAS存儲的物理機時,由於分配給服務器的磁盤空間可以直接擴容,只需增加原本正在使用中的磁盤空間即可,無需再添加額外磁盤作爲PV,這樣分配給服務器的磁盤數量較少,磁盤佈局結構較簡單。

  本文將介紹如何通過使用GParted分區軟件擴大PV空間的方式來擴容整個VG,從而最終擴大文件系統的使用空間。

  

擴容PV步驟 

  我們以運行在ESXi虛擬機上的Centos/RHEL 7版本Linux爲例,該虛擬機安裝了兩塊硬盤,大小分別爲10GB和5GB,作爲PV,建立了一個VG。

  1. 查看系統的磁盤分區結構佈局:


  wKioL1YLfVPTY9skAAOcK511YJk228.jpg  


進入parted分區管理界面,鍵入print all查看機器的分區情況,可以看到該機器有兩塊硬盤/dev/sda和/dev/sdb,其中sda有兩個分區,分區sda1爲boot啓動分區,分區sda2爲LVM PV分區,lvm的VG(centos)由兩個LV(root和swap)組成。另外,parted無法識別/dev/sdb,顯示錯誤“unrecognised disk label”。

  分別鍵入pvs、lvs和vgs命令查看LVM的具體情況:

wKioL1YLfruRyevSAAIz7IvNYsQ437.jpg



  可以看到,sda2和sdb均爲LVM VG中的PV,sda2位sda磁盤中的第二個分區,而對於使用sdb整塊硬盤建立的PV,parted是無法識別的,因爲該磁盤爲沒有建立文件系統的裸設備。LVM中有一個VG(centos),VG的大小爲14.5G,該VG由兩個LV,root和swap組成。


2. 增大虛擬機的兩塊硬盤大小。

使用Vsphere Client連接Vcenter,右鍵點擊該虛擬機選擇“編輯設置”,在“硬件”選項卡中,分別將硬盤1和硬盤2的大小各增加5GB:


wKiom1YLf66w16_vAAJ1GYypXHk027.jpg


wKioL1YLf9-g5IIwAAJusLn2JhU974.jpg

  

可以鍵入以下命令系統能夠馬上識別新增空間:

echo '1' > /sys/class/scsi_disk/0\:0\:0\:0/device/rescan 

echo '1' > /sys/class/scsi_disk/0\:0\:1\:0/device/rescan

又或者直接重啓系統,讓內核識別新增空間。


運行parted,鍵入print all free,發現磁盤大小已經增加,而且在磁盤/dev/sda尾部有5GB未分配空間。


wKioL1YLgMSxnEiSAASBEEJJM9A404.jpg

3. 使用GParted分區軟件進行分區

訪問http://www.gparted.org 下載最新版GParted Live CD,比如筆者下載的GParted鏡像文件是gparted-live-0.21.0-1-i586.iso。

將該ISO文件上傳到ESX主機的數據存儲中,然後掛載到虛擬機的光驅中,接着調整啓動順序用該CD引導啓動該虛擬機。

Live CD啓動後能開到該機器硬盤的分區結構和未分配空間:


wKiom1YLgbuRuGWZAAJCvXv5Q-E095.jpg


鼠標右鍵點擊/dev/sda2分區,用鼠標點擊右邊的三角符號,拉動鼠標將分區擴容5GB,點擊“調整大小/移動”,最後點擊工具欄上的“Apply”應用更改。


wKioL1YLgpSS1DGRAAJrJmlUYic871.jpg


點擊工具欄最右邊的按鈕選擇/dev/sdb硬盤,會看到sdb硬盤所有的空間都是未分配,因爲sdb磁盤是直接在上面建立PV的裸設備磁盤,這種磁盤沒有分區表和分區,GParted無法識別並進行分區。


wKiom1YLgeDDUR5pAAHOAEXgCW8389.jpg


卸載光盤,重啓虛擬機進入本地系統,查看PV空間:

[root@user ~]# pvs

  PV        VG     Fmt  Attr PSize PFree

  /dev/sda2 centos lvm2 a--  14.51g 5.00g

  /dev/sdb  centos lvm2 a--   5.00g    0

使用GParted,sda2擴容成功。


鍵入pvresize命令擴容sdb:

[root@user ~]# pvresize -v /dev/sdb

    Using physical volume(s) on command line

    Archiving volume group "centos"metadata (seqno 6).

    Resizing volume "/dev/sdb" to10485760 sectors.

    Resizing physical volume /dev/sdb from 0 to2559 extents.

    Updating physical volume"/dev/sdb"

    Creating volume group backup"/etc/lvm/backup/centos" (seqno 7).

  Physical volume "/dev/sdb" changed

  1 physical volume(s) resized / 0 physicalvolume(s) not resized


鍵入pvs、vgs確認擴容後的空間:

[root@user ~]# pvs

  PV        VG     Fmt  Attr PSize PFree

  /dev/sda2 centos lvm2 a--  14.51g 5.00g

  /dev/sdb  centos lvm2 a--  10.00g 5.00g

[root@user ~]# vgs

  VG    #PV #LV #SN Attr   VSize  VFree

  centos  2   2   0 wz--n- 24.50g 10.00g

可以看到兩個PV和VG中都有可分配的剩餘空間了,PV擴容完畢。


LV及文件系統擴容

1. 擴容LV

   將LV swap擴容到3GB,另外的LV root則分配剩餘的全部空間。

   查看原來LV空間情況:

[root@user ~]# lvs

  LV  VG     Attr       LSize Pool Origin Data%  Move LogCpy%Sync Convert

  root centos -wi-ao---- 13.50g                                            

  swap centos -wi-ao----  1.00g          

       

現在的root LV大小爲13.5G,swap LV大小爲1G。


將LV swap的空間增加2GB:

[root@user ~]# lvextend -L +2g /dev/centos/swap

  Extending logical volume swap to 3.00 GiB

  Logical volume swap successfully resized


查看VG剩餘PE數量:

 --- Volume group ---

  VG Name               centos

  System ID            

  Format                lvm2

  Metadata Areas        2

  Metadata Sequence No  8

  VG Access             read/write

  VG Status             resizable

  MAX LV                0

  Cur LV                2

  Open LV               2

  Max PV                0

  Cur PV                2

  Act PV                2

  VG Size               24.50 GiB

  PE Size               4.00 MiB

  Total PE              6273

  Alloc PE / Size       4225 / 16.50 GiB

  Free PE / Size       2048 / 8.00 GiB

  VG UUID              U8Io1J-a7CY-X81w-lpiA-wj5A-3XOa-vKlWFL

剩餘2048個PE。


擴容root LV:

[root@user ~]# lvextend -l +2048 /dev/centos/root

  Extending logical volume root to 21.50 GiB

  Logical volume root successfully resized


查看LV大小確認:

[root@user ~]# lvextend -l +2048 /dev/centos/root

  Extending logical volume root to 21.50 GiB

  Logical volume root successfully resized   

兩個LV已經擴容成功。


2. 擴容根文件系統

LV擴容後需文件系統還沒有擴容,鍵入df –h查看空間:

[root@user ~]# df -h

Filesystem               Size  Used Avail Use% Mounted on

/dev/mapper/centos-root   14G 4.2G  8.5G  33% /

devtmpfs                 489M     0 489M   0% /dev

tmpfs                    498M   80K 498M   1% /dev/shm

tmpfs                    498M  7.0M 491M   2% /run

tmpfs                    498M    0  498M   0% /sys/fs/cgroup

/dev/sda1                477M   95M 354M  22% /boot

根分區現在大小是14GB。


使用resize2fs命令對跟分區文件系統進行在線擴容:

[root@user ~]# resize2fs -p /dev/centos/root

resize2fs 1.42.9(28-Dec-2013)

Filesystem at/dev/centos/root is mounted on /; on-line resizing required

old_desc_blocks = 2,new_desc_blocks = 3

The filesystem on/dev/centos/root is now 5637120 blocks long.


再次查看分區大小:

[root@user ~]# df -h

Filesystem               Size  Used Avail Use% Mounted on

/dev/mapper/centos-root   22G 4.2G   16G  21% /

devtmpfs                 489M     0 489M   0% /dev

tmpfs                    498M   80K 498M   1% /dev/shm

tmpfs                    498M  7.0M 491M   2% /run

tmpfs                    498M     0 498M   0% /sys/fs/cgroup

/dev/sda1                477M  95M  354M  22% /boot

分區大小已經擴容爲22GB。


3. 擴容swap分區

Swap分區不能直接擴容,需先將其刪除再重建。

分別使用free –m和swapon –s命令查看swap分區大小。可以看到這時候swap分區大小還是1GB。

[root@user ~]# free -m

            total       used       free    shared    buffers     cached

Mem:       994        635        358    7         55         204

-/+ buffers/cache:      375       618

Swap:       1023       0      1023

 

[root@user ~]# swapon -s

Filename                       Type           Size    Used   Priority

/dev/dm-0                      partition      1048572 0       -1



停止swap分區:

[root@user ~]# swapoff -v /dev/centos/swap

swapoff /dev/centos/swap


重新建立swap分區:

[root@user ~]# mkswap /dev/centos/swap

mkswap:/dev/centos/swap: warning: wiping old swap signature.

Setting up swapspaceversion 1, size = 3145724 KiB

no label,UUID=6dca44dc-9bf2-40b2-b0c8-d73cbe409002


啓用Swap分區:

[root@user ~]# swapon -v /dev/centos/swap

swapon /dev/centos/swap

swapon:/dev/mapper/centos-swap: found swap signature: version 1, page-size 4, samebyte order

swapon:/dev/mapper/centos-swap: pagesize=4096, swapsize=3221225472, devsize=3221225472


再次查看swap分區大小,swap分區已變成了3GB:

[root@user ~]# swapon -s

Filename                                Type            Size    Used   Priority

/dev/dm-0                               partition       3145724 0       -1

[root@user ~]# free -m

             total       used       free    shared    buffers     cached

Mem:         994        636       357          7         55        204

-/+ buffers/cache:      376        617

Swap:       3071          0       3071



注意事項:

  建立LVM時,若使用整塊硬盤作爲PV,應先在磁盤上建立分區表和分區,再設置分區的lvm標誌位(Parted中使用set lvm on,fdisk中按t,然後設置8e ),不然的話就會出現本例子中sdb磁盤無法被GParted或者其他分區軟件識別的情況,很容易被誤操作。另外,對任何分區操作前應先對分區數據進行備份。


經驗總結:

  通過直接增大PV空間來對LVM磁盤分區進行擴容,可以減少PV磁盤數量,使磁盤佈局簡單化,方便存儲以及磁盤日後的維護工作。但需要使用GParted光盤引導服務器重啓進行分區,若服務器不能停機則不太適合該方法。這種方法比較適合使用虛擬機或者共享存儲的機器,磁盤可以直接擴容,加上虛擬機環境機器啓動速度較快,且GParted分區簡單快速,分區所需的停機時間比較短。


原文爲博主所著,並刊登於《網絡運維與管理》雜誌2015.07期。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章