LVM基礎詳細說明及動態擴容lvm邏輯卷的操作記錄

散盡浮華發表於2016-09-06

 

LVM概念:
--------------------------------------------------------------------------------------------------------------------------------------------------------
它是Linux環境下對磁碟分割槽進行管理的一種機制,LVM是建立在硬碟和分割槽之上的一個邏輯層,來提高磁碟分割槽管理的靈活性。通過LVM系統管理員可以輕鬆管理磁碟分割槽,如:將若干個磁碟分割槽連線為一個整塊的卷組(volume group),形成一個儲存池。管理員可以在卷組上隨意建立邏輯卷組(logical volumes),並進一步在邏輯卷組上建立檔案系統。管理員通過LVM可以方便的調整儲存卷組的大小,並且可以對磁碟儲存按照組的方式進行命名、管理和分配。當系統新增了新的磁碟,通過LVM管理員就不必將磁碟的檔案移動到新的磁碟上以充分利用新的儲存空間,而是直接擴充套件檔案系統跨越磁碟即可。它的結構如下圖所示:

LVM(Logical Volume Manager),即邏輯卷管理,它是Linux環境下對磁碟分割槽進行管理的一種機制。
一般來說,物理磁碟或分割槽之間是分隔的,資料無法跨盤或分割槽,而各磁碟或分割槽的大小固定,重新調整比較麻煩。LVM可以將這些底層的物理磁碟或分割槽整合起來,抽象成容量資源池,以劃分成邏輯卷的方式供上層使用,其最主要的功能即是可以在無需關機無需重新格式化(準確地說,原來的部分無需格式化,只格式化新增的部分)的情況下彈性調整邏輯卷的大小。

LVM的實現過程

幾個名稱解釋
--------------------------------------------------------------------------------------------------------------------------------------------------------
PV(physical volume):物理卷在邏輯卷管理系統最底層,可為整個物理硬碟或實際物理硬碟上的分割槽。它只是在物理分割槽中劃出了一個特殊的區域,用於記載與LVM相關的管理引數。 
VG(volume group):卷組建立在物理捲上,一卷組中至少要包括一物理卷,卷組建立後可動態的新增捲到卷組中,一個邏輯卷管理系統工程中可有多個卷組。
LV(logical volume):邏輯卷建立在卷組基礎上,卷組中未分配空間可用於建立新的邏輯卷,邏輯卷建立後可以動態擴充套件和縮小空間。
PE(physical extent):物理區域是物理卷中可用於分配的最小儲存單元,物理區域大小在建立卷組時指定,一旦確定不能更改,同一卷組所有物理卷的物理區域大小需一致,新的pv加入到vg後,pe的大小自動更改為vg中定義的pe大小。
LE(logical extent):邏輯區域是邏輯卷中可用於分配的最小儲存單元,邏輯區域的大小取決於邏輯卷所在卷組中的物理區域的大小。由於受核心限制的原因,一個邏輯卷(Logic Volume)最多隻能包含65536個PE(Physical Extent),所以一個PE的大小就決定了邏輯卷的最大容量,4 MB(預設) 的PE決定了單個邏輯卷最大容量為 256 GB,若希望使用大於256G的邏輯卷,則建立卷組時需要指定更大的PE。在Red Hat Enterprise Linux AS 4中PE大小範圍為8 KB 到 16GB,並且必須總是 2 的倍數。

將各物理磁碟或分割槽的系統型別設為Linux LVM,其system ID為8e,通過fdisk工具中的t命令設定

[root@localhost ~]# fdisk /dev/sda
...
Command (m for help): n
First cylinder (1593-3916, default 1593): 
Using default value 1593
Last cylinder, +cylinders or +size{K,M,G} (1593-3916, default 3916): +5G
...
Command (m for help): t
Partition number (1-6): 5
Hex code (type L to list codes): 8e   # 指定system ID為8e
Changed system type of partition 5 to 8e (Linux LVM)
...
Command (m for help): p
...
/dev/sda5            1593        2246     5252227+  8e  Linux LVM
/dev/sda6            2247        2900     5253223+  8e  Linux LVM
/dev/sda7            2901        3554     5253223+  8e  Linux LVM 
Command (m for help): w
...
[root@localhost ~]# partx -a /dev/sda
...
[root@localhost ~]# kpartx -af /dev/sda
...

