你必須知道的Linux動態管理存儲機制LVM

一、什麼是LVM?

  LVM(Logical Volume Manager),邏輯卷管理。它是Linux中對磁盤分區的一種管理機制。相信大家會有疑問,爲什麼要有這樣一個管理機制?那是因爲

  很多Linux使用者安裝操作系統時都會遇到這樣的困境:如何精確評估和分配各個硬盤分區的容量,分得太大,會浪費硬盤空間;分得太小,又會面臨不夠使用的情況。一旦系統分區不夠用時,我們就不得不備份、刪除相關數據,甚至被迫重新規劃存儲方案並重裝操作系統,以滿足應用系統的需要。
  基於這樣的需求,LVM就爲我們提供了一種動態管理存儲的機制。

二、LVM原理

  LVM 爲我們提供了邏輯概念上的磁盤,使得文件系統不再關心底層物理磁盤的概念。瞭解LVM原理,我們首先得了解幾種基本的LVM術語

名 稱 意 義
PV(Physical Volume) 物理卷,真實的物理硬盤或分區
VG(Volume Group) 卷組,多個物理卷組成的一塊大的邏輯硬盤
LV(Logical Volume) 邏輯卷,卷組劃分的多個可以使用的分區
PE(Physical Extend) 物理擴展塊,物理卷中可用於分配的最小存儲單元,默認爲4MB
LE(Logical Extend) 邏輯擴展塊,邏輯卷中可用於分配的最小存儲單元,在同一個卷組中,LE的大小和PE是相同的,並且一一對應

  緊接着我們來看看LVM的工作原理是什麼呢?結合這張圖來爲大家解釋!
在這裏插入圖片描述
  LVM是在硬盤分區之上建立一個邏輯層,這個邏輯層讓多個硬盤或分區看起來像一塊邏輯硬盤,然後將這塊邏輯硬盤分成邏輯卷之後使用,從而大大提高了分區的靈活性。

三、LVM管理操作?

1、建立(刪除、查看)物理卷(PV)

  ① 建立物理卷

pvcreate命令語法:vgcreate 設備文件名

[root@localhost ~]# yum install -y lvm2    //安裝LVM2(LVM的管理工具)
[root@localhost ~]# pvcreate /dev/sdb{1,2,3,4}    //將分區建立成爲物理卷
  Physical volume "/dev/sdb1" successfully created
  Physical volume "/dev/sdb2" successfully created
  Physical volume "/dev/sdb3" successfully created
  Physical volume "/dev/sdb4" successfully created

  ② 刪除物理卷

pvremove命令語法:vgcreate 物理卷名

//刪除物理卷時,物理卷必須不屬於任何卷組
[root@localhost ~]# pvmove /dev/sdb4    //轉移數據到其他PV
[root@localhost ~]# pvremove /dev/sdb4    //刪除物理卷sdb4
  Labels on physical volume "/dev/sdb4" successfully wiped

  ③ 查看物理卷

[root@localhost ~]# pvs    //查看物理卷的概要信息
  PV         VG   Fmt  Attr PSize   PFree
  /dev/sdb1  myvg lvm2 a--u 108.00m   8.00m
  /dev/sdb2  myvg lvm2 a--u 108.00m 108.00m
  /dev/sdb3  myvg lvm2 a--u 108.00m 108.00m
[root@localhost ~]# pvdisplay    //查看物理卷的詳細信息
  --- Physical volume ---
  PV Name               /dev/sdb1
  VG Name               myvg
  PV Size               109.79 MiB / not usable 1.79 MiB
  Allocatable           yes
  PE Size               4.00 MiB
  Total PE              27
  Free PE               2
  Allocated PE          25
  PV UUID               PXC8sh-tCv4-KQ5S-Hwo4-FrT1-erxf-0QtmZ8
  ...    //省略/dev/sdb{2,3}的詳細信息
[root@localhost ~]# pvscan    //掃描所有硬盤上的物理卷
  PV /dev/sdb1   VG myvg            lvm2 [108.00 MiB / 8.00 MiB free]
  PV /dev/sdb2   VG myvg            lvm2 [108.00 MiB / 108.00 MiB free]
  PV /dev/sdb3   VG myvg            lvm2 [108.00 MiB / 108.00 MiB free]
  Total: 3 [324.00 MiB] / in use: 3 [324.00 MiB] / in no VG: 0 [0   ]

2、建立(增加 / 減小容量、刪除、查看)卷組(VG)

  ① 建立卷組

vgcreate命令語法:vgcreate [-s PE 大小] 卷組名 物理卷名
  其中,-s用來指定PE的大小,單位可以是 MB、GB、TB 等,默認爲4MB。

[root@localhost ~]# vgcreate myvg /dev/sdb1 /dev/sdb2    //將物理卷sdb{1,2}加入卷組myvg
  Volume group "myvg" successfully created
  

  ② 增加捲組容量

vgextend命令語法:vgextend 卷組名 物理卷名

[root@localhost ~]# vgextend myvg /dev/sdb3    //將物理卷sdb3加入卷組myvg
  Volume group "myvg" successfully extended

  ③ 減少卷組容量

vgreduce命令語法:vgreduce 卷組名 物理卷名

[root@localhost ~]# vgreduce myvg /dev/sdb3    //將物理卷sdb3從卷組myvg中移除
  Removed "/dev/sdb3" from volume group "myvg"

  ④ 刪除卷組

vgremove命令語法:vgremove 卷組名

//刪除卷組時,卷組中必須沒有任何邏輯卷
[root@localhost ~]# vgcreate myvg1 /dev/sdb3    //建立測試卷組myvg1
  Volume group "myvg1" successfully created
[root@localhost ~]# vgremove myvg1    //刪除測試卷組myvg1
  Volume group "myvg1" successfully removed

  ⑤ 查看卷組

[root@localhost ~]# vgs    //查看卷組的概要信息
  VG   #PV #LV #SN Attr   VSize   VFree
  myvg   2   1   0 wz--n- 216.00m 64.00m
[root@localhost ~]# vgdisplay    //查看卷組的詳細信息
  --- Volume group ---
  VG Name               myvg
  System ID
  Format                lvm2
  Metadata Areas        2
  Metadata Sequence No  6
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                1
  Open LV               0
  Max PV                0
  Cur PV                2
  Act PV                2
  VG Size               216.00 MiB
  PE Size               4.00 MiB
  Total PE              54
  Alloc PE / Size       38 / 152.00 MiB
  Free  PE / Size       16 / 64.00 MiB
  VG UUID               jSVIZS-MLeY-fOox-pAJZ-hLLd-vtM3-YaK2Hu
[root@localhost ~]# vgscan    //掃描所有硬盤上的卷組
  Reading all physical volumes.  This may take a while...
  Found volume group "myvg" using metadata type lvm2

3、建立(增加 / 減小容量、刪除、查看)邏輯卷(LV)

  ① 建立邏輯卷

lvcreate命令語法:lvcreate [選項] [-n 邏輯卷名] 卷組名
其中,常用選項:
  -n 邏輯卷名:指定邏輯卷名稱;
  -L 大小:指定邏輯卷大小,直接指定容量大小,單位可以是 MB、GB、TB 等;
  -l 數量:指定邏輯卷大小,通過指定PE數量來決定邏輯卷大小;
  -s:創建快照;

[root@localhost ~]# lvcreate -L 100M -n mylv myvg    //使用卷組myvg建立大小爲100M的邏輯卷mylv
  Logical volume "mylv" created.                                               

  ② 增加邏輯卷容量

lvresize命令語法:lvresize [選項] 邏輯卷的設備文件名
其中,常用選項:
  -L 大小:調整邏輯卷大小,直接指定容量大小;
  -l 數量:調整邏輯卷大小,通過指定PE數量來決定邏輯卷大小;
它們都可以使用絕對和相對兩種方式來設置:
  #:表示調整爲 # 大小或 # 個PE大小的容量;
  +/- #:表示增加/減少 # 大小或增加/減少 # 個PE大小的容量。

  有足夠大的VG就可以增加LV容量。

[root@localhost ~]# lvresize -L +50M /dev/myvg/mylv    //增加邏輯卷mylv的大小到150M
  Rounding size to boundary between physical extents: 52.00 MiB.
  Size of logical volume myvg/mylv changed from 100.00 MiB (25 extents) to 152.00 MiB (38 extents).
  Logical volume mylv successfully resized.
[root@localhost ~]# df -h /dev/myvg/mylv    //查看硬盤信息
Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/myvg-mylv
                       93M  1.6M   87M   2% /mnt/mylv    //mylv分區的大小並未改變
//邏輯卷的大小雖然改變了,但是掛載磁盤大小依然是100M,如果要讓分區使用這個新的邏輯卷,必須給新增的LV創建文件系統。
[root@localhost ~]# resize2fs /dev/myvg/mylv    //調整文件系統大小
resize2fs 1.41.12 (17-May-2010)
Filesystem at /dev/myvg/mylv is mounted on /mnt/mylv; on-line resizing required
old desc_blocks = 1, new_desc_blocks = 1
Performing an on-line resize of /dev/myvg/mylv to 155648 (1k) blocks.
The filesystem on /dev/myvg/mylv is now 155648 blocks long.

