1. 程式人生 > >LVM邏輯卷的配置和掛載使用

LVM邏輯卷的配置和掛載使用

LVM邏輯卷的配置和掛載使用

為什麼使用LVM?

①硬碟的多個分割槽由LVM統一為卷組管理,可以方便的加入或移走分割槽以擴大或減小卷組的可用容量,充分利用硬碟空間

②使用者/使用者組的空間建立在LVM上,可以隨時按要求增大,或根據使用情況對各邏輯捲進行調整。當系統空間不足而加入新的硬碟時,不必把使用者的資料從原硬碟遷移到新硬碟,而只須把新的分割槽加入卷組並擴充邏輯卷即可。同樣,使用LVM可以在不停服務的情況下。把使用者資料從舊硬碟轉移到新硬碟空間中去

名詞解釋:

PV: 物理

VG:卷組

LV :邏輯卷

LVM配置步驟:

  1. 將磁碟加入pv # pvcreate /dev/sdb /dev/sdc /dev/sdd

  2. 將pv加入到vg卷組 # vgcreate datavg /dev/sdb /dev/sdc /dev/sdd

  3. 分配lv使用 # lvcreate -L 100M -n lv1 datavg

  4. 檢視命令:pvs、vgs、lvs

一、例如有三塊硬碟: sdb、sdc、sdd

先使用兩塊,sdd稍後用來示範VG擴充套件和移除

[root@localhost ~]# lsblk |grep "sd[bcd]"
sdb             8:16   0  204M  0 disk 
sdc             8:32   0  204M  0 disk 
sdd             8
:48 0 204M 0 disk [root@localhost ~]# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 30G 0 disk ├─sda1 8:1 0 200M 0 part /boot ├─sda2 8:2 0 25.8G 0 part │ ├─rhel-root 253:0 0 23.8G 0 lvm / │ └─rhel-home 253:1 0 2G 0 lvm /home └─sda3 8
:3 0 4G 0 part [SWAP] sdb 8:16 0 204M 0 disk sdc 8:32 0 204M 0 disk sdd 8:48 0 204M 0 disk sr0 11:0 1 3.8G 0 rom [root@localhost ~]#
  1. 將sdb磁碟加入pv
[root@localhost ~]# pvcreate /dev/sdb
  Physical volume "/dev/sdb" successfully created
[root@localhost ~]# echo $?
0
[root@localhost ~]# pvs
  PV         VG   Fmt  Attr PSize   PFree  
  /dev/sda2  rhel lvm2 a--   25.80g      0 
  /dev/sdb        lvm2 ---  204.00m 204.00m
[root@localhost ~]#

如果加入失敗可以先將磁碟格式化:mkfs.etx4 /dev/sdb 格式化成什麼格式自己選,這裡是ext4

  1. 檢視pv建立情況:
[root@localhost ~]# pvs
  PV         VG   Fmt  Attr PSize   PFree  
  /dev/sda2  rhel lvm2 a--   25.80g      0 
  /dev/sdb        lvm2 ---  204.00m 204.00m
[root@localhost ~]#
  1. 再將sdc磁碟加入pv
[root@localhost ~]# pvcreate /dev/sdc
  Physical volume "/dev/sdc" successfully created
[root@localhost ~]# pvs
  PV         VG   Fmt  Attr PSize   PFree  
  /dev/sda2  rhel lvm2 a--   25.80g      0 
  /dev/sdb        lvm2 ---  204.00m 204.00m
  /dev/sdc        lvm2 ---  204.00m 204.00m
[root@localhost ~]#
  • 思考:現在有兩個PV物理捲了,我們需要將這兩個物理卷加入卷組,所以需要建立一個卷組VG

  • 注意:在某個物理卷在加入卷組時,會將物理卷的最小儲存單元設定為一個固定的值,這個值稱為PE(physical extent)。這個值的建立,是為了保證用統一的最小分配單元來建立邏輯卷,不至於因為分配單元大小不同而造成空間浪費。舉個例子:用於遠洋運輸的集裝箱的設計是是有著統一標準的,最重要一點是集裝箱大小完全相同,這樣做的好處是集裝箱相互堆疊在一起不會留下多餘的空隙,完全利用了空間,且便於管理。設定PE的原因也與此相同。LVM以最小分配單元來建立邏輯卷,該最小分配單元的值稱為LE(logical extent)。一般來說PE=LE,且大小為2^n。

    1. 建立名為datavg的卷組,並將sdb和sdc這兩個物理卷加入到卷組datavg