將各物理磁碟或分割槽初始化為PV(physical volume,物理卷),這一階段可使用的命令為pvcreate、pvremove、pvscan、pvdisplay(pvs)

pvcreate建立物理卷

  用法:pvcreate [option] DEVICE

  選項:

      -f:強制建立邏輯卷,不需使用者確認

      -u:指定裝置的UUID

      -y:所有問題都回答yes

  例 pvcreate /dev/sda5 /dev/sda6

pvscan:掃描當前系統上的所有物理卷

  用法:pvscan [option]

  選項:

      -e:僅顯示屬於輸出卷組的物理卷

      -n:僅顯示不屬於任何卷組的物理卷

      -u:顯示UUID

pvdisplay:顯示物理卷的屬性

  用法:pvdisplay [PV_DEVICE]

pvremove:將物理卷資訊刪除,使其不再被視為一個物理卷

  用法:pvremove [option] PV_DEVICE

  選項:

      -f:強制刪除

      -y:所有問題都回答yes

  例 pvremove /dev/sda5

[root@localhost ~]# pvcreate /dev/sda{5,6,7}   # 將三個分割槽初始化為物理卷
  Physical volume "/dev/sda5" successfully created
  Physical volume "/dev/sda6" successfully created
  Physical volume "/dev/sda7" successfully created
[root@localhost ~]# pvscan
  PV /dev/sda5                      lvm2 [5.01 GiB]
  PV /dev/sda6                      lvm2 [5.01 GiB]
  PV /dev/sda7                      lvm2 [5.01 GiB]
  Total: 3 [15.03 GiB] / in use: 0 [0   ] / in no VG: 3 [15.03 GiB]
[root@localhost ~]# pvdisplay /dev/sda5   # 顯示物理卷sda5的詳細資訊
  "/dev/sda5" is a new physical volume of "5.01 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/sda5
  VG Name               
  PV Size               5.01 GiB
  Allocatable           NO
  PE Size               0   # 由於PE是在VG階段才劃分的,所以此處看到的都是0
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               lrNOS3-8U21-ZS8o-eyKH-HqPn-DLhX-W1ppl4
    
[root@localhost ~]# pvremove /dev/sda7   # 刪除sda7的物理卷資訊
  Labels on physical volume "/dev/sda7" successfully wiped
[root@localhost ~]# pvscan   # 可以看到PV列表中已無sda7
  PV /dev/sda5   VG myvg   lvm2 [5.01 GiB / 5.01 GiB free]
  PV /dev/sda6   VG myvg   lvm2 [5.01 GiB / 5.01 GiB free]
[root@localhost ~]# pvcreate /dev/sda7
  Physical volume "/dev/sda7" successfully created

建立VG(volume group,卷組)。卷組將多個物理卷整合起來(遮蔽了底層細節),並劃分PE(physical extend)PE是物理卷中的最小儲存單元,有點類似於檔案系統中的block,PE大小可指定,預設為4M。這一階段用到的命令有vgcreate、vgscan、vgdisplay、vgextend、vgreduce

vgcreate建立卷組

  用法:vgcreate [option] VG_NAME PV_DEVICE

  選項:

      -s:卷組中的物理卷的PE大小,預設為4M

      -l:卷組上允許建立的最大邏輯卷數

      -p:卷級中允許新增的最大物理卷數

  例 vgcreate -s 8M myvg /dev/sda5 /dev/sda6

vgscan:查詢系統中存在的LVM卷組,並顯示找到的卷組列表

vgdisplay:顯示卷組屬性

  用法:vgdisplay [option] [VG_NAME]

  選項:

      -A:僅顯示活動卷組的資訊

      -s:使用短格式輸出資訊

