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


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命令設置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
[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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
[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為活動狀態

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
[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:強制刪除

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
[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

格式化邏輯卷並掛載

1
2
3
4
5
6
7
8
9
10
11
[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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
[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
注:當邏輯卷有快照時是不能擴展和縮減的,除非先將快照刪除.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
[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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM