Linux-邏輯卷LVM


LVM邏輯卷管理器

為什么要使用邏輯卷?

邏輯卷管理器是Linux系統用於對硬盤分區進行管理的一種機制,為了解決硬盤設備在創建分區后不易修改分區大小的缺陷。盡管對傳統的硬盤分區進行強制擴容或縮容從理論上講是可行的。但是卻可能造成數據的丟失。LVM技術是在硬盤分區和文件系統之間添加了一個邏輯層,它提供了一個抽象的卷組,可以把多塊硬盤進行卷組合並。這樣一來,用戶不必關心物理設備和底層架構和布局,就可以實現對硬盤分區的動態調整。

LVM的技術架構圖:

舉例理解:

比如小明家里想吃饅頭但是面粉不夠了,於是媽媽從隔壁老王家、老李家、老張家分別借來一些面粉,准備蒸饅頭吃。首先需要把這些面粉( 物理卷[ PV, Physical Volume ] )揉成一個大面團( 卷組[ VG,Volume Group ] ),然后再把這個大面團分割成一個個小饅頭( 邏輯卷[ LV, Logical Volume ] ),而且每個小饅頭的重量必須是每勺面粉( 基本單元[ PE, Physical Extent ] )的倍數。

理論:

物理卷處於LVM中的最底層,可以將其理解為物理硬盤、硬盤分區或者RAID磁盤陣列,這都可以。卷組建立在物理卷之上,一個卷組可以包含多個物理卷,而且在卷組創建之后也可以繼續向其中添加新的物理卷。邏輯卷是用卷組中空閑的資源建立的,並且邏輯卷在建立后可以動態地擴展或縮小空間。這就是LVM的核心理念。

  • 物理卷(PV:Physical Volume):物理卷是底層真正提供容量,存放數據的設備,它可以是整個硬盤、硬盤上的分區等。
  • 卷組(VG:Volume Group):卷組建立在物理卷之上,它由一個或多個物理卷組成。即把物理卷整合起來提供容量分配。一個LVM系統中可以只有一個卷組,也可以包含多個卷組。
  • 邏輯卷(LV:Logical Volume):邏輯卷建立在卷組之上,它是從卷組中“切出”的一塊空間。它是最終用戶使用的邏輯設備。邏輯卷創建之后,其大小可以伸縮。
  • 基本單元(PE:Physical Extents):具有唯一編號的PE是能被LVM尋址的最小單元。PE的大小可以指定,默認為4MB。PE的大小一旦確定將不能改變,同一個卷組中的所有的物理卷的PE的大小是一直的

部署邏輯卷

常用的LVM部署命令

功能/命令 物理卷管理 卷組管理 邏輯卷管理
掃描 pvscan vgscan lvscan
建立 pvcreate vgcreate lvcreate
顯示 pvdisplay vgdisplay lvdisplay
刪除 pvremove vgremove lvremove
擴展   vgextend lvextend
縮小   vgreduce lvreduce

添加兩塊新硬盤設備
在虛擬機中添加兩塊新硬盤設備的目的,是為了更好地演示LVM理念中用戶無需關心底層物理硬盤設備的特性。我們先對這兩塊新硬盤進行創建物理卷的操作,可以將該操作簡單理解成讓硬盤設備支持LVM技術,或者理解成是把硬盤設備加入到LVM技術可用的硬件資源池中,然后對這兩塊硬盤進行卷組合並,卷組的名稱可以由用戶來自定義。接下來,根據需求把合並后的卷組切割出一個約為150MB的邏輯卷設備,最后把這個邏輯卷設備格式化成EXT4文件系統后掛載使用。

[root@centos7-1 ~]# lsblk 
NAME        MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sr0          11:0    1 1024M  0 rom  
vda         252:0    0   10G  0 disk 
├─vda1      252:1    0  500M  0 part /boot
└─vda2      252:2    0  9.5G  0 part 
  ├─cl-root 253:0    0    9G  0 lvm  /
  └─cl-swap 253:1    0  500M  0 lvm  [SWAP]