vgextend:動態擴充套件LVM卷組,它通過向卷組中新增物理捲來增加捲組的容量

  用法:vgextend VG_NAME PV_DEVICE

  例 vgextend myvg /dev/sda7

vgreduce:通過刪除LVM卷組中的物理捲來減少卷組容量,不能刪除LVM卷組中剩餘的最後一個物理卷
  用法:vgreduce VG_NAME PV_DEVICE

vgremove:刪除卷組,其上的邏輯卷必須處於離線狀態

  用法:vgremove [-f] VG_NAME

  -f:強制刪除

vgchange:常用來設定卷組的活動狀態

  用法:vgchange -a n/y VG_NAME

  -a n為休眠狀態,休眠之前要先確保其上的邏輯卷都離線;

  -a y為活動狀態

[root@localhost ~]# vgcreate -s 8M myvg /dev/sda{5,6}   # 使用sda5、sda6建立卷組,指定PE大小為8M
  Volume group "myvg" successfully created
[root@localhost ~]# vgscan
  Reading all physical volumes.  This may take a while...
  Found volume group "myvg" using metadata type lvm2
[root@localhost ~]# vgdisplay   # 檢視卷組詳細資訊
  --- Volume group ---
  VG Name               myvg
  System ID             
  Format                lvm2
  Metadata Areas        2
  Metadata Sequence No  1
  VG Access             read/write   # 可讀寫
  VG Status             resizable
  MAX LV                0
  Cur LV                0
  Open LV               0
  Max PV                0
  Cur PV                2
  Act PV                2
  VG Size               10.02 GiB   # 卷組容量
  PE Size               8.00 MiB
  Total PE              1282   # PE總數
  Alloc PE / Size       0 / 0   # 分配的容量 
  Free  PE / Size       1282 / 10.02 GiB   # 空閒的容量
  VG UUID               5zBY8e-5Cgc-HqSo-BOiZ-02NX-77ON-NJSCbN

在卷組上建立LV(logical volume,邏輯卷)。為了便於管理,邏輯卷對應的裝置檔案儲存在卷組目錄下,為/dev/VG_NAME/LV_NAME。LV中可以分配的最小儲存單元稱為LE(logical extend),在同一個卷組中,LE的大小和PE是一樣的,且一一對應。這一階段用到的命令有lvcreate、lvscan、lvdisplay、lvextend、lvreduce、lvresize

lvcreate建立邏輯卷或快照

  用法:lvcreate [選項] [引數]

  選項:

      -L:指定大小

      -l:指定大小(LE數)

      -n:指定名稱

      -s:建立快照

      -p r:設定為只讀(該選項一般用於建立快照中)

  注:使用該命令建立邏輯卷時當然必須指明卷組,建立快照時必須指明針對哪個邏輯卷         

  例 lvcreate -L 500M -n mylv myvg

lvscan:掃描當前系統中的所有邏輯卷,及其對應的裝置檔案

lvdisplay:顯示邏輯卷屬性

  用法:lvdisplay [/dev/VG_NAME/LV_NAME]

lvextend:可線上擴充套件邏輯卷空間

  用法:lvextend -L/-l 擴充套件的大小 /dev/VG_NAME/LV_NAME  

  選項:

      -L:指定擴充套件(後)的大小。例如,-L +800M表示擴大800M,而-L 800M表示擴大至800M

      -l:指定擴充套件(後)的大小(LE數)

  例 lvextend -L 200M /dev/myvg/mylv

lvreduce:縮減邏輯卷空間,一般離線使用

  用法:lvexreduce -L/-l 縮減的大小 /dev/VG_NAME/LV_NAME  

  選項:

      -L:指定縮減(後)的大小

      -l:指定縮減(後)的大小(LE數)

  例 lvreduce -L 200M /dev/myvg/mylv

lvremove:刪除邏輯卷,需要處於離線(解除安裝)狀態

  用法:lvremove [-f] /dev/VG_NAME/LV_NAME

  -f:強制刪除

[root@localhost ~]# lvcreate -L 500M -n mylv myvg   # 建立大小為500M、名為mylv的邏輯卷
  Rounding up size to full physical extent 504.00 MiB
  Logical volume "mylv" created
[root@localhost ~]# lvscan
  ACTIVE            '/dev/myvg/mylv' [504.00 MiB] inherit
[root@localhost ~]# lvdisplay
  --- Logical volume ---
  LV Path                /dev/myvg/mylv
  LV Name                mylv
  VG Name                myvg
  LV UUID                0fPpO3-gVaI-ZKqi-xHnc-uaHk-u6of-i5wds7
  LV Write Access        read/write
  LV Creation host, time localhost.localdomain, 2015-10-18 22:05:18 +0800
  LV Status              available
  # open                 0
  LV Size                504.00 MiB  # 這裡為什麼不是指定的500M呢,因為500M不是PE的倍數,系統會自行計算最相近的容量
  Current LE             63
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:0

格式化邏輯卷並掛載

[root@localhost ~]# mke2fs -t ext4 /dev/myvg/mylv
...
Writing inode tables: done                            
Creating journal (8192 blocks): done
Writing superblocks and filesystem accounting information: done
...
[root@localhost ~]# mkdir /data
[root@localhost ~]# mount /dev/myvg/mylv /data
[root@localhost ~]# cp /etc/inittab /data
[root@localhost ~]# ls /data
inittab  lost+found

LVM的寫入模式
--------------------------------------------------------------------------------------------------------------------------------------------------------
LVM有兩種寫入模式:線性模式條帶模式
- 線性模式即寫完一個裝置後再寫另一個裝置
- 條帶模式就有點類似於RAID0,即資料是被分散寫入到LVM各成員裝置上的。
因為條帶模式的資料不具有安全性,且LVM並不強調讀寫效能,故LVM預設為線性模式,這樣即使一個裝置壞了,其它裝置上的資料還在。

檔案系統的擴充套件和縮減
--------------------------------------------------------------------------------------------------------------------------------------------------------
檔案系統在建立時是分成多個塊組(block group)的,因此檔案系統的增減實際上就是以增減塊組的方式實現的。在linux中,ext系列格式的檔案系統是可以擴充套件和縮減的,而xfs格式的目前只能擴充套件
1)擴充套件檔案系統
①先確定擴充套件的目標大小,並確保對應卷組中有足夠的空閒空間可用。如果不夠,可先通過vgextend命令擴大卷組容量
# vgextend myvg /dev/sda7
②擴充套件邏輯卷
# lvextend -L 4G /dev/myvg/mylv
③擴充套件檔案系統
resize2fs為ext系列檔案系統大小的調整工具用法為:resize2fs 檔案系統所對應的裝置檔名 [大小]
# resize2fs /dev/myvg/mylv

[root@localhost ~]# vgextend myvg /dev/sda7   # 假如卷組容量不夠,擴充套件檔案系統之前先擴充套件卷組
  Volume group "myvg" successfully extended
