LVM邏輯卷的配置和挂載使用
為什麼使用LVM?
①硬碟的多個分區由LVM統一為卷組管理,可以友善的加入或移走分區以擴大或減小卷組的可用容量,充分利用硬碟空間
②使用者/使用者組的空間建立在LVM上,可以随時按要求增大,或根據使用情況對各邏輯卷進行調整。當系統空間不足而加入新的硬碟時,不必把使用者的資料從原硬碟遷移到新硬碟,而隻須把新的分區加入卷組并擴充邏輯卷即可。同樣,使用LVM可以在不停服務的情況下。把使用者資料從舊硬碟轉移到新硬碟空間中去
名詞解釋:
PV: 實體
VG:卷組
LV :邏輯卷
LVM配置步驟:
- 将磁盤加入pv # pvcreate /dev/sdb /dev/sdc /dev/sdd
- 将pv加入到vg卷組 # vgcreate datavg /dev/sdb /dev/sdc /dev/sdd
- 配置設定lv使用 # lvcreate -L 100M -n lv1 datavg
- 檢視指令: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 ~]#
- 将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
- 檢視pv建立情況:
[root@localhost ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sda2 rhel lvm2 a-- g
/dev/sdb lvm2 --- m m
[root@localhost ~]#
- 再将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。
- 建立名為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 ,這裡我們暫時不擴充
- 配置設定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 ~]#
- 邏輯卷使用前和分區一樣,都需要格式化一下
[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表示成功,其他都是失敗
- 挂載邏輯卷到/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
- 我們可以看到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實體卷
- 先檢查目前邏輯卷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] /]#
- 開始資料遷移
[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]#
- 遷移完成後可将老舊的實體卷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管理知識擴充及易錯問題的出現及方法
- 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
- 易錯問題的出現及方法
// 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 ~]#