關於Linux邏輯卷管理LVM詳解


前言

  每個 Linux 使用者在安裝 Linux 時都會遇到這樣的困境:在為系統分區時,如何精確評估和分配各個硬盤分區的容量,因為系統管理員不但要考慮到當前某個分區需要的容量,還要預見該分區以后可能需要的容量的最大值。因為如果估計不准確,當遇到某個分區不夠用時管理員可能甚至要備份整個系統、清除硬盤、重新對硬盤分區,然后恢復數據到新分區。
 
  雖然現在有很多動態調整磁盤的工具可以使用,例如 Partation Magic 等等,但是它並不能完全解決問題,因為某個分區可能會再次被耗盡;另外一個方面這需要重新引導系統才能實現,對於很多關鍵的服務器,停機是不可接受的,而且對於添加新硬盤,希望一個能跨越多個硬盤驅動器的文件系統時,分區調整程序就不能解決問題。
 
  因此完美的解決方法應該是在零停機前提下可以自如對文件系統的大小進行調整,可以方便實現文件系統跨越不同磁盤和分區。幸運的是 Linux 提供的邏輯卷管理(LVM,Logical Volume Manager)機制就是一個很好的解決方案

什么是LVM

  LVM 是邏輯卷管理(Logical Volume Manager)的簡稱,它是 Linux 環境下對磁盤分區進行管理的一種機制,LVM 是建立在硬盤和分區之上,文件系統之下的一個邏輯層,來提高磁盤分區管理的靈活性。通過 LVM 系統管理員可以輕松管理磁盤分區,如:將若干個磁盤分區連接為一個整塊的卷組(volume group),形成一個存儲池。管理員可以在卷組上隨意創建邏輯卷組(logical volumes),並進一步在邏輯卷組上創建文件系統。管理員通過 LVM 可以方便的調整存儲卷組的大小,並且可以對磁盤存儲按照組的方式進行命名、管理和分配,例如按照使用用途進行定義: “ development ” 和 “ sales ”,而不是使用物理磁盤名“ sda ”和“sdb”。而且當系統添加了新的磁盤,通過 LVM 管理員就不必將磁盤的文件移動到新的磁盤上以充分利用新的存儲空間,而是直接擴展文件系統跨越磁盤即可。

LVM基本術語

  LVM 是在磁盤分區和文件系統之間添加的一個邏輯層,來為文件系統屏蔽下層磁盤分區布局,提供一個抽象的盤卷,在盤卷上建立文件系統。首先我們討論以下幾個 LVM 術語:
  1、物理存儲介質(The physical media)
    這里指系統的存儲設備:硬盤,如:/dev/hda1、/dev/sda1 等,是存儲系統最低層的存儲單元。
  2、PV 物理卷(physical volume)
    物理卷就是指硬盤分區或從邏輯上與磁盤分區具有同樣功能的設備(如 RAID),是 LVM 的基本存儲邏輯塊,但和基本的物理存儲介質(如分區、磁盤等)比較,卻包含有與 LVM 相關的管理參數。
  3、VG 卷組(Volume Group)
    由一個或多個物理卷組成一個整體,即稱為卷組,在卷組中可以動態的添加或移除物理卷,許多個物理卷可以分別組成不同的卷組,卷組名稱由用戶自行定義。
  4、LV 邏輯卷(logical volume)
    邏輯卷是建立在卷組之上的,與物理卷無直接關系,對於邏輯卷來說,每一個卷組就是一個整體,從這個整體中切出一小塊空間,作為用戶創建文件系統的基礎,這一小塊空間就稱為邏輯卷,使用 mkfs等工具在邏輯卷之上建立文件系統以后,即可掛載到 Linux 系統中的目錄下使用。
  5、PE(physical extent)
    每一個物理卷被划分為稱為 PE(Physical Extents)的基本單元,具有唯一編號的 PE 是可以被 LVM尋址的最小單元。PE 的大小是可配置的,默認為 4MB。
  6、LE(logical extent)
    邏輯卷也被划分為被稱為 LE(Logical Extents) 的可被尋址的基本單位。在同一個卷組中,LE 的大小和 PE 是相同的,並且一一對應。

創建和管理LVM

1、准備一塊硬盤做分區

 進行磁盤分區(w保存)

重新探測/dev/sdb 磁盤中分區情況的變化:
partprobe /dev/sdb

2、開始創建PV

# 將整個磁盤創建為物理卷的命令為:
pvcreate /dev/sdb
# 將單個或多個分區創建為物理卷的命令為:
pvcreate /dev/sdb1
pvcreate /dev/sdb1 /dev/sdb2 