[root@localhost ~]# lvextend -L +300M /dev/myvg/mylv
  Rounding size to boundary between physical extents: 304.00 MiB
  Snapshot origin volumes can be resized only while inactive: try lvchange -an
  Run `lvextend --help' for more information.
[root@localhost ~]# umount /dev/myvg/mylv_snap
[root@localhost ~]# lvremove /dev/myvg/mylv_snap  # 要增減邏輯卷,需要先刪除對對應的快照卷
Do you really want to remove active logical volume mylv_snap? [y/n]: y
  Logical volume "mylv_snap" successfully removed
[root@localhost ~]# lvextend -L +300M /dev/myvg/mylv   # 邏輯卷擴大300M
  Rounding size to boundary between physical extents: 304.00 MiB
  Extending logical volume mylv to 808.00 MiB
  Logical volume mylv successfully resized
[root@localhost ~]# resize2fs /dev/myvg/mylv   # 擴充套件檔案系統
resize2fs 1.41.12 (17-May-2010)
Filesystem at /dev/myvg/mylv is mounted on /data; on-line resizing required
old desc_blocks = 2, new_desc_blocks = 4
Performing an on-line resize of /dev/myvg/mylv to 827392 (1k) blocks.
The filesystem on /dev/myvg/mylv is now 827392 blocks long.
 
[root@localhost ~]# df -h   # 顯示容量確實已擴大
...
/dev/mapper/myvg-mylv  783M   11M  732M   2% /data

2)縮減很危險,要離線
①先確定縮減後的目標大小,並確保對應的目標邏輯卷大小足夠容納原有資料
②先解除安裝檔案系統,並要執行強制檢測
# e2fsck -f
③縮減檔案系統
#resize2fs DEVICE        例如,resize2fs /dev/myvg/mylv 3G 縮減至3G

④縮減邏輯卷
# lvreduce -L 3G /dev/myvg/mylv
注:當邏輯卷有快照時是不能擴充套件和縮減的,除非先將快照刪除.

[root@localhost ~]# umount /dev/myvg/mylv   # 縮減檔案系統之前要先解除安裝
[root@localhost ~]# e2fsck -f /dev/myvg/mylv   # 檢測檔案系統
e2fsck 1.41.12 (17-May-2010)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
/dev/myvg/mylv: 12/206848 files (0.0% non-contiguous), 36856/827392 blocks
[root@localhost ~]# resize2fs /dev/myvg/mylv 500M   # 縮減檔案系統至500M
resize2fs 1.41.12 (17-May-2010)
Resizing the filesystem on /dev/myvg/mylv to 512000 (1k) blocks.
The filesystem on /dev/myvg/mylv is now 512000 blocks long.
[root@localhost ~]# lvreduce -L 500M /dev/myvg/mylv   # 縮減邏輯卷至500M
  Rounding size to boundary between physical extents: 504.00 MiB
  WARNING: Reducing active and open logical volume to 504.00 MiB
  THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce mylv? [y/n]: y
  Reducing logical volume mylv to 504.00 MiB
  Logical volume mylv successfully resized
[root@localhost ~]# mount /dev/myvg/mylv /data   # 重新掛載
[root@localhost ~]# df -h   # 顯示容量確實已減小
...
/dev/mapper/myvg-mylv  485M   11M  449M   3% /data
 
[root@localhost ~]# vgchange -an myvg   # 當我們一段時間內不再使用卷組時,可將其休眠
  Logical volume myvg/mylv contains a filesystem in use.
  Can't deactivate volume group "myvg" with 1 open logical volume(s)
[root@localhost ~]# umount /data    # 休眠之前先解除安裝邏輯卷
[root@localhost ~]# umount /mnt
[root@localhost ~]# vgchange -an myvg
  0 logical volume(s) in volume group "myvg" now active
[root@localhost ~]# vgchange -ay myvg   # 重新啟用卷組
  1 logical volume(s) in volume group "myvg" now active
[root@localhost ~]# vgremove myvg   # 若打算以後都不再使用,可刪除卷組
Do you really want to remove volume group "myvg" containing 1 logical volumes? [y/n]: y
Do you really want to remove active logical volume mylv? [y/n]: y
  Logical volume "mylv" successfully removed
  Volume group "myvg" successfully removed

snapshot(快照)
--------------------------------------------------------------------------------------------------------------------------------------------------------
snapshot是像照相一樣將當前的系統資訊儲存下來。
當建立一個snapshot的時候,僅拷貝原始卷裡資料的後設資料(meta-data)。建立的時候,並不會有資料的物理拷貝,因此snapshot的建立幾乎是實時的,當原始捲上有寫操作執行時,snapshot跟蹤原始卷塊的改變,這個時候原始捲上將要改變的資料在改變之前被拷貝到snapshot預留的空間裡,因此這個原理的實現叫做寫時複製(copy-on-write)。
在寫操作寫入塊之前,原始資料被移動到 snapshot空間裡,這樣就保證了所有的資料在snapshot建立時保持一致。而對於snapshot的讀操作,如果是沒有修改過的塊,那麼會將讀操作直接重定向到原始捲上,如果是已經修改過的塊,那麼就讀取拷貝到snapshot中的塊。

■建立快照卷:

lvcreate [選項] [引數]

選項:
-L:指定大小

-l:指定大小(LE數)

-n:指定名稱

-s:建立快照

-p r:設定為只讀

例如 lvcreate -s -L 512M -n mylv_snap -p r /dev/myvg/mylv # 針對邏輯卷mylv建立大小為512M的只讀快照

注:建立快照前需將針對的邏輯卷臨時改為只讀,建立完畢後再改為讀寫,例如
- 建立快照前:mount -o remount,ro /dev/myvg/mylv /data
- 建立快照後:mount -o remount,rw /dev/myvg/mylv /data

[root@localhost ~]# mount -o remount,ro /dev/myvg/mylv /data   # 建立快照卷之前先將對應的邏輯卷改為只讀
[root@localhost ~]# lvcreate -s -L 512M -n mylv_snap /dev/myvg/mylv  # 建立大小為512M的快照
  Logical volume "mylv_snap" created
[root@localhost ~]# mount -o remount,rw /dev/myvg/mylv /data   # 將邏輯卷改回為讀寫
[root@localhost ~]# mount /dev/myvg/mylv_snap /mnt
[root@localhost ~]# df -h   # 可以看到快照和其對應的邏輯卷顯示的引數值一樣
...
/dev/mapper/myvg-mylv       489M   11M  453M   3% /data
/dev/mapper/myvg-mylv_snap  489M   11M  453M   3% /mnt
[root@localhost ~]# ls /mnt
inittab  lost+found
[root@localhost ~]# cp /etc/passwd /data   # 向原始卷中新增一些資料
[root@localhost ~]# ls /data
inittab  lost+found  passwd
[root@localhost ~]# ls /mnt   # 快照所顯示的檔案系統狀態仍是建立那一刻的
inittab  lost+found

LVM工作原理
--------------------------------------------------------------------------------------------------------------------------------------------------------
LVM在每個物理卷頭部都維護了一個metadata,每個metadata中都包含了整個VG(volume group:卷組)的資訊,包括每個VG的佈局配置,PV(physical volume:物理卷)的編號,LV(logical volume:邏輯卷)的編號,以及每個PE(physical extends:物理擴充套件單元)到LE(logical extends:物理擴充套件單元)的對映關係。同一個VG中的每個PV頭部的資訊都是相同的,這樣有利於故障時進行資料恢復。

LVM對上層檔案系統提供LV層,隱藏了操作細節。對檔案系統而言,對LV的操作與原先對partition的操作沒有差別。當對LV進行寫入操作的時候,LVM定位相應的LE,通過PV頭部的對映表將資料寫入到相應的PE上。LVM實現的關LVM最大的特點就是可以對磁碟進行動態管理。因為邏輯卷的大小是可以動態調整的,而且不會丟失現有的資料。我們如果新增加了硬碟,其也不會改變現有上層的邏輯卷。鍵在於PE和LE之間建立對映關係,不同的對映規則決定了不同的LVM儲存模型。LVM支援多個PV 的stripe和mirror。

LVM最大的特點就是可以對磁碟進行動態管理,因為邏輯卷的大小是可以動態調整的,而且不會丟失現有的資料,如果我們增加了硬碟也不會改變現有的上層邏輯卷。

LVM優缺點
--------------------------------------------------------------------------------------------------------------------------------------------------------
優點:
- 檔案系統可以跨多個磁碟,因此檔案系統大小不會受物理磁碟的限制。
- 可以在系統執行的狀態下動態的擴充套件檔案系統的大小。
- 可以增加新的磁碟到LVM的儲存池中。
- 可以以映象的方式冗餘重要的資料到多個物理磁碟。
- 可以方便的匯出整個卷組到另外一臺機器。

缺點:
- 在從卷組中移除一個磁碟的時候必須使用reducevg命令(這個命令要求root許可權,並且不允許在快照卷組中使用)。
- 當卷組中的一個磁碟損壞時,整個卷組都會受到影響。
- 因為加入了額外的操作,存貯效能受到影響。

接下來,舉出幾個例項說明一下:
-------------------------------------------------------------------------------------------------------------------------------------------------------

1.準備物理分割槽(Physical Partions)
首先,我們需要選擇用於 LVM 的物理儲存器。這些通常是標準分割槽,但也可以是已建立的 Linux Software RAID 卷。這裡我利用fdisk命令,將sdb、sdc兩塊磁碟分了兩個區sdb1、sdc1, 通過fdisk的t指令指定分割槽為8e型別(Linux LVM) ,如下圖:

2.建立物理卷PV(Physical Volumes)
[root@cfbdb5 oracle]#pvcreate /dev/sdb1           //如果沒有pvcreate、vgcreate等lvm命令,可以使用yum install -y lvm2進行安裝
Physical volume "/dev/sdb1" successfully created
[root@cfbdb5 oracle]# pvcreate /dev/sdc1           //可以直接使用pcvreate /dev/{sdb1,sdc1}
Physical volume "/dev/sdc1" successfully created

3.建立卷組VG(Volume Groups),命名為vg_test
[root@cfbdb5 ~]#vgcreate vg_test /dev/sdb1
Volume group "vg_test" successfully created
使用卷組檢視命令vgdisplay顯示卷組情況:
[root@cfbdb5 oracle]# vgdisplay
--- Volume group ---
VG Name vg_test
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 6
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 1
Open LV 1
Max PV 0
Cur PV 1
Act PV 1
VG Size 19.99 GB
PE Size 4.00 MB
Total PE 5118
Alloc PE / Size 2560 / 10.00 GB
Free PE / Size 2558 / 9.99 GB
VG UUID YEYtOr-JpCK-P7MV-FFVo-BgEi-Ooef-IG3hlc

4.建立邏輯卷LV(Logical Volumes) ,命名為test_lv
建立邏輯卷的命令為lvcreate,-l 引數為定PE數來設定邏輯分割槽大小,也可以使用-L引數直接指定邏輯分割槽大小,-n引數指定邏輯分割槽名稱
[root@cfbdb5 oracle]# lvcreate -l 2000 -n lv_test vg_test
Logical volume "lv_test" created
也可以使用-L引數
[root@cfbdb5 oracle]# lvcreate -L 10G -n lv_test vg_test
Rounding up size to full physical extent 19.99 GB
Logical volume "lv_test" created
使用lvdisplay命令檢視邏輯卷情況:
[root@cfbdb5 oracle]#lvdisplay
--- Logical volume ---
LV Name /dev/vg_test/lv_test
VG Name vg_test
LV UUID kgUoMy-W1qG-7tAQ-dI5j-Z2KO-a8Td-mXAFbc
LV Write Access read/write
LV Status available
# open 0
LV Size 19.99 GB
Current LE 5118
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 253:2

5.建立檔案系統,並掛載
在邏輯捲上建立ext3檔案系統:
[root@cfbdb5 oracle]#mkfs -t ext3 /dev/vg_test/lv_test             //可以直接使用mkfs.ext3或mkfs.ext4進行格式化,ext3或ext4是檔案格式
[root@cfbdb5 oracle]#mount /dev/vg_test/lv_test /opt/oracle/
[root@cfbdb5 oracle]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/VolGroup00-LogVol00
16G 4.7G 11G 32% /
/dev/sda1 99M 27M 67M 29% /boot
tmpfs 872M 0 872M 0% /dev/shm
/dev/mapper/vg_test-lv_test
9.9G 151M 9.2G 2% /opt/oracle

LVM的最大好處就是可以動態地調整分割槽大小,而無須重新啟動機器,下面讓我們來體驗一下吧!
繼續上面的例項,現假設邏輯卷/dev/vg_test/lv_test空間不足,需要增加其大小,我們分兩種情況討論:
---------------------------------------------------------------------------------------------------------
1)卷組中有剩餘的空間
通過vgdisplay命令可以檢查當前卷組空間使用情況:

[root@cfbdb5 oracle]# vgdisplay
--- Volume group ---
VG Name vg_test
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 6
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 1
Open LV 1
Max PV 0
Cur PV 1
Act PV 1
VG Size 19.99 GB
PE Size 4.00 MB
Total PE 5118
Alloc PE / Size 2560 / 10.00 GB
Free PE / Size 2558 / 9.99 GB
VG UUID YEYtOr-JpCK-P7MV-FFVo-BgEi-Ooef-IG3hlc
確定當前卷組剩餘空間9.99GB,剩餘PE數量為2558個。在這裡將所有的剩餘空間全部增加給邏輯卷 /dev/vg_test/lv_test。
[root@cfbdb5 oracle]# lvextend -l +2558 /dev/vg_test/lv_test     //或者lvextend -L +9.99G /dev/vg_test/lv_test  
Extending logical volume lv_test to 19.99 GB
Logical volume lv_test successfully resized
也可以通過-L直接指定大小,通過 +/- 來 增加/減小 空間。
修改邏輯卷大小後,通過resize2fs來修改檔案系統的大小。
[root@cfbdb5 oracle]#resize2fs /dev/vg_test/lv_test
resize2fs 1.39 (29-May-2006)
Filesystem at /dev/vg_test/lv_test is mounted on /opt/oracle; on-line resizing required
Performing an on-line resize of /dev/vg_test/lv_test to 5240832 (4k) blocks.
The filesystem on /dev/vg_test/lv_test is now 5240832 blocks long.
再次檢視檔案系統的大小:
[root@cfbdb5 oracle]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/VolGroup00-LogVol00
16G 4.7G 11G 32% /
/dev/sda1 99M 27M 67M 29% /boot
tmpfs 872M 0 872M 0% /dev/shm
/dev/mapper/vg_test-lv_test
20G 156M 19G 1% /opt/oracle

2)卷組中空間不足
  當卷組中沒有足夠的空間用於擴充套件邏輯卷的大小時,就需要增加捲組的容量,而增加捲組容量的惟一辦法就是向卷組中新增新的物理卷。
  首先需要對新增加的磁碟進行分割槽、建立物理卷等工作。),接下來是利用vgextend命令將新的物理卷加入到卷組中, 我們這裡使用/dev/sdc1。
[root@cfbdb5 oracle]#vgextend vg_test /dev/sdc1
Volume group "vg_test" successfully extended
[root@cfbdb5 oracle]# vgdisplay
--- Volume group ---
VG Name vg_test
System ID
Format lvm2
Metadata Areas 2
Metadata Sequence No 8
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 1
Open LV 1
Max PV 0
Cur PV 2
Act PV 2
VG Size 59.98 GB
PE Size 4.00 MB
Total PE 15356
Alloc PE / Size 5118 / 19.99 GB
Free PE / Size 10238 / 39.99 GB
VG UUID YEYtOr-JpCK-P7MV-FFVo-BgEi-Ooef-IG3hlc

完成卷組的擴容後,就可以按照第一種情況的方法完成邏輯卷的擴容,最終實現分割槽的動態調整。如:
[root@cfbdb5 oracle]# lvextend -L +39G /dev/vg_test/lv_test
[root@cfbdb5 oracle]# resize2fs /dev/vg_test/lv_test
如果報錯:
......
resize2fs: Bad magic number in super-block while trying to open /dev/vg_test/lv_test
Couldn't find valid filesystem superblock.

可以嘗試用xfs命令
[root@docker-server ~]# xfs_growfs /dev/vg_test/lv_test

LVM的擴容需求操作也可以參考這篇文件(文件中間有這個操作記錄):http://www.cnblogs.com/kevingrace/p/5822928.html

相關文章