vdb         252:16   0   10G  0 disk 
vdc         252:32   0   10G  0 disk

第1步:創建物理卷,讓新添加的兩塊硬盤設備支持LVM技術。

[root@centos7-1 ~]# pvcreate /dev/vdb /dev/vdc 
  Physical volume "/dev/vdb" successfully created.
  Physical volume "/dev/vdc" successfully created.

[root@centos7-1 ~]# pvs         //簡單查看
  PV         VG Fmt  Attr PSize  PFree 
  /dev/vda2  cl lvm2 a--   9.51g     0 
  /dev/vdb      lvm2 ---  10.00g 10.00g
  /dev/vdc      lvm2 ---  10.00g 10.00
  
[root@centos7-1 ~]# pvdisplay /dev/vdb        //查看物理卷詳細信息
  "/dev/vdb" is a new physical volume of "10.00 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/vdb
  VG Name               
  PV Size               10.00 GiB
  Allocatable           NO
  PE Size               0   
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               bUTpIc-J6Hq-LUvk-WinD-hoYk-HQkX-sNgA2W

第2步:創建卷組並將物理卷加入到卷組

[root@centos7-1 ~]# vgcreate vg_storage /dev/vdb /dev/vdc        //vg_storage 自定義卷組名稱
  Volume group "vg_storage" successfully created

[root@centos7-1 ~]# vgdisplay 
  --- Volume group ---
  VG Name               vg_storage
  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               19.99 GiB
  PE Size               4.00 MiB
  Total PE              5118
  Alloc PE / Size       0 / 0   
  Free  PE / Size       5118 / 19.99 GiB
  VG UUID               PRDBRS-ybbD-Dwud-GPbM-XxKu-5NHA-a0BMEm
 ...........省略部分輸出信息..........

第3步:創建一個約為150MB的邏輯卷設備
這里需要注意切割單位的問題,在對邏輯卷進行切割時有兩種計量單位。第一種是以容量為單位,所使用的參數為-L,列如使用 —L 150M 則生成一個大小為150MB的邏輯卷。另外一種是以基本單元的個數為單位,所使用的參數為-l。每個基本單元的大小默認為4MB,例如,使用-l 37可以生成一個大小為37×4MB=148MB的邏輯卷。

root@centos7-1 ~]# lvcreate -n lv_vo -L 150M vg_storage         // -n 指定邏輯卷設備名稱
  Rounding up size to full physical extent 152.00 MiB
  Logical volume "lv_vo" created.
  
[root@centos7-1 ~]# lvdisplay 
  --- Logical volume ---
  LV Path                /dev/vg_storage/lv_vo
  LV Name                lv_vo
  VG Name                vg_storage
  LV UUID                dIo5Ff-pKyD-97Hw-RMs3-dQ10-9tHG-ZGh5o9
  LV Write Access        read/write
  LV Creation host, time centos7-1, 2018-11-12 11:00:28 +0800
  LV Status              available
  # open                 0 LV Size 152.00 MiB
  Current LE             38
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:2
...........省略部分輸出信息..........

第4步:將生成好的邏輯卷進行格式化,然后掛載使用
Linux系統會把LVM中的邏輯卷設備存放在/dev設備目錄中(實際上是做了一個符號鏈接),同時會以卷組的名稱來建立一個目錄,其中保存了邏輯卷的設備映射文件(即/dev/卷組名稱/邏輯卷名稱)。

[root@centos7-1 ~]# ls /dev/vg_storage/lv_vo 
/dev/vg_storage/lv_vo

[root@centos7-1 ~]# mkfs.ext4 /dev/vg_storage/lv_vo 
mke2fs 1.42.9 (28-Dec-2013)
文件系統標簽=
OS type: Linux
塊大小=1024 (log=0)
分塊大小=1024 (log=0)
Stride=0 blocks, Stripe width=0 blocks
38912 inodes, 155648 blocks
7782 blocks (5.00%) reserved for the super user
第一個數據塊=1
Maximum filesystem blocks=33816576
19 block groups
8192 blocks per group, 8192 fragments per group
2048 inodes per group
Superblock backups stored on blocks: 
    8193, 24577, 40961, 57345, 73729
