首頁 > 軟體

LVM邏輯卷建立管理

2020-06-16 17:37:59

一、簡介
LVM是邏輯盤卷管理(Logical Volume Manager)的簡稱,它是Linux環境下對磁碟分割區進行管理的一種機制,LVM是建立在硬碟和分割區之上的一個邏輯層,來提高磁碟分割區管理的靈活性。
LVM的工作原理其實很簡單,它就是通過將底層的物理硬碟抽象的封裝起來,然後以邏輯卷的方式呈現給上層應用。在傳統的磁碟管理機制中,我們的上層應用是直接存取檔案系統,從而對底層的物理硬碟進行讀取,而在LVM中,其通過對底層的硬碟進行封裝,當我們對底層的物理硬碟進行操作時,其不再是針對於分割區進行操作,而是通過一個叫做邏輯卷的東西來對其進行底層的磁碟管理操作。比如說我增加一個物理硬碟,這個時候上層的服務是感覺不到的,因為呈現給上層服務的是以邏輯卷的方式。
LVM最大的特點就是可以對磁碟進行動態管理。因為邏輯卷的大小是可以動態調整的,而且不會丟失現有的資料。如果我們新增加了硬碟,其也不會改變現有上層的邏輯卷。作為一個動態磁碟管理機制,邏輯卷技術大大提高了磁碟管理的靈活性。
基本的邏輯卷管理概念:
PV(Physical Volume)- 物理卷
物理捲在邏輯卷管理中處於最底層,它可以是實際物理硬碟上的分割區,也可以是整個物理硬碟,也可以是raid裝置。
VG(Volumne Group)- 卷組
捲組建立在物理卷之上,一個捲組中至少要包括一個物理卷,在捲組建立之後可動態新增物理捲到卷組中。一個邏輯卷管理系統工程中可以只有一個捲組,也可以擁有多個捲組。
LV(Logical Volume)- 邏輯卷
邏輯卷建立在捲組之上,捲組中的未分配空間可以用於建立新的邏輯卷,邏輯卷建立後可以動態地擴充套件和縮小空間。系統中的多個邏輯卷可以屬於同一個捲組,也可以屬於不同的多個捲組。

好的我們了解了這麼多,那麼我們就來玩下吧!

如何調整LVM 邏輯分割區的大小?  http://www.linuxidc.com/Linux/2016-06/132709.htm

LVM2詳解  http://www.linuxidc.com/Linux/2015-09/122976.htm

Ubuntu 上使用 LVM 輕鬆調整分割區並製作快照  http://www.linuxidc.com/Linux/2015-09/122563.htm

使用LVM建立彈性磁碟儲存——第一部分  http://www.linuxidc.com/Linux/2014-10/107697.htm

在Linux中擴充套件/縮減LVM(第二部分)  http://www.linuxidc.com/Linux/2014-10/107786.htm

在 LVM中 錄制邏輯卷快照並恢復(第三部分) http://www.linuxidc.com/Linux/2014-11/108867.htm

在LVM中設定精簡資源調配卷(第四部分) http://www.linuxidc.com/Linux/2014-11/109757.htm

使用條塊化I/O管理多個LVM磁碟(第五部分) http://www.linuxidc.com/Linux/2014-12/110532.htm

一、準備好我們的分割區,然後更改好分割區的格式
[root@linuxidc ~]# fdisk -l 
Disk /dev/sdb: 128.8 GB, 128849018880 bytes, 251658240 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
#檢視下有哪些空閒的磁碟,我這裡使用/dev/sdb和塊,部分資訊省略。
 
 
[root@linuxidc ~]# fdisk /dev/sdb
Command (m for help): t
Partition number (1-4, default 4): 
Hex code (type L to list all codes): 8e ##更改格式為8e
Changed type of partition 'Linux' to 'Linux LVM'
 
Command (m for help): p
 
Disk /dev/sdb: 128.8 GB, 128849018880 bytes, 251658240 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x6428a1e6
 
  Device Boot      Start        End      Blocks  Id  System
/dev/sdb1            2048    62916607    31457280  8e  Linux LVM
/dev/sdb2        62916608  125831167    31457280  8e  Linux LVM
/dev/sdb3      125831168  188745727    31457280  8e  Linux LVM
/dev/sdb4      188745728  251658239    31456256  8e  Linux LVM
########################################看此時我們的格式都全部改為了8e lvm格式。
 
