磁盤 - 使用LVM進行磁盤擴容(fdisk, LVM, pvcreate, lvcreate, parted)

本文的所有操作屆在Ubuntu 12.04 LTS上驗證成功,其他發行版請自行查閱相關命令。

給某臺服務器或者虛擬機VM進行LVM擴容的前提是,這臺機器在安裝創建的時候開啓了LVM功能。

對於服務器來說,需要擴容時,你可能已經準備好了一個新的磁盤,系統檢測到爲/sdb,而對於雲服務器或者虛擬機來說,可能是vm控制器已經將你的虛擬物理磁盤擴容了,只不過你的系統還沒有利用到這些空間而已。比如用vmware fusion,點擊擴容功能之後進入系統輸入fdisk,發現磁盤分區沒有變化,但是多出了一塊未使用的物理空間。

首先介紹LVM的幾個概念:

    1. 物理卷Physical volume (PV):可以在上面建立卷組的媒介,可以是硬盤分區,也可以是硬盤本身或者回環文件(loopback file)。物理捲包括一個特殊的header,其餘部分被切割爲一塊塊物理區域(physical extents)。 Think of physical volumes as big building blocks which can be used to build your hard drive.

    2. 卷組Volume group (VG):將一組物理卷收集爲一個管理單元。Group of physical volumes that are used as storage volume (as one disk). They contain logical volumes. Think of volume groups as hard drives.

    3. 邏輯卷Logical volume (LV):虛擬分區,由物理區域(physical extents)組成。A "virtual/logical partition" that resides in a volume group and is composed of physical extents. Think of logical volumes as normal partitions.

    4. 物理區域Physical extent (PE):硬盤可供指派給邏輯卷的最小單位(通常爲4MB)。A small part of a disk (usually 4MB) that can be assigned to a logical Volume. Think of physical extents as parts of disks that can be allocated to any partition.

02@02-vm:~$ sudo df

Filesystem                        1K-blocks    Used Available Use% Mounted on

/dev/mapper/02--vm--vg-root  38057472 3501084  32802424  10% /

udev                                1011124       4   1011120   1% /dev

tmpfs                                204196     500    203696   1% /run

none                                   5120       0      5120   0% /run/lock

none                                1020968       0   1020968   0% /run/shm

cgroup                              1020968       0   1020968   0% /sys/fs/cgroup

/dev/sda1                            240972   34482    194049  16% /boot

/dev/loop0                          4872572   32928   4839644   1% /srv/node/vdb

輸入df可發現,/掛載點使用的設備是/dev/mapper/xxx,並不是傳統的/dev/sdax。

輸入lvdisplay,顯示當前正在使用的logical volume(注意這裏目前有兩個,一個是文件系統所在的volume,另一個是swap分區使用的volume,當然,我們需要擴容的是第一個):

02@02-vm:~$ sudo lvdisplay

  --- Logical volume ---

  LV Name                /dev/02-vm-vg/root

  VG Name                02-vm-vg

  LV UUID                vC3dCP-ynJq-qwbf-ZwwX-T1ca-tOo6-5FYVNg

  LV Write Access        read/write

  LV Status              available

  # open                 1

  LV Size                19.00 GiB

  Current LE             9472

  Segments               3

  Allocation             inherit

  Read ahead sectors     auto

  - currently set to     256

  Block device           252:0

  --- Logical volume ---

  LV Name                /dev/02-vm-vg/swap_1

  VG Name                02-vm-vg

  LV UUID                PT5spg-Ll4p-WAij-g2QB-PSmu-qaIr-gxc6Nf

  LV Write Access        read/write

  LV Status              available

  # open                 2

  LV Size                2.00 GiB

  Current LE             511

  Segments               1

  Allocation             inherit

  Read ahead sectors     auto

  - currently set to     256

  Block device           252:1

輸入vgdisplay,顯示當前的volume group,注意VG SIZE,這裏應該是你當前的可用空間大小,待擴容完畢,這裏顯示的應該是最終的大小。