Allocating group tables: 完成                            
正在寫入inode表: 完成                            
Creating journal (4096 blocks): 完成
Writing superblocks and filesystem accounting information: 完成

[root@centos7-1 ~]# mkdir /linuxlvm
[root@centos7-1 ~]# mount /dev/vg_storage/lv_vo /linuxlvm/

第5步:查看掛載狀態,並寫入到配置文件、使其永久生效

[root@centos7-1 ~]# df -h
文件系統                      容量  已用  可用 已用% 掛載點
/dev/mapper/cl-root           9.1G  3.7G  5.4G   41% /
devtmpfs                      481M     0  481M    0% /dev
tmpfs                         497M   84K  497M    1% /dev/shm
tmpfs                         497M  7.1M  490M    2% /run
tmpfs                         497M     0  497M    0% /sys/fs/cgroup
/dev/vda1                     497M  166M  332M   34% /boot
tmpfs                         100M   16K  100M    1% /run/user/42
tmpfs                         100M     0  100M    0% /run/user/0
/dev/mapper/vg_storage-lv_vo  144M  1.6M  132M    2% /linuxlvm
[root@centos7-1 ~]# echo "/dev/vg_storage/lv_vo /linuxlvm ext4 defaults 0 0" >>/etc/fstab

擴容邏輯卷

在前面的實驗中,卷組是由兩塊硬盤設備共同組成的。用戶在使用存儲設備時感知不到設備底層的架構和布局,更不用關心底層是由多少塊硬盤組成的,只要卷組中有足夠的資源,就可以一直為邏輯卷擴容。擴展前請一定要記得卸載設備和掛載點的關聯。

[root@centos7-1 ~]# umount /linuxlvm

第1步:把上一個實驗中的邏輯卷vo擴展至300MB。

[root@centos7-1 ~]# lvextend -L 300M /dev/vg_storage/lv_vo 
  Size of logical volume vg_storage/lv_vo changed from 152.00 MiB (38 extents) to 300.00 MiB (75 extents).
  Logical volume vg_storage/lv_vo successfully resized.

第2步:檢查硬盤完整性,並重置硬盤容量。

[root@centos7-1 ~]# e2fsck -f /dev/vg_storage/lv_vo
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/vg_storage/lv_vo: 11/38912 files (0.0% non-contiguous), 10567/155648 blocks

[root@centos7-1 ~]# resize2fs /dev/vg_storage/lv_vo 
resize2fs 1.42.9 (28-Dec-2013)
Resizing the filesystem on /dev/vg_storage/lv_vo to 307200 (1k) blocks.
The filesystem on /dev/vg_storage/lv_vo is now 307200 blocks long.

第3步:重新掛載硬盤設備並查看掛載狀態。

[root@centos7-1 ~]# mount -a 
[root@centos7-1 ~]# df -h
文件系統                      容量  已用  可用 已用% 掛載點
/dev/mapper/cl-root           9.1G  3.7G  5.4G   41% /
devtmpfs                      481M     0  481M    0% /dev
tmpfs                         497M   84K  497M    1% /dev/shm
tmpfs                         497M  7.1M  490M    2% /run
tmpfs                         497M     0  497M    0% /sys/fs/cgroup
/dev/vda1                     497M  166M  332M   34% /boot
tmpfs                         100M   16K  100M    1% /run/user/42
tmpfs                         100M     0  100M    0% /run/user/0
/dev/mapper/vg_storage-lv_vo  287M  2.1M  266M    1% /linuxlvm

縮小邏輯卷