[root@linuxidc ~]# ls /dev/sdb* #檢視下有沒有識別到我們分割區
/dev/sdb  /dev/sdb1  /dev/sdb2  /dev/sdb3  /dev/sdb4
[root@linuxidc ~]# partprobe /dev/sdb #如果分割區沒識別我們需要重新整理下強制識別。

二、建立pv捲
PV 有關的命令:
pvcreate :將實體 partition 建立成為 PV ;

pvscan :掃描系統存在的pv,pvs簡要顯示

pvdisplay :顯示出目前系統上面的 PV 狀態;

pvremove :將 PV 屬性移除,讓該 partition 不具有 PV 屬性。

[root@linuxidc ~]# pvcreate /dev/sdb{1,2,3}
  Device /dev/sdb1. not found (or ignored by filtering).
  Physical volume "/dev/sdb2" successfully created
  Physical volume "/dev/sdb3" successfully created
  ##我們一次建立了三個pv,分別為/dev/sdb1 /dev/sdb2 /dev/sdb3
 
[root@linuxidc ~]# pvscan 
  PV /dev/sdb2        lvm2 [30.00 GiB]
  PV /dev/sdb3        lvm2 [30.00 GiB]
  PV /dev/sdb1        lvm2 [30.00 GiB]
  Total: 3 [90.00 GiB] / in use: 0 [0  ] / in no VG: 3 [90.00 GiB] 
  ## 顯示pv的基本資訊,總共pv大小,vg已經使用pv大小,剩餘pv的大小
   
   
[root@linuxidc ~]# pvdisplay ##顯示pv的詳細資訊
  "/dev/sdb2" is a new physical volume of "30.00 GiB"
  --- NEW Physical volume ---
  PV Name              /dev/sdb2 ##pv的名稱
  VG Name              ##沒有被分配所以顯示空白
  PV Size              30.00 GiB ##pv容量大小
  Allocatable          NO #是否被分配
  PE Size              0  #PE的大小 
  Total PE              0  已分配出去PE大小 
  Free PE              0 空閒PE大小
  Allocated PE          0 #剩下可用PE大小
  PV UUID              bmWNn0-7PND-2yVL-TGT7-U9mf-Du01-ERq7FY#pv的id號
  ##由於PE是在啊VG建立的時候才會指定各種的大小,所以此次大不分都顯示0
   
  "/dev/sdb3" is a new physical volume of "30.00 GiB"
  --- NEW Physical volume ---
  PV Name              /dev/sdb3
  VG Name               
  PV Size              30.00 GiB
  Allocatable          NO
  PE Size              0 
  Total PE              0
  Free PE              0
  Allocated PE          0
  PV UUID              sRE2ko-dd80-RxF3-zTGi-OMFH-z1AD-KFN0cL
   
  "/dev/sdb1" is a new physical volume of "30.00 GiB"
  --- NEW Physical volume ---
  PV Name              /dev/sdb1
  VG Name               
  PV Size              30.00 GiB
  Allocatable          NO
  PE Size              0 
  Total PE              0
  Free PE              0
  Allocated PE          0
  PV UUID              67mTD7-OroO-n5iK-GWBQ-Mqow-BYzi-HXraKm

三、建立VG
建立 VG 相關的命令:
vgcreate -s  大小  VG名  pv名(建立的時候可以指定PE大小)
vgcreate :就是主要建立 VG 的命令

vgscan :搜尋系統上面是否有 VG ,vgs顯示簡要資訊

vgdisplay :顯示目前系統上面的 VG 狀態

vgextend :擴充套件VG

vgreduce :在 VG 內移除 PV

vgchange :設定 VG 是否啟動 (active)

vgremove :刪除一個 VG

[root@linuxidc ~]# vgcreate vg0 /dev/sdb{1,2,3}
  Volume group "vg0" successfully created
   
[root@linuxidc ~]# vgs
  VG  #PV #LV #SN Attr  VSize  VFree 
  vg0    3  0  0 wz--n- 89.99g 89.99g
   
[root@linuxidc ~]# vgscan 
  Reading all physical volumes.  This may take a while...
  Found volume group "vg0" using metadata type lvm2
   
