天天看點

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             :     M   disk 
sdc             :     M   disk 
sdd             :     M   disk 
[root@localhost ~]# lsblk
NAME          MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda             :       G   disk 
├─sda1          :      M   part /boot
├─sda2          :     G   part 
│ ├─rhel-root :     G   lvm  /
│ └─rhel-home :        G   lvm  /home
└─sda3          :        G   part [SWAP]
sdb             :     M   disk 
sdc             :     M   disk 
sdd             :     M   disk 
sr            :      G   rom  
[root@localhost ~]#
           
  1. 将sdb磁盤加入pv
[root@localhost ~]# pvcreate /dev/sdb
  Physical volume "/dev/sdb" successfully created
[root@localhost ~]# echo $?

[root@localhost ~]# pvs
  PV         VG   Fmt  Attr PSize   PFree  
  /dev/sda2  rhel lvm2 a--   g       
  /dev/sdb        lvm2 ---  m m
[root@localhost ~]#
           

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

  1. 檢視pv建立情況:
[root@localhost ~]# pvs
  PV         VG   Fmt  Attr PSize   PFree  
  /dev/sda2  rhel lvm2 a--   g       
  /dev/sdb        lvm2 ---  m m
[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--   g       
  /dev/sdb        lvm2 ---  m m
  /dev/sdc        lvm2 ---  m m
[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          wz--n- 400.00m 400.00m
  rhel            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----- m                                                    
  home rhel   -wi-ao----   g                                                    
  root rhel   -wi-ao----  g                                                    
[root@localhost ~]# lvscan 
  ACTIVE            '/dev/datavg/lv1' [ MiB] inherit
  ACTIVE            '/dev/rhel/home' [ GiB] inherit
  ACTIVE            '/dev/rhel/root' [ GiB] inherit
[root@localhost ~]#
           
  1. 邏輯卷使用前和分區一樣,都需要格式化一下
[root@localhost ~]# mkfs.ext4 /dev/datavg/lv1 
mke2fs  (-Dec-)
Filesystem label=
OS type: Linux
Block size= (log=)
Fragment size= (log=)
Stride= blocks, Stripe width= blocks
 inodes,  blocks
 blocks (%) reserved for the super user
First data block=
Maximum filesystem blocks=
 block groups
 blocks per group,  fragments per group
 inodes per group
Superblock backups stored on blocks: 
    , , , , 

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

[root@localhost ~]# echo $?

[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    G  G   G  % /
devtmpfs                M       M   % /dev
tmpfs                   M   K  M   % /dev/shm
tmpfs                   M  M  M   % /run
tmpfs                   M       M   % /sys/fs/cgroup
/dev/sda1               M  M   M  % /boot
/dev/mapper/rhel-home   G   M  G   % /home
tmpfs                   M       M   % /run/user/0
tmpfs                   M   K  M   % /run/user/42
/dev/mapper/datavg-lv1   M  M   M   % /lv1
[root@localhost /]#
           
  • 當然我們也可以設定将邏輯卷永久挂載

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

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

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

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

二、VG的擴充pv和移除pv

  • 擴充一個新的pv
  • 移除一個pv
  • 删除VG

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

  • 假如pv實體卷/dev/sdb硬碟已經老化,需要将sdb裡的資料線上遷移到sdc實體卷
    1. 先檢查目前邏輯卷VG中的PV使用情況
[[email protected] /]# df -h
Filesystem              Size  Used Avail Use% Mounted on
/dev/mapper/rhel-root    G  G   G  % /
devtmpfs                M       M   % /dev
tmpfs                   M   K  M   % /dev/shm
tmpfs                   M  M  M   % /run
tmpfs                   M       M   % /sys/fs/cgroup
/dev/sda1               M  M   M  % /boot
/dev/mapper/rhel-home   G   M  G   % /home
tmpfs                   M       M   % /run/user/
tmpfs                   M   K  M   % /run/user/
/dev/mapper/datavg-lv1   M   M   M  % /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: %
  /dev/sdb: Moved: %
[root@localhost etc]# pvs
  PV         VG     Fmt  Attr PSize   PFree  
  /dev/sda2  rhel   lvm2 a--   g       
  /dev/sdb   datavg lvm2 a--  m m
  /dev/sdc   datavg lvm2 a--  m m
  /dev/sdd   datavg lvm2 a--  m m
[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          wz--n- m m
  rhel            wz--n-  g       
[[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   M  M   M   % /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  MiB
  Logical volume "lv1-bak" created.
[root@localhost /]# df -h
........
/dev/mapper/datavg-lv1--bak   M   M   M  % /lv1
           

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

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

//此時要擴充到M,但vg中容量<M,是以vg中加入新的實體卷pv
[root@localhost /]# vgextend datavg /dev/sdd
[root@server188 ~]# lvextend -L 2G /dev/vg0/lv0
Extending logical volume lv to  GiB 
Insufficient free space:  extents needed, but only  available
           
  • lvm也可以縮減,但是一般很少會縮減,具體方法參考:

    使用邏輯卷管理器管理靈活存儲 lvm

    1. 易錯問題的出現及方法
// lvm丢失pv裝置:unknown device datavg lvm2 a-m  m m
[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 MPnLa-u7t-UJus-XZev-M3wj-zbx0-q3AZwT not found or rejected by a filter.
  PV             VG     Fmt  Attr PSize   PFree  
  /dev/sda2      rhel   lvm2 a--   g       
  /dev/sdb              lvm2 ---  m m
  /dev/sdc       datavg lvm2 a--  m m
  unknown device datavg lvm2 a-m  m m
  unknown device datavg lvm2 a-m  m m

// 當想删除未知裝置[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 MPnLa-u7t-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 MPnLa-u7t-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--   g       
  /dev/sdb          lvm2 ---  m m
  /dev/sdc   datavg lvm2 a--  m m
[root@localhost ~]# 
           

繼續閱讀