查看執行pvscan

pvscan 
PV
/dev/sda2 VG centos lvm2 [19.80 GiB / 0 free] PV /dev/sdb1 lvm2 [10.00 GiB] PV /dev/sdb2 lvm2 [5.00 GiB] Total: 3 [34.80 GiB] / in use: 1 [19.80 GiB] / in no VG: 2 [15.00 GiB]

3、創建卷組

創建卷組的命令為 vgcreate,將使用 pvcreate 建立的物理卷創建為一個完整的卷組:
[root@master ~]# vgcreate my_data /dev/sdb1 /dev/sdb2
  Volume group "my_data" successfully created
掃描當前系統中建立的 LVM 卷組,並顯示信息。
[root@master ~]# vgscan 
  Reading volume groups from cache.
  Found volume group "centos" using metadata type lvm2
  Found volume group "my_data" using metadata type lvm2
注:vgcreate 命令第一個參數是指定該卷組的邏輯名:my_data。后面參數是指定希望添加到該卷組的所有分區和磁盤。vgcreate 在創建卷組 my_data 以外,還設置使用大小為 4 MB 的 PE(默認為 4MB),這表示卷組上創建的所有邏輯卷都以 4 MB 為增量單位來進行擴充或縮減。由於內核原因,PE 大小決定了邏輯卷的最大大小,4 MB 的 PE 決定了單個邏輯卷最大容量為 256 GB,若希望使用大於 256G 的邏輯卷則創建卷組時指定更大的 PE。PE 大小范圍為 8 KB 到 512 MB,並且必須總是 2的倍數(使用-s 指定,具體請參考 man vgcreate)。 
4、激活卷組
為了立即使用卷組而不是重新啟動系統
[root@master ~]# vgchange -a y my_data

5、添加新的物理卷到卷組中

當系統安裝了新的磁盤並創建了新的物理卷,而要將其添加到已有卷組時,就需要使用 vgextend 命令: 
[root@master ~]# vgextend my_data /dev/sdb3
  Physical volume "/dev/sdb3" successfully created.
  Volume group "my_data" successfully extended

注:這里的/dev/sdb3是新的物理卷(沒有就fdisk創建)

結果如下所示:

[root@master ~]# pvscan 
  PV /dev/sda2   VG centos          lvm2 [19.80 GiB / 0    free]
  PV /dev/sdb1   VG my_data         lvm2 [<10.00 GiB / <10.00 GiB free]
  PV /dev/sdb2   VG my_data         lvm2 [<5.00 GiB / <5.00 GiB free]
  PV /dev/sdb3   VG my_data         lvm2 [<3.00 GiB / <3.00 GiB free]
  Total: 4 [<37.79 GiB] / in use: 4 [<37.79 GiB] / in no VG: 0 [0   ]

6、從卷組中刪除一個物理卷

要從一個卷組中刪除一個物理卷,首先要確認要刪除的物理卷沒有被任何邏輯卷正在使用,就要使用pvdisplay 命令察看一個該物理卷信息:
[root@master ~]# pvdisplay /dev/sdb3 
  --- Physical volume ---
  PV Name               /dev/sdb3
  VG Name               my_data
  PV Size               3.00 GiB / not usable 4.00 MiB
  Allocatable           yes 
  PE Size               4.00 MiB
  Total PE              767
  Free PE               767
  Allocated PE          0
  PV UUID               CHsXpZ-11dl-p74D-cLV7-prsD-YfIB-DcCz9C
如果某個物理卷正在被邏輯卷所使用,就需要將該物理卷的數據備份到其他地方,然后再刪除。刪除物理卷的命令為 vgreduce: 
[root@master ~]# vgreduce my_data /dev/sdb3 
  Removed "/dev/sdb3" from volume group "my_data"
[root@master ~]# pvscan 
  PV /dev/sda2   VG centos          lvm2 [19.80 GiB / 0    free]
  PV /dev/sdb1   VG my_data         lvm2 [<10.00 GiB / <10.00 GiB free]
  PV /dev/sdb2   VG my_data         lvm2 [<5.00 GiB / <5.00 GiB free]
  PV /dev/sdb3                      lvm2 [3.00 GiB]

7、創建邏輯卷

創建邏輯卷的命令為 lvcreate:
[root@master ~]# lvcreate -L 8G -n data my_data
  Logical volume "data" created.
該命令就在卷組 my_data 上創建名字為 data,大小為 8G 的邏輯卷,並且設備入口為
/dev/my_data/data(my_data 為卷組名,data為邏輯卷名)。
如果希望創建一個使用全部卷組的邏輯卷,則需要首先察看該卷組的 PE 數,然后在創建邏輯卷時指定:
[root@master ~]# vgdisplay my_data|grep "Total PE"
  Total PE              3838