[root@linuxidc ~]# vgdisplay 
  --- Volume group ---
  VG Name              vg0
  System ID             
  Format                lvm2
  Metadata Areas        3
  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                3
  Act PV                3
  VG Size              89.99 GiB##VG總共的大小90G(我pv每個大小30G)
  PE Size              4.00 MiB ##每個PE的大小為4MB
  Total PE              23037
  Alloc PE / Size      0 / 0 
  Free  PE / Size      23037 / 89.99 GiB
  VG UUID              p8dacU-UFYP-eazU-Jelp-vRAN-wEP3-hxzXfW

四、建立LVM
LVM建立相關命令:
lvcreate :建立 LV

lvscan :查詢系統上面的

lvdisplay :顯示系統上面的 LV 狀態啊

lvextend :擴充套件容量

lvreduce :減少容量

lvremove :刪除一個 LV

[root@linuxidc ~]# lvcreate -L +50G -n lv0 vg0 ##建立LVM大小50G,名稱lv0,從vg0中調容量
  Logical volume "lv0" created.##建立成功
   
[root@linuxidc ~]# lvs
  LV  VG  Attr      LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  lv0  vg0  -wi-a----- 50.00g 
                                                     
[root@linuxidc ~]# lvscan 
  ACTIVE            '/dev/vg0/lv0' [50.00 GiB] inherit
   
[root@linuxidc ~]# lvdisplay 
  --- Logical volume ---
  LV Path                /dev/vg0/lv0#lv全名稱
  LV Name                lv0
  VG Name                vg0
  LV UUID                bCpncg-nTn7-V5vk-NWVq-NTT5-lmQx-Ayfcqd
  LV Write Access        read/write ##可讀可寫許可權
  LV Creation host, time linuxidc, 2016-06-04 15:16:40 +0800#建立時間和建立人
  LV Status              available
  # open                0
  LV Size                50.00 GiB
  Current LE            12800
  Segments              2
  Allocation            inherit
  Read ahead sectors    auto
  - currently set to    8192
  Block device          253:0

五、將建立好的lvm卷進行檔案系統格式處理,然後掛載供我們使用
[root@linuxidc ~]# mkfs.ext4 /dev/vg0/lv0 
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
3276800 inodes, 13107200 blocks
655360 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=2162163712
400 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, 2654208, 
    4096000, 7962624, 11239424
 
Allocating group tables: done                           
Writing inode tables: done                           
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done
 
[root@linuxidc ~]# mkdir /lvmtest/
[root@linuxidc ~]# mount /dev/vg0/lv0 /lvmtest/
[root@linuxidc ~]# mount 
 
/dev/sda5 on /testdir type xfs (rw,relatime,seclabel,attr2,inode64,noquota)
/dev/sda1 on /boot type xfs (rw,relatime,seclabel,attr2,inode64,noquota)
tmpfs on /run/user/42 type tmpfs (rw,nosuid,nodev,relatime,seclabel,size=100136k,mode=700,uid=42,gid=42)
tmpfs on /run/user/0 type tmpfs (rw,nosuid,nodev,relatime,seclabel,size=100136k,mode=700)
/dev/mapper/vg0-lv0 on /lvmtest type ext4 (rw,relatime,seclabel,data=ordered)
[root@linuxidc ~]# cd /lvmtest/
[root@linuxidc lvmtest]# ls
lost+found
[root@linuxidc lvmtest]# mkdir lvmtest1
[root@linuxidc lvmtest]# ls
lost+found  lvmtest1
建立了/lvmtest目錄,然後掛載到此目錄下,去寫了點東西,測試OK沒有問題!

當我們的vg和lv空間不夠用了那麼我們該怎麼辦呢?
六、vg的擴充套件,縮減,移除
擴充套件vg捲大小
    我之前還有一個/dev/sdb4分割區沒有,現在可以派上用場了。

[root@linuxidc ~]# vgextend vg0 /dev/sdb4 
  Physical volume "/dev/sdb4" successfully created##將/dev/sdb4分割區建立成了pv
  Volume group "vg0" successfully extended###/dev/sdb4這個pv成功的加入到了vg中來了
   
