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

 

LVM概念:
--------------------------------------------------------------------------------------------------------------------------------------------------------
它是Linux環境下對磁盤分區進行管理的一種機制,LVM是創建在硬盤和分區之上的一個邏輯層,來提升磁盤分區管理的靈活性。經過LVM系統管理員能夠輕鬆管理磁盤分區,如:將若干個磁盤分區鏈接爲一個整塊的卷組(volume group),造成一個存儲池。管理員能夠在卷組上隨意建立邏輯卷組(logical volumes),並進一步在邏輯卷組上建立文件系統。管理員經過LVM能夠方便的調整存儲卷組的大小,而且能夠對磁盤存儲按照組的方式進行命名、管理和分配。當系統添加了新的磁盤,經過LVM管理員就沒必要將磁盤的文件移動到新的磁盤上以充分利用新的存儲空間,而是直接擴展文件系統跨越磁盤便可。它的結構以下圖所示:html

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

LVM的實現過程linux

幾個名稱解釋
--------------------------------------------------------------------------------------------------------------------------------------------------------
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 的倍數。docker

將各物理磁盤或分區的系統類型設爲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)bash

pvcreate建立物理卷oracle

  用法:pvcreate [option] DEVICEapp

  選項:dom

      -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}   # 使用sda五、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兩塊磁盤分了兩個區sdb一、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

相關文章
相關標籤/搜索