[root@master ~]# lvcreate -L 3838 my_data -n data1
  Rounding up size to full physical extent 3.75 GiB
  Logical volume "data1" created.

顯示邏輯卷(data)的詳細信息:可以看到邏輯卷大小為8G等信息

[root@master ~]# lvdisplay /dev/my_data/data
  --- Logical volume ---
  LV Path                /dev/my_data/data
  LV Name                data
  VG Name                my_data
  LV UUID                xD81NS-w6Et-pzD4-k8Sd-tMVy-9Qjg-ZdQMPR
  LV Write Access        read/write
  LV Creation host, time master, 2021-03-02 17:55:22 +0800
  LV Status              available
  # open                 0
  LV Size                8.00 GiB
  Current LE             2048
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:2

8、創建文件系統

使用 mkfs 命令在“data”邏輯卷中創建 EXT3 文件系統,並掛載到“tmp”目錄下。
[root@master ~]# mkfs.ext4 /dev/my_data/data
mke2fs 1.42.9 (28-Dec-2013)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
524288 inodes, 2097152 blocks
104857 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=2147483648
64 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks: 
    32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632

Allocating group tables: done                            
Writing inode tables: done                            
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done 

查看

[root@master ~]# df -h
Filesystem                Size  Used Avail Use% Mounted on
devtmpfs                  898M     0  898M   0% /dev
tmpfs                     910M     0  910M   0% /dev/shm
tmpfs                     910M  9.5M  901M   2% /run
tmpfs                     910M     0  910M   0% /sys/fs/cgroup
/dev/mapper/centos-root    19G  1.8G   18G  10% /
/dev/sda1                 197M  116M   82M  59% /boot
tmpfs                     182M     0  182M   0% /run/user/0
/dev/mapper/my_data-data  7.8G   36M  7.3G   1% /tmp
[root@master ~]# df -Th /tmp/
Filesystem               Type  Size  Used Avail Use% Mounted on
/dev/mapper/my_data-data ext4  7.8G   36M  7.3G   1% /tmp
如果希望系統啟動時自動加載文件系統,則還需要在/etc/fstab 中添加內容:
[root@master ~]# tail -1 /etc/fstab 
/dev/my_data/data /tmp                ext4    defaults    1 2

9、刪除一個邏輯卷

刪除邏輯卷以前首先需要將其卸載,然后刪除:
[root@master ~]# lvremove /dev/my_data/data
Do you really want to remove active logical volume my_data/data? [y/n]: y
  Logical volume "data" successfully removed

10、擴展邏輯卷大小

LVM 提供了方便調整邏輯卷大小的能力,擴展邏輯卷大小的命令是 lvextend:
[root@master ~]# lvextend -L 9G /dev/my_data/data1 
  Size of logical volume my_data/data1 changed from 3.75 GiB (960 extents) to 9.00 GiB (2304 extents).
  Logical volume my_data/data1 successfully resized.
上面的命令就實現將邏輯卷 data1 的大小擴招為 9G。
[root@master ~]# lvextend -L +1G /dev/my_data/data1
  Size of logical volume my_data/data1 changed from 9.00 GiB (2304 extents) to 10.00 GiB (2560 extents).
  Logical volume my_data/data1 successfully resized.
上面的命令就實現將邏輯卷 data1 的大小增加 1G。

總結

根據上面的討論可以看到,LVM 具有很好的可伸縮性,使用起來非常方便。可以方便地對卷組、邏輯卷的大小進行調整,更進一步調整文件系統的大小。
問題:怎樣減小邏輯卷的大小?
[root@master ~]# lvreduce -L 10G /dev/my_data/data1 
  WARNING: Reducing active logical volume to 10.00 GiB.
  THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce my_data/data1? [y/n]: y
  Size of logical volume my_data/data1 changed from 12.00 GiB (3072 extents) to 10.00 GiB (2560 extents).
  Logical volume my_data/data1 successfully resized.
[root@master
~]# lvdisplay /dev/my_data/data1 --- Logical volume --- LV Path /dev/my_data/data1 LV Name data1 VG Name my_data LV UUID f6GUYP-F6Au-3E64-Mzfl-Xthp-Er04-mhf2FH LV Write Access read/write LV Creation host, time master, 2021-03-02 18:00:25 +0800 LV Status available # open 0 LV Size 10.00 GiB Current LE 2560 Segments 2 Allocation inherit Read ahead sectors auto - currently set to 8192 Block device 253:3

 


免責聲明!

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



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