02@02-vm:~$ sudo vgdisplay

  --- Volume group ---

  VG Name               02-vm-vg

  System ID

  Format                lvm2

  Metadata Areas        2

  Metadata Sequence No  5

  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               19.75 GiB

  PE Size               4.00 MiB

  Total PE              10177

  Alloc PE / Size       9983 / 39.00 GiB

  Free  PE / Size       194 / 776.00 MiB

  VG UUID               GFrHkW-EZFQ-vuCo-b4Pp-F1Lm-FV8B-NcbMmD

輸入pvdisplay,顯示當前的physical volume,

02@02-vm:~$ sudo pvdisplay

  --- Physical volume ---

  PV Name               /dev/sda5

  VG Name               02-vm-vg

  PV Size               19.76 GiB / not usable 2.00 MiB

  Allocatable           yes (but full)

  PE Size               4.00 MiB

  Total PE              5058

  Free PE               0

  Allocated PE          5058

  PV UUID               RsGi6C-g0lm-SzJ1-9rw4-dMEi-Q633-9wo1Gd 

現在開始進行LVM擴容:

1. 首先查看fdisk

$ sudo fdisk -l

   Device Boot      Start         End      Blocks   Id  System

/dev/sda1   *        2048      499711      248832   83  Linux

/dev/sda2          501760    41940991    20719616    5  Extended

/dev/sda5          501760    41940991    20719616   8e  Linux LVM

因爲這臺機器默認開啓了LVM,所以目前有一個extended分區和一個LVM分區,並且他們是完全重疊的。

這是因爲,LVM分區作爲一個虛擬的分區,完全佔用了這個extended分區,原理圖見下:

使用LVM進行磁盤擴容(fdisk, <wbr>LVM, <wbr>pvcreate, <wbr>lvcreate, <wbr>parted)

因此,現在需要做的就是將extended partition (sda2)擴展到最大,然後創建一個新的LVM logical partition (sda6),用它來填滿sda2。

使用parted命令來擴展sd2:進入parted交互模式後,可以使用help xxx來提示幫助。

help resize

resize NUMBER START END                  resize partition NUMBER and its file system

這裏number輸入2, start和end參見fdisk的數據(不過parted已經足夠智能地將start默認值設置成了sda5的結束,end默認值設置成物理磁盤的末尾)

接着,回到fdisk,使用它創建一個新的logical分區

n(new) -> l(logical);再選擇t,更改這個分區的類型id,設置成8e,即LVM,默認創建的類型不是LVM;w,保存退出;重啓。

這時候,再查看fdisk,發現已經多了一個sda6了,現在要做的就是將sda6作爲一個pv,加入到vg裏來,從而能夠給lv擴容。(忘了關鍵詞的話請查上文)

sudo pvcreate /dev/sda6

pvdisplay

# vgextend - add physical volumes to a volume group

# 將新的pv加入到原有的vg

sudo vgextend your_vg_name /dev/sda6

vgdisplay,發現free size多了一塊。

# lvresize - resize a logical volume

# 擴大當前正在使用的lv,從vg中取剩餘空間

最後一步,磁盤擴容完畢了,需要擴容文件系統。目前較新的內核都支持在線擴容了,不需要像以前那樣mount umount來回折騰了。

resize2fs [ -fFpPM ] [ -d debug-flags ] [ -S RAID-stride ] device [ size ]

只需要輸入device就行了,size參數不填的話,默認使用整個分區的size。

注意這裏的device是虛擬設備lv的名稱,並不是sdax這樣的物理設備了,我的環境下是/dev/02-vm-vg/root

擴容完文件系統後重啓,再查看df命令,發現佔用量百分比降低了,新的空間生效了。

使用LVM進行磁盤擴容(fdisk, <wbr>LVM, <wbr>pvcreate, <wbr>lvcreate, <wbr>parted)


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