[root@linuxidc ~]# pvscan 
  PV /dev/sdb1  VG vg0  lvm2 [30.00 GiB / 0    free]
  PV /dev/sdb2  VG vg0  lvm2 [30.00 GiB / 9.99 GiB free]
  PV /dev/sdb3  VG vg0  lvm2 [30.00 GiB / 30.00 GiB free]
  PV /dev/sdb4  VG vg0  lvm2 [30.00 GiB / 30.00 GiB free]##看此時相比前面多了一個pv
  Total: 4 [119.98 GiB] / in use: 4 [119.98 GiB] / in no VG: 0 [0  ]
[root@linuxidc ~]# vgscan 
  Reading all physical volumes.  This may take a while...
  Found volume group "vg0" using metadata type lvm2
   
[root@linuxidc ~]# vgdisplay 
  --- Volume group ---
  VG Name              vg0
  System ID             
  Format                lvm2
  Metadata Areas        4
  Metadata Sequence No  3
  VG Access            read/write
  VG Status            resizable
  MAX LV                0
  Cur LV                1
  Open LV              1
  Max PV                0
  Cur PV                4
  Act PV                4
  VG Size              119.98 GiB###看大小發生了改變了
  PE Size              4.00 MiB
  Total PE              30716
  Alloc PE / Size      12800 / 50.00 GiB
  Free  PE / Size      17916 / 69.98 GiB
  VG UUID              p8dacU-UFYP-eazU-Jelp-vRAN-wEP3-hxzXfW

縮減vg大小
[root@linuxidc ~]# pvscan 
  PV /dev/sdb1  VG vg0  lvm2 [30.00 GiB / 0    free]
  PV /dev/sdb2  VG vg0  lvm2 [30.00 GiB / 9.99 GiB free]
  PV /dev/sdb3  VG vg0  lvm2 [30.00 GiB / 30.00 GiB free]
  PV /dev/sdb4  VG vg0  lvm2 [30.00 GiB / 30.00 GiB free]
  Total: 4 [119.98 GiB] / in use: 4 [119.98 GiB] / in no VG: 0 [0  ]
  ##檢視下pv有哪些是沒有被使用的,由此我們可以看出/dev/sdb3 /dev/sdb4沒用
   
  [root@linuxidc ~]# vgreduce vg0 /dev/sdb4 
  Removed "/dev/sdb4" from volume group "vg0"
[root@linuxidc ~]# pvscan 
  PV /dev/sdb1  VG vg0  lvm2 [30.00 GiB / 0    free]
  PV /dev/sdb2  VG vg0  lvm2 [30.00 GiB / 9.99 GiB free]
  PV /dev/sdb3  VG vg0  lvm2 [30.00 GiB / 30.00 GiB free]
  PV /dev/sdb4            lvm2 [30.00 GiB] 
  Total: 4 [119.99 GiB] / in use: 3 [89.99 GiB] / in no VG: 1 [30.00 GiB]
   
[root@linuxidc ~]# vgdisplay 
  --- Volume group ---
  VG Name              vg0
  System ID             
  Format                lvm2
  Metadata Areas        3
  Metadata Sequence No  9
  VG Access            read/write
  VG Status            resizable
  MAX LV                0
  Cur LV                1
  Open LV              1
  Max PV                0
  Cur PV                3
  Act PV                3
  VG Size              89.99 GiB
  PE Size              4.00 MiB
  Total PE              23037
  Alloc PE / Size      12800 / 50.00 GiB
  Free  PE / Size      10237 / 39.99 GiB
  VG UUID              p8dacU-UFYP-eazU-Jelp-vRAN-wEP3-hxzXfW

七、擴充套件、縮減LV

擴充套件邏輯卷:(支援線上擴充套件)
[root@linuxidc ~]# lvextend -L +30G /dev/vg0/lv0 
  Size of logical volume vg0/lv0 changed from 80.00 GiB (20480 extents) to 110.00 GiB (28160 extents).
  Logical volume lv0 successfully resized.##o擴充套件成功 
   
[root@linuxidc ~]# lvs
  LV  VG  Attr      LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  lv0  vg0  -wi-ao---- 110.00g     
   
 [root@linuxidc ~]# df -h 