[root@localhost ~]# vgcreate datavg /dev/sdb /dev/sdc
  Volume group "datavg" successfully created
[root@localhost ~]# vds
bash: vds: command not found...

通過以下兩個命令可以看出sdb和sdc物理卷都已加入名為datavg的卷組中了

[[email protected] ~]# vgs
  VG     #PV #LV #SN Attr   VSize   VFree  
  datavg   2   0   0 wz--n- 400.00m 400.00m
  rhel     1   2   0 wz--n-  25.80g      0 
[[email protected] ~]# pvs
  PV         VG     Fmt  Attr PSize   PFree  
  /dev/sda2  rhel   lvm2 a--   25.80g      0 
  /dev/sdb   datavg lvm2 a--  200.00m 200.00m
  /dev/sdc   datavg lvm2 a--  200.00m 200.00m
[[email protected] ~]#

datavg卷組還可以擴充套件新的pv ,這裡我們暫時不擴充套件

  1. 分配LV邏輯卷使用(利用datavg卷組建立一個名為lv1的邏輯卷,大小為100M)
[root@localhost ~]# lvcreate -L 100M -n lv1 datavg 
  Logical volume "lv1" created.
[root@localhost ~]# 

檢視下邏輯卷的配置情況:

[root@localhost ~]# lvs
  LV   VG     Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  lv1  datavg -wi-a----- 100.00m                                                    
  home rhel   -wi-ao----   2.00g                                                    
  root rhel   -wi-ao----  23.80g                                                    
[root@localhost ~]# lvscan 
  ACTIVE            '/dev/datavg/lv1' [100.00 MiB] inherit
  ACTIVE            '/dev/rhel/home' [2.00 GiB] inherit
  ACTIVE            '/dev/rhel/root' [23.80 GiB] inherit
[root@localhost ~]#
  1. 邏輯卷使用前和分割槽一樣,都需要格式化一下
[root@localhost ~]# mkfs.ext4 /dev/datavg/lv1 
mke2fs 1.42.9 (28-Dec-2013)
Filesystem label=
OS type: Linux
Block size=1024 (log=0)
Fragment size=1024 (log=0)
Stride=0 blocks, Stripe width=0 blocks
25688 inodes, 102400 blocks
5120 blocks (5.00%) reserved for the super user
First data block=1
Maximum filesystem blocks=33685504
13 block groups
8192 blocks per group, 8192 fragments per group
1976 inodes per group
Superblock backups stored on blocks: 
    8193, 24577, 40961, 57345, 73729

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

[root@localhost ~]# echo $?
0
[root@localhost ~]#
  • 知識點:確認上一步操作是否成功可用 [[email protected] ~]# echo $? 檢查,為0表示成功,其他都是失敗

    1. 掛載邏輯捲到/lv1目錄下
[root@localhost /]# mkdir /lv1
[root@localhost /]# mount /dev/datavg/lv1 /lv1/
[root@localhost /]# df -h
Filesystem              Size  Used Avail Use% Mounted on
/dev/mapper/rhel-root    24G  3.6G   19G  16% /
devtmpfs                898M     0  898M   0% /dev
tmpfs                   913M   84K  913M   1% /dev/shm
tmpfs                   913M  9.2M  904M   1% /run
tmpfs                   913M     0  913M   0% /sys/fs/cgroup
/dev/sda1               190M  133M   43M  76% /boot
/dev/mapper/rhel-home   2.0G   12M  1.8G   1% /home
tmpfs                   183M     0  183M   0% /run/user/0
tmpfs                   183M   16K  183M   1% /run/user/42
/dev/mapper/datavg-lv1   93M  1.6M   85M   2% /lv1
[root@localhost /]#
  • 當然我們也可以設定將邏輯卷永久掛載

    ①將邏輯卷的lv1的UUID寫到/etc/fstab配置檔案中