相較於擴容邏輯卷,在對邏輯卷進行縮容操作時,其丟失數據的風險更大。所以在生產環境中執行相應操作時,一定要提前備份好數據。另外Linux系統規定,在對LVM邏輯卷進行縮容操作之前,要先檢查文件系統的完整性(當然這也是為了保證我們的數據安全)。在執行縮容操作前記得先把文件系統卸載掉。

[root@centos7-1 ~]# umount /linuxlvm/

第1步:檢查文件系統的完整性

[root@centos7-1 ~]# e2fsck -f /dev/vg_storage/lv_vo 
e2fsck 1.42.9 (28-Dec-2013)
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/vg_storage/lv_vo: 11/77824 files (0.0% non-contiguous), 15987/307200 blocks

第2步:把邏輯卷lv_vo的容量減小到120MB

[root@centos7-1 ~]# resize2fs /dev/vg_storage/lv_vo 120M
resize2fs 1.42.9 (28-Dec-2013)
Resizing the filesystem on /dev/vg_storage/lv_vo to 122880 (1k) blocks.
The filesystem on /dev/vg_storage/lv_vo is now 122880 blocks lon

[root@centos7-1 ~]# lvreduce -L 120M /dev/vg_storage/lv_vo 
  WARNING: Reducing active logical volume to 120.00 MiB.
  THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce vg_storage/lv_vo? [y/n]: y
  Size of logical volume vg_storage/lv_vo changed from 300.00 MiB (75 extents) to 120.00 MiB (30 extents).
  Logical volume vg_storage/lv_vo successfully resized.

第3步:重新掛載文件系統並查看系統狀態

[root@centos7-1 ~]# mount -a 
[root@centos7-1 ~]# df -h
文件系統                      容量  已用  可用 已用% 掛載點
/dev/mapper/cl-root           9.1G  3.7G  5.4G   41% /
devtmpfs                      481M     0  481M    0% /dev
tmpfs                         497M   84K  497M    1% /dev/shm
tmpfs                         497M  7.1M  490M    2% /run
tmpfs                         497M     0  497M    0% /sys/fs/cgroup
/dev/vda1                     497M  166M  332M   34% /boot
tmpfs                         100M   16K  100M    1% /run/user/42
tmpfs                         100M     0  100M    0% /run/user/0
/dev/mapper/vg_storage-lv_vo  113M  1.6M  103M    2% /linuxlvm

邏輯卷快照

LVM還具備有“快照卷”功能,該功能類似於虛擬機軟件的還原時間點功能。例如,可以對某一個邏輯卷設備做一次快照,如果日后發現數據被改錯了,就可以利用之前做好的快照卷進行覆蓋還原。

首先查看卷組的信息

[root@centos7-1 ~]# vgdisplay 
  --- Volume group ---
  VG Name               vg_storage
  System ID             
  Format                lvm2
  Metadata Areas        2
  Metadata Sequence No  4
  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               19.99 GiB
  PE Size               4.00 MiB
  Total PE              5118 Alloc PE / Size       30 / 120.00 MiB Free PE / Size       5088 / 19.88 GiB
  VG UUID               PRDBRS-ybbD-Dwud-GPbM-XxKu-5NHA-a0BMEm
...........省略部分輸出信息..........

通過卷組的輸出信息可以清晰看到,卷組中已經使用了120MB的容量,空閑容量還有19.88GB。接下來用重定向往邏輯卷設備所掛載的目錄中寫入一個文件。

[root@centos7-1 ~]# echo "to day is good day" > /linuxlvm/today.txt

[root@centos7-1 ~]# ll /linuxlvm/
總用量 13
drwx------ 2 root root 12288 11月 12 11:04 lost+found
-rw-r--r-- 1 root root    19 11月 12 11:57 today.txt

第1步:使用-s參數生成一個快照卷,使用-L參數指定切割的大小。另外,還需要在命令后面寫上是針對哪個邏輯卷執行的快照操作。

