LVM邏輯卷的管理和使用



本篇將從頭到尾演示一遍邏輯卷的管理.

主要步驟
1、創建lv邏輯卷步驟
     前提:先創建3個磁盤分區,類型為8e;
         1、PV創建
             pvcrete /dev/sda#
         2、VG創建
             vgcreate VG_NAME /dev/sda# /dev/sda#+1 ...
         3、LV創建
             lvcreate -L # -n LV_NAME VG_NAME
         4、格式化文件系統
             mkfs.ext4 LV_NAME
         5、掛載使用
             mount /PATH/TO/VG_NAME/LV_NAME 掛載點
2、擴展lv步驟:
     前提:先保證vg有足夠的空間pv
         1、lvextend -L #[MGT] /dev/VG_NAME/LV_NAME
         2、resize2fs /dev/VG_NAME/LV_NAME
3、縮減lv步驟:
     前提:先保證vg有足夠的空間pv,再保證pv有足夠空間的lv
       提示:xfs文件格式不支持縮減.請使用ext系列文件格式測試.
         1、先卸載
             umount /dev/VG_NAME/LV_NAME
         2、強制檢查文件系統一致性
             e2fsck -f /dev/VG_NAME/LV_NAME
         3、縮減邏輯邊界(縮減后空間一定要能容納現有文件)
             resize2fs /dev/VG_NAME/LV_NAME #[MMT](縮減到多少)
         4、縮減物理邊界
             lvreduce -L #(縮減到多少)[MGT] /dev/VG_NAME/LV_NAME
             輸入:y,確認縮減;
         5、重新掛載
             mount /dev/VG_NAME/LV_NAME /PATH/TO/SOMEDIR
         6、查看磁盤分區確認
             $ df -lh
4、創建快照卷
     同創建lv,前提確保有足夠的可用lv空間
         1、lvcreate -s -L #G SNAP_NAME -p r /dev/VG_NAME/LV_NAME
         2、掛載使用
         3、恢復快照
           取消掛載邏輯卷和對應的快照
           umount /dev/VG_NAME/SNAP_NAME
           umount /dev/VG_NAME/LV_NAME
           合並快照內容
               lvconvert --merge /dev/VG_NAME/SNAP_NAME
         4、刪除快照
           取消快照文件夾的掛載,再lvremove.
           umount /PATH/TO/SOMEDIR
           lvremove /dev/VG_NAME/SNAP_NAME

5、卸載刪除lv步驟:
     前提:確保數據備份
         1、卸載
             umount 掛載點
         2、移除lv
             lvremove /dev/VG_NAME/LV_NAME
         3、移除vg
             vgremove VG_NAME
         4、移除pv
             pvremove /dev/sda#



演示開始

創建物理卷pv


pvcreate 設備名

$ pvcreate /dev/sd{b1,c1,d}
   Physical volume "/dev/sdb1" successfully created.
   Physical volume "/dev/sdc1" successfully created.
   Physical volume "/dev/sdd" successfully created.


 $ pvs
   PV         VG Fmt  Attr PSize  PFree 
   /dev/sdb1     lvm2 ---   3.00g  3.00g
   /dev/sdc1     lvm2 ---   3.00g  3.00g
   /dev/sdd      lvm2 ---  20.00g 20.00g


$ blkid
 /dev/sda1: UUID="afb7fd40-2397-48d1-bca4-717be297f93c" TYPE="xfs" 
 /dev/sda2: UUID="85c6b174-252c-4055-b570-e9eeaa777965" TYPE="xfs" 
 /dev/sda3: UUID="07d4e313-2004-45fc-864c-e60bf597ca75" TYPE="swap" 
 /dev/sdb1: UUID="Fe2tDt-oit1-FSAl-KxzW-aF6H-ZilG-QCWDlo" TYPE="LVM2_member" 
 /dev/sdc1: UUID="dUedrJ-I41U-38uc-5lYZ-eBMZ-8fJF-Gm9gz7" TYPE="LVM2_member" 
 /dev/sdd: UUID="phMgr1-Bu0B-J5fs-aojc-2Yyp-Ue0j-RYoHjN" TYPE="LVM2_member" 


 $ pvdisplay
   "/dev/sdb2" is a new physical volume of "3.00 GiB"
   --- NEW Physical volume ---
  PV Name               /dev/sdb2
   VG Name               
   PV Size               3.00 GiB
   Allocatable           NO
   PE Size               0   
   Total PE              0
   Free PE               0
   Allocated PE          0
   PV UUID               KMMRGl-2R9b-0SZo-aWSX-ryQG-IOyL-rez5sH


此時還沒有VG Name和PE相關的數據,因為要有VG之后才會被創建.


創建卷組vg