[[email protected] lv1]# blkid |grep "lv1" |awk '{print $2}' >> /etc/fstab

②重新載入下配置檔案/etc/fstab

[root@localhost /]# mount -a
  1. 我們可以看到datavg卷組已經少了100M,先使用的sdb物理卷的空間
[root@localhost /]# vgs
  VG     #PV #LV #SN Attr   VSize   VFree  
  datavg   2   1   0 wz--n- 400.00m 300.00m
  rhel     1   2   0 wz--n-  25.80g      0 
[root@localhost /]#

二、VG的擴充套件pv和移除pv

  • 擴充套件一個新的pv
[root@localhost /]# vgextend datavg /dev/sdd
  • 移除一個pv
[root@localhost ~]# vgreduce datavg /dev/sdd
  • 刪除VG
[root@localhost ~]# vgremove datavg

三、pvmove線上資料遷移(不同物理卷之間)和快照建立(邏輯卷之間)

  • 假如pv物理卷/dev/sdb硬碟已經老化,需要將sdb裡的資料線上遷移到sdc物理卷

    1. 先檢查當前邏輯卷VG中的PV使用情況
[[email protected] /]# df -h
Filesystem              Size  Used Avail Use% Mounted on
/dev/mapper/rhel-root    24G  3.6G   19G  16% /
devtmpfs                898M     0  898M   0% /dev
tmpfs                   913M   84K  913M   1% /dev/shm
tmpfs                   913M  9.2M  904M   2% /run
tmpfs                   913M     0  913M   0% /sys/fs/cgroup
/dev/sda1               190M  133M   43M  76% /boot
/dev/mapper/rhel-home   2.0G   12M  1.8G   1% /home
tmpfs                   183M     0  183M   0% /run/user/0
tmpfs                   183M   16K  183M   1% /run/user/42
/dev/mapper/datavg-lv1   93M   33M   54M  39% /lv1
[[email protected] /]# pvs
  PV         VG     Fmt  Attr PSize   PFree  
  /dev/sda2  rhel   lvm2 a--   25.80g      0 
  /dev/sdb   datavg lvm2 a--  200.00m 100.00m
  /dev/sdc   datavg lvm2 a--  200.00m 200.00m
  /dev/sdd   datavg lvm2 a--  200.00m 200.00m
[[email protected] /]#
  1. 開始資料遷移
[root@localhost etc]# pvmove /dev/sdb /dev/sdc 
  /dev/sdb: Moved: 12.0%
  /dev/sdb: Moved: 100.0%
[root@localhost etc]# pvs
  PV         VG     Fmt  Attr PSize   PFree  
  /dev/sda2  rhel   lvm2 a--   25.80g      0 
  /dev/sdb   datavg lvm2 a--  200.00m 200.00m
  /dev/sdc   datavg lvm2 a--  200.00m 100.00m
  /dev/sdd   datavg lvm2 a--  200.00m 200.00m
[root@localhost etc]#
  1. 遷移完成後可將老舊的物理卷pv(sdb)從卷組中除去
[[email protected] etc]# vgreduce datavg /dev/sdb
  Removed "/dev/sdb" from volume group "datavg"
[[email protected] etc]# vgs
  VG     #PV #LV #SN Attr   VSize   VFree  
  datavg   2   1   0 wz--n- 400.00m 300.00m
  rhel     1   2   0 wz--n-  25.80g      0 
[[email protected] etc]#

// partprobe命令用於重讀分割槽表,當出現刪除檔案後,出現仍然佔用空間。可以partprobe在不重啟的情況下重讀分割槽。
//partprobe命令k可以不用重啟系統即可配合fdisk、gdisk工具建立新的分割槽
[[email protected] /]# partprobe 
  • lvm建立快照lv1-bak