[root@centos7-1 ~]# lvcreate -L 120M -s -n SNAP  /dev/vg_storage/lv_vo 
  Using default stripesize 64.00 KiB.
  Rounding up size to full physical extent 52.00 MiB
  Logical volume "SNAP" created.

[root@centos7-1 ~]# lvs
  LV    VG         Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  root  cl         -wi-ao----   9.02g                                                    
  swap  cl         -wi-ao---- 500.00m                                                    
  SNAP  vg_storage swi-a-s--- 120.00m      lv_vo  0.01                                   
  lv_vo vg_storage owi-aos--- 120.00m

第2步:在邏輯卷所掛載的目錄中創建一個100MB的垃圾文件,然后再查看快照卷的狀態。可以發現存儲空間占的用量上升了。

[root@centos7-1 ~]# dd if=/dev/zero of=/linuxlvm/files count=1 bs=100M 
記錄了1+0 的讀入
記錄了1+0 的寫出
104857600字節(105 MB)已復制,0.680154 秒,154 MB/秒

[root@centos7-1 ~]# lvs
  LV    VG         Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  root  cl         -wi-ao----   9.02g                                                    
  swap  cl         -wi-ao---- 500.00m                                                                                 
  SNAP vg_storage swi-a-s--- 120.00m      lv_vo  83.69                                  
  lv_vo vg_storage owi-aos--- 120.00m 

第3步:為了校驗SNAP快照卷的效果,需要對邏輯卷進行快照還原操作。在此之前記得先卸載掉邏輯卷設備與目錄的掛載。

[root@centos7-1 ~]# umount /linuxlvm

[root@centos7-1 ~]# lvconvert --merge /dev/vg_storage/SNAP 
  Merging of volume vg_storage/SNAP started.
  lv_vo: Merged: 18.84%
  lv_vo: Merged: 100.00%

第4步:快照卷會被自動刪除掉,並且剛剛在邏輯卷設備被執行快照操作后再創建出來的100MB的垃圾文件也被清除了。

[root@centos7-1 ~]# mount -a
[root@centos7-1 ~]# ls /linuxlvm/
lost+found  today.txt

刪除邏輯卷

當生產環境中想要重新部署LVM或者不再需要使用LVM時,則需要執行LVM的刪除操作。為此,需要提前備份好重要的數據信息,然后依次刪除邏輯卷、卷組、物理卷設備,這個順序不可顛倒。

第1步:取消邏輯卷與目錄的掛載關聯,刪除配置文件中永久生效的設備參數。

[root@centos7-1 ~]# umount /linuxlvm/
[root@centos7-1 ~]# vim /etc/fstab 

#
# /etc/fstab
# Created by anaconda on Mon Oct 29 12:25:27 2018
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/cl-root     /                       xfs     defaults        0 0
UUID=07d3a8ca-89fa-4011-837d-47ac9f7660c4 /boot                   xfs     defaults        0 0
/dev/mapper/cl-swap     swap                    swap    defaults        0 0
/dev/vg_storage/lv_vo   /linuxlvm               ext4    defaults        0 0

第2步:刪除邏輯卷設備,需要輸入y來確認操作。

[root@centos7-1 ~]# lvremove /dev/vg_storage/lv_vo 
Do you really want to remove active logical volume vg_storage/lv_vo? [y/n]: y
  Logical volume "lv_vo" successfully removed

第3步:刪除卷組,此處只寫卷組名稱即可,不需要設備的絕對路徑。

[root@centos7-1 ~]# vgremove vg_storage 
  Volume group "vg_storage" successfully removed

第4步:刪除物理卷設備。

[root@centos7-1 ~]# pvremove /dev/vdb /dev/vdc 
  Labels on physical volume "/dev/vdb" successfully wiped.
  Labels on physical volume "/dev/vdc" successfully wiped.

在上述操作執行完畢之后,再執行lvdisplay、vgdisplay、pvdisplay命令來查看LVM的信息時就不會再看到信息了(前提是上述步驟的操作是正確的)。

 


免責聲明!

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



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