vgcreate
vgcreate [-s #[kKmMgGtTpPeE]] VolumeGroupName PhysicalDevicePath [PhysicalDevicePath...]
-s 指明PE大小,單位可用kKmMgGtTpPeE;

$ vgcreate -s 4M vg0 /dev/sd{b1,c1,d}
   Volume group "vg0" successfully created

$ vgs
   VG  #PV #LV #SN Attr   VSize   VFree  
   vg0   3   0   0 wz--n- <25.99g <25.99g



創建邏輯卷lv


   lvcreate -n lv0 -L 16G vg0
   Logical volume "lv0" created.

$ gdisplay
   --- Volume group ---
  VG Name               vg0
   System ID             
   Format                lvm2
   Metadata Areas        3
   Metadata Sequence No  2
   VG Access             read/write
   VG Status             resizable
   MAX LV                0
   Cur LV                1
   Open LV               0
   Max PV                0
   Cur PV                3
   Act PV                3
   VG Size               <25.99 GiB
   PE Size               4.00 MiB
   Total PE              6653
   Alloc PE / Size       4096 / 16.00 GiB
   Free  PE / Size       2557 / <9.99 GiB
   VG UUID               eQ4KLZ-fAJh-1gX8-Qrp5-o0Qx-0LgM-G4kXRi


 $ vs
   LV   VG  Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
   lv0  vg0 -wi-a----- 16.00g 


   $ lvdisplay
   --- Logical volume ---
   LV Path                /dev/vg0/lv0
   LV Name                lv0
   VG Name                vg0
  LV UUID                PYsVIR-u4DI-Oq0X-dXcA-ilJ2-jLJL-1T9Zx7
  LV Write Access        read/write
   LV Creation host, time centos7.qt, 2017-12-10 00:10:58 +0800
   LV Status              available
   # open                 0
   LV Size                16.00 GiB
   Current LE             4096
   Segments               1
   Allocation             inherit
   Read ahead sectors     auto
   - currently set to     8192
   Block device           253:0

創建lv,使用所有剩余空間

$ lvcreate -n lv1 -l +100%free vg0
   Logical volume "lv1" created.


給每個lv創建文件系統

$ kfs.ext4 /dev/vg0/lv0
$ mkfs.xfs /dev/vg0/lv1


掛載
為了開機自動掛載,寫入fstab

$ vim /etc/fstab
 UUID=03213fc3-305e-4f26-889c-ae0487322b61 /mnt/lv0 ext4 defaults 0 0
 UUID=a34535a7-19ae-4943-af2f-091d4d571e6c /mnt/lv1 xfs defaults 0 0

$ mkdir /mnt/lv{0,1}
$ mount -a


擴展卷組lv


看一下可用分區(已刪除無關磁盤信息)

$ lsblk
 NAME        MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sdb           8:16   0   20G  0 disk 
 ├─sdb1        8:17   0    3G  0 part 
 │ └─vg0-lv1 253:1    0   10G  0 lvm  /mnt/lv1
 └─sdb2        8:18   0    3G  0 part 
sdc           8:32   0   20G  0 disk 
 ├─sdc1        8:33   0    3G  0 part 
 │ └─vg0-lv1 253:1    0   10G  0 lvm  /mnt/lv1
 └─sdc2        8:34   0    3G  0 part 
sdd           8:48   0   20G  0 disk 
 ├─vg0-lv0   253:0    0   16G  0 lvm  /mnt/lv0
 └─vg0-lv1   253:1    0   10G  0 lvm  /mnt/lv1


使用/dev/sdb2創建一個pv

$ pvcreate /dev/sdb2
   Physical volume "/dev/sdb2" successfully created.

可以看到新創建的PV,sdb2
 

$ pvs
   PV         VG  Fmt  Attr PSize   PFree
   /dev/sdb1  vg0 lvm2 a--   <3.00g    0 
   /dev/sdb2      lvm2 ---    3.00g 3.00g
   /dev/sdc1  vg0 lvm2 a--   <3.00g    0 
   /dev/sdd   vg0 lvm2 a--  <20.00g    0

擴展vg,把新PV加進去

$ vgextend vg0 /dev/sdb2
   Volume group "vg0" successfully extended

可以看到Free PE 已經有了
  

$ vgdisplay
   --- Volume group ---
  VG Name               vg0
   System ID             
   Format                lvm2
   Metadata Areas        4
   Metadata Sequence No  4
   VG Access             read/write
   VG Status             resizable
   MAX LV                0
   Cur LV                2
   Open LV               2
   Max PV                0
   Cur PV                4
   Act PV                4
   VG Size               28.98 GiB
   PE Size               4.00 MiB
   Total PE              7420
   Alloc PE / Size       6653 / <25.99 GiB
   Free  PE / Size       767 / <3.00 GiB
   VG UUID               eQ4KLZ-fAJh-1gX8-Qrp5-o0Qx-0LgM-G4kXRi


   
先查看一下lv目前容量,再擴展一下lv1

$ lvs;lvextend -r -l +100%free /dev/vg0/lv1 #-r 可以更新df命令中的結果.
   LV   VG  Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
   lv0  vg0 -wi-ao---- 16.00g                                                    
   lv1  vg0 -wi-ao---- <9.99g                                                    
   Size of logical volume vg0/lv1 changed from <9.99 GiB (2557 extents) to 12.98 GiB (3324 extents).
   Logical volume vg0/lv1 successfully resized.

之后再看lv容量,已經變大

$ lvs
   LV   VG  Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
   lv0  vg0 -wi-ao---- 16.00g                                                    
   lv1  vg0 -wi-ao---- 12.98g 

再看vg剩余空間,已經用完
  

$ vgdisplay | grep 'Free  PE'
   Free  PE / Size       0 / 0  


縮減邏輯卷

必須先取消掛載要縮減的邏輯卷

$ umount /mnt/lv0

要先執行磁盤檢測,否則會提示
Please run 'e2fsck -f /dev/vg0/lv0' first.


磁盤檢測

$ 2fsck -f /dev/vg0/lv0


再縮減文件系統

$ esize2fs /dev/vg0/lv0 8G
$ esize2fs 1.42.9 (28-Dec-2013)
Resizing the filesystem on /dev/vg0/lv0 to 2097152 (4k) blocks.
The filesystem on /dev/vg0/lv0 is now 2097152 blocks long.


縮減邏輯卷lv

$ vreduce -L 8G /dev/vg0/lv0
   WARNING: Reducing active logical volume to 8.00 GiB.
   THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce vg0/lv0? [y/n]: y
   Size of logical volume vg0/lv0 changed from 16.00 GiB (4096 extents) to 8.00 GiB (2048 extents).
   Logical volume vg0/lv0 successfully resized.

重新掛載

$ mount –a


查看一下

$ df -h
 /dev/mapper/vg0-lv0  7.8G   37M  7.3G   1% /mnt/lv0
 /dev/mapper/vg0-lv1   10G   33M   10G   1% /mnt/lv1


邏輯卷快照管理


快照就是將當時的系統信息記錄下來,就好像照相一般,若將來有任何數據改動了,則原始數據會被移動到快照區,沒有改動的區域則由快照區和文件系統共享
由於快照區與原本的LV共用很多PE的區塊,因此快照去與被快照的LV必須在同一個VG.系統恢復的時候的文件數量不能高於快照區的實際容量


創建快照

給lv0 創建快照

$ lvcreate -s -p r -L 3G -n lv0_snapshot /dev/vg0/lv0

選項說明:
-s|--snapshot original_lv_name:創建為快照卷,指明原卷;
-n|--name snapshot_lv_name:定義快照卷名稱;
-L|--size #[mMgGtT]:指定邏輯卷空間大小;
-p|--permission {r|rw}:指定邏輯卷權限,r為只讀,rw為讀寫(快照卷通常為只讀);


查看已創建的快照(已刪除無關磁盤信息)

$ lsblk

NAME                   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sdb                      8:16   0   20G  0 disk 
 ├─sdb1                   8:17   0    3G  0 part 
 │ └─vg0-lv1            253:1    0   13G  0 lvm  /mnt/lv1
 └─sdb2                   8:18   0    3G  0 part 
   └─vg0-lv1            253:1    0   13G  0 lvm  /mnt/lv1
sdc                      8:32   0   20G  0 disk 
 ├─sdc1                   8:33   0    3G  0 part 
 │ └─vg0-lv1            253:1    0   13G  0 lvm  /mnt/lv1
 └─sdc2                   8:34   0    3G  0 part 
sdd                      8:48   0   20G  0 disk 
 ├─vg0-lv1              253:1    0   13G  0 lvm  /mnt/lv1
 ├─vg0-lv0-real         253:2    0    8G  0 lvm  
 │ ├─vg0-lv0            253:0    0    8G  0 lvm  /mnt/lv0
 │ └─vg0-lv0_snapshot   253:4    0    8G  1 lvm  
 └─vg0-lv0_snapshot-cow 253:3    0    3G  1 lvm  
   └─vg0-lv0_snapshot   253:4    0    8G  1 lvm  


掛載快照

$ mount /dev/vg0/lv1_snapshot /mnt/snap

$ mount: /dev/mapper/vg0-lv0_snapshot is write-protected, mounting read-only


恢復快照

$ mount /dev/vg0/lv0_snapshot

$ umount /dev/vg0/lv0

$ lvconvert --merge /dev/vg0/lv0_snapshot


刪除快照

$ umount /mnt/snap
$ lvremove /dev/vg0/lv0_snapshot


免責聲明!

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



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