// 製作/dev/datavg/lv1的快照lv1-bak
[root@localhost lv1]# df -h
.......
/dev/mapper/datavg-lv1   93M  1.6M   85M   2% /lv1
[root@localhost lv1]#
// 製作快照前最好先解除安裝/dev/datavg/lv1
[root@localhost /]# umount /lv1/
[root@localhost /]# lvcreate -L 35M -n lv1-bak -s /dev/datavg/lv1
  Rounding up size to full physical extent 36.00 MiB
  Logical volume "lv1-bak" created.
[root@localhost /]# df -h
........
/dev/mapper/datavg-lv1--bak   93M   33M   54M  39% /lv1

四、LVM管理知識擴充套件及易錯問題的出現及方法

  1. lvm的拉伸與縮減

    • 針對xfs檔案系統—–lvm裝置的擴大(只可以擴大,不可以縮小)
// 此操作只能擴大
[root@server188 ~]# lvextend -L 500M /dev/datavg/lv1  
Extending logical volume lv0 to 500.00 MiB 
Logical volume lv0 successfully resized 
[root@server188 ~]# df -h 
Filesystem Size Used Avail Use% Mounted on
….. ….. ….. … 
/dev/mapper/datavg-lv1 197M 11M 187M 6% /lv1
// xfs格式同步下裝置
[root@server188 ~]# xfs_growfs /dev/datavg/lv1 
[root@server188 ~]# df -h 
Filesystem Size Used Avail Use% Mounted on 
……. …… … … 
/dev/mapper/datavg-lv1 497M 11M 487M 3% /lv1
  • 針對ext檔案系統—–lvm裝置的擴大(可拉伸也可縮減)

  • lvm裝置的拉伸

//將/dev/mapper/datavg-lv1格式化為ext格式 
[root@server188 ~]# umount /dev/mapper/datavg-lv1
[root@server188 ~]# mkfs.ext4 /dev/mapper/vg0-lv0

//此時要擴充套件到600M,但vg中容量<600M,因此vg中加入新的物理卷pv
[root@localhost /]# vgextend datavg /dev/sdd
[root@server188 ~]# lvextend -L 2G /dev/vg0/lv0
Extending logical volume lv0 to 2.00 GiB 
Insufficient free space: 387 extents needed, but only 130 available
// lvm丟失pv裝置:unknown device datavg lvm2 a-m  200.00m 200.00m
[root@localhost ~]# pvs
  WARNING: Device for PV MQ1kYt-eH2x-ECas-Gmd6-QNje-j8fq-Of62rx not found or rejected by a filter.
  WARNING: Device for PV 8MPnLa-2u7t-UJus-XZev-M3wj-zbx0-q3AZwT not found or rejected by a filter.
  PV             VG     Fmt  Attr PSize   PFree  
  /dev/sda2      rhel   lvm2 a--   25.80g      0 
  /dev/sdb              lvm2 ---  204.00m 204.00m
  /dev/sdc       datavg lvm2 a--  200.00m 200.00m
  unknown device datavg lvm2 a-m  200.00m 200.00m
  unknown device datavg lvm2 a-m  200.00m 200.00m

// 當想刪除未知裝置[unknown device]時用下面的命令 
[root@localhost ~]# vgreduce --removemissing datavg 
  WARNING: Device for PV MQ1kYt-eH2x-ECas-Gmd6-QNje-j8fq-Of62rx not found or rejected by a filter.
  WARNING: Device for PV 8MPnLa-2u7t-UJus-XZev-M3wj-zbx0-q3AZwT not found or rejected by a filter.
  WARNING: Device for PV MQ1kYt-eH2x-ECas-Gmd6-QNje-j8fq-Of62rx not found or rejected by a filter.
  WARNING: Device for PV 8MPnLa-2u7t-UJus-XZev-M3wj-zbx0-q3AZwT not found or rejected by a filter.
  Wrote out consistent volume group datavg
[root@localhost ~]# pvs
  PV         VG     Fmt  Attr PSize   PFree  
  /dev/sda2  rhel   lvm2 a--   25.80g      0 
  /dev/sdb          lvm2 ---  204.00m 204.00m
  /dev/sdc   datavg lvm2 a--  200.00m 200.00m
[root@localhost ~]#