LVM邏輯卷的配置和掛載使用
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 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 ~]#
- 將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
- 檢視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 ~]#
- 再將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。
- 建立名為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 ,這裡我們暫時不擴充套件
- 分配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 ~]#
- 邏輯卷使用前和分割槽一樣,都需要格式化一下
[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表示成功,其他都是失敗
- 掛載邏輯捲到/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
- 我們可以看到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物理卷
- 先檢查當前邏輯卷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] /]#
- 開始資料遷移
[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]#
- 遷移完成後可將老舊的物理卷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管理知識擴充套件及易錯問題的出現及方法
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也可以縮減,但是一般很少會縮減,具體方法參考:
使用邏輯卷管理器管理靈活儲存 lvm- 易錯問題的出現及方法
// 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 ~]#