Filesystem          Size  Used Avail Use% Mounted on
/dev/sda2            94G  3.2G  90G  4% /
devtmpfs            475M    0  475M  0% /dev
tmpfs                489M  84K  489M  1% /dev/shm
tmpfs                489M  7.1M  482M  2% /run
tmpfs                489M    0  489M  0% /sys/fs/cgroup
/dev/sda5            19G  33M  19G  1% /testdir   
##lv已經擴充套件成功了,但是我們檔案系統中的大小沒加大,所以我麼還需要處理下。
 
[root@linuxidc ~]# resize2fs /dev/vg0/lv0 ##通過此命令讓檔案系統容量確實增大
resize2fs 1.42.9 (28-Dec-2013)
Filesystem at /dev/vg0/lv0 is mounted on /lvmtest; on-line resizing required
old_desc_blocks = 7, new_desc_blocks = 14
The filesystem on /dev/vg0/lv0 is now 28835840 blocks long.
 
[root@linuxidc ~]# df -h 
Filesystem          Size  Used Avail Use% Mounted on
/dev/sda2            94G  3.2G  90G  4% /
devtmpfs            475M    0  475M  0% /dev
tmpfs                489M  84K  489M  1% /dev/shm
tmpfs                489M  7.1M  482M  2% /run
tmpfs                489M    0  489M  0% /sys/fs/cgroup
/dev/sda5            19G  33M  19G  1% /testdir
/dev/sda1            473M  153M  321M  33% /boot
tmpfs                98M  16K  98M  1% /run/user/42
tmpfs                98M    0  98M  0% /run/user/0
/dev/mapper/vg0-lv0  109G  60M  104G  1% /lvmtest ### ok顯示現在已經是110G

縮減邏輯卷:(不支援線上擴充套件,必須先解除安裝)
確保縮減後的空間可以儲存原來所有資料。並且在縮減前先要進行強制檢查,確保檔案系統處於一致狀態
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647 [root@linuxidc ~]# umount /lvmtest/##解除安裝
[root@linuxidc ~]# e2fsck -f /dev/vg0/lv0 ##強行檢查檔案系統
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/vg0/lv0: 12/7208960 files (0.0% non-contiguous), 500575/28835840 blocks
 
 
[root@linuxidc ~]# resize2fs /dev/vg0/lv0 5G ##縮減邏輯空間到5G
resize2fs 1.42.9 (28-Dec-2013)
Resizing the filesystem on /dev/vg0/lv0 to 1310720 (4k) blocks.
The filesystem on /dev/vg0/lv0 is now 1310720 blocks long.
 
 
 
[root@linuxidc ~]# lvreduce -L 5G /dev/vg0/lv0 ##縮減邏輯空間到5G
  WARNING: Reducing active logical volume to 5.00 GiB
  THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce lv0? [y/n]: y #輸入y同意
  Size of logical volume vg0/lv0 changed from 110.00 GiB (28160 extents) to 5.00 GiB (1280 extents).
  Logical volume lv0 successfully resized.##縮減成功
   
   
[root@linuxidc ~]# lvs
  LV  VG  Attr      LSize Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  lv0  vg0  -wi-a----- 5.00g  ##檢視lv已經變成5G大小了
   
                                                     
[root@linuxidc ~]# mount /dev/vg0/lv0 /lvmtest/##重新掛載我麼的檔案系統
[root@linuxidc ~]# df -h 
Filesystem          Size  Used Avail Use% Mounted on
/dev/sda2            94G  3.2G  90G  4% /
devtmpfs            475M    0  475M  0% /dev
tmpfs                489M  84K  489M  1% /dev/shm
tmpfs                489M  7.1M  482M  2% /run
tmpfs                489M    0  489M  0% /sys/fs/cgroup
/dev/sda5            19G  33M  19G  1% /testdir
/dev/sda1            473M  153M  321M  33% /boot
tmpfs                98M  16K  98M  1% /run/user/42
tmpfs                98M    0  98M  0% /run/user/0
/dev/mapper/vg0-lv0  4.8G  33M  4.6G  1% /lvmtest
[root@linuxidc ~]# cd /lvmtest/
[root@linuxidc lvmtest]# ls
lost+found  lvmtest1#####測試看ok沒有問,資料沒損壞。

 


IT145.com E-mail:sddin#qq.com