[root@localhost ~]# df -h /dev/myvg/mylv
Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/myvg-mylv
                      144M  1.6M  135M   2% /mnt/mylv

  ③ 減少邏輯卷容量

  減少LV容量是一個比較危險的操作,所以一般並不推薦減少邏輯卷的容量,因爲這有可能導致數據丟失。需要按照以下步驟減少LV容量:

  ① 卸載邏輯卷;
  ② 使用 e2fsck 命令強制檢測邏輯卷剩餘空間;
  ③ 使用 resize2fs 命令減小文件系統;
  ④ 使用 lvresize 命令減小邏輯卷容量;
  ⑤ 掛載使用。

[root@localhost ~]# umount /dev/myvg/mylv    //卸載邏輯卷mylv
umount: /dev/myvg/mylv: not mounted
[root@localhost ~]# e2fsck -f /dev/myvg/mylv    //強制檢測邏輯卷剩餘空間
e2fsck 1.41.12 (17-May-2010)
/dev/myvg/mylv: recovering journal
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: ***** FILE SYSTEM WAS MODIFIED *****
/dev/myvg/mylv: 11/37544 files (9.1% non-contiguous), 10390/155648 blocks
[root@localhost ~]# resize2fs /dev/myvg/mylv 100M    //減少邏輯卷文件系統大小
resize2fs 1.41.12 (17-May-2010)
Resizing the filesystem on /dev/myvg/mylv to 102400 (1k) blocks.
The filesystem on /dev/myvg/mylv is now 102400 blocks long.
[root@localhost ~]# lvresize -L -50M /dev/myvg/mylv    //減少邏輯卷容量
  Rounding size to boundary between physical extents: 48.00 MiB.
  WARNING: Reducing active logical volume to 108.00 MiB.
  THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce myvg/mylv? [y/n]: y
  Size of logical volume myvg/mylv changed from 156.00 MiB (39 extents) to 108.00 MiB (27 extents).
  Logical volume mylv successfully resized.
[root@localhost ~]# mount /dev/myvg/mylv /mnt/mylv/    //掛載
[root@localhost ~]# df -h /dev/myvg/mylv    //查看硬盤信息
/dev/mapper/myvg-mylv
                       93M  1.6M   87M   2% /mnt/mylv

tips:文件系統大小和邏輯卷大小一定要保持一致纔行。如果邏輯卷大於文件系統,就會由於部分區域未格式化成文件系統從而造成空間的浪費;如果邏輯卷小於文件系統,那麼數據就會出現問題

  ④ 刪除邏輯卷

  刪除邏輯卷,其中的所有數據就會丟失。需要按照以下步驟刪除LV:

  ① 卸載邏輯卷;
  ② 如果/etc/fstab中有邏輯卷的掛載信息(如果之前並未添加可以不用理會),需要先刪除,否則系統有可能不能啓動;
  ③ 使用lvremove命令刪除邏輯卷。

lvremove命令語法:lvremove 邏輯卷名

[root@localhost ~]# umount /dev/myvg/mylv    //卸載邏輯卷mylv
[root@localhost ~]# lvremove /dev/myvg/mylv    //刪除邏輯卷mylv
Do you really want to remove active logical volume mylv? [y/n]: y
  Logical volume "mylv" successfully removed

  ⑤ 查看邏輯卷

[root@localhost ~]# lvs            //查看邏輯卷的概要信息
  LV   VG   Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  mylv myvg -wi-ao---- 108.00m     
[root@localhost ~]# lvdisplay        //查看邏輯卷的詳細信息
  --- Logical volume ---
  LV Path                /dev/myvg/mylv
  LV Name                mylv
  VG Name                myvg
  LV UUID                7xpEK7-ODNn-DnSX-Eshz-zo4I-zitd-2h1aSM
  LV Write Access        read/write
  LV Creation host, time localhost.localdomain, 2020-04-03 04:36:05 +0800
  LV Status              available
  # open                 1
  LV Size                108.00 MiB
  Current LE             27
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:0
[root@localhost ~]# lvscan    //掃描所有硬盤上的邏輯卷
  ACTIVE            '/dev/myvg/mylv' [108.00 MiB] inherit

三、如何建立LVM?

  需要按照以下步驟建立LVM:

  ① 把物理硬盤分成分區;
  ② 把物理分區建立爲物理卷(PV);
  ③ 把物理卷整合爲卷組(VG),卷組可以動態地調整大小,把物理分區加入卷組或從卷組中刪除;
  ④ 把卷組再劃分爲邏輯卷(LV),邏輯卷也可以直接調整大小。
  ⑤ 邏輯卷可以想象爲分區,所以也需要格式化和掛載。

1、建立物理分區

[root@localhost ~]# fdisk /dev/sdb    //在/dev/sdb硬盤中新建兩個分區,每個分區大小爲100M
Command (m for help): n    //創建分區
Command action
   e   extended
   p   primary partition (1-4)
p    //分區類型選擇主分區
Partition number (1-4): 1    //設置分區號爲1
First cylinder (1-130, default 1):
Using default value 1
Last cylinder, +cylinders or +size{K,M,G} (1-130, default 130): +100M    //設置100M大小

...    //剩下一個分區創建過程省略

Command (m for help): t    //更改分區格式
Partition number (1-4): 1    //選擇分區1
Hex code (type L to list codes): 8e    //8e爲Linux LVM格式
Changed system type of partition 1 to 8e (Linux LVM)

...    //剩下一個分區格式修改過程省略

Command (m for help): p    //查詢創建結果

Disk /dev/sdb: 1073 MB, 1073741824 bytes
255 heads, 63 sectors/track, 130 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x2d354121

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1               1          14      112423+  8e  Linux LVM
/dev/sdb2              15          28      112455   8e  Linux LVM

Command (m for help): w    //保存退出
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.
[root@localhost ~]# partx -a /dev/sdb    //重讀磁盤分區表信息

2、建立物理卷

[root@localhost ~]# pvcreate /dev/sdb{1,2}    //將分區建立成爲物理卷
  Physical volume "/dev/sdb1" successfully created
  Physical volume "/dev/sdb2" successfully created
[root@localhost ~]# pvs    //查看物理卷信息
  PV         VG   Fmt  Attr PSize   PFree
  /dev/sdb1  myvg lvm2 a--u 108.00m 108.00m
  /dev/sdb2  myvg lvm2 a--u 108.00m 108.00m

3、建立卷組

[root@localhost ~]# vgcreate myvg /dev/sdb{1,2}    //將物理卷sdb{1,2}加入卷組myvg
  Volume group "myvg" successfully created
[root@localhost ~]# vgs    //查看卷組信息
  VG   #PV #LV #SN Attr   VSize   VFree
  myvg   2   0   0 wz--n- 216.00m 216.00m

4、建立邏輯卷

[root@localhost ~]# lvcreate -L 200M -n mylv myvg    //使用卷組myvg建立大小爲200M的邏輯卷mylv
  Logical volume "mylv" created.
[root@localhost ~]# lvs    //查看邏輯卷信息
  LV   VG   Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  mylv myvg -wi-a----- 200.00m

5、邏輯卷的格式化、掛載

[root@localhost ~]# mkfs.ext4 /dev/myvg/mylv    //格式化
mke2fs 1.41.12 (17-May-2010)
Filesystem label=
OS type: Linux
Block size=1024 (log=0)
Fragment size=1024 (log=0)
Stride=0 blocks, Stripe width=0 blocks
51200 inodes, 204800 blocks
10240 blocks (5.00%) reserved for the super user
First data block=1
Maximum filesystem blocks=67371008
25 block groups
8192 blocks per group, 8192 fragments per group
2048 inodes per group
Superblock backups stored on blocks:
        8193, 24577, 40961, 57345, 73729

Writing inode tables: done
Creating journal (4096 blocks): done
Writing superblocks and filesystem accounting information: done

This filesystem will be automatically checked every 31 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.
[root@localhost ~]# mkdir /mnt/mylv    //創建掛載點
[root@localhost ~]# mount /dev/myvg/mylv /mnt/mylv/    //掛載
[root@localhost ~]# df -Th    //查看硬盤信息
[root@localhost ~]# df -Th
Filesystem           Type     Size  Used Avail Use% Mounted on
/dev/sda2            ext4     9.8G  814M  8.5G   9% /
tmpfs                tmpfs    491M     0  491M   0% /dev/shm
/dev/sda1            ext4     190M   31M  150M  17% /boot
/dev/sr0             iso9660  3.7G  3.7G     0 100% /media
`/dev/mapper/myvg-mylv
                     ext4     190M  1.6M  179M   1% /mnt/mylv`

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章