Files
linux/磁盘/lvm.md
2026-03-31 10:16:43 +08:00

207 lines
7.6 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
## 基础
### 物理卷(pvcreate)
```
[root@localhost ~]# pvcreate /dev/sdb[1-3] # 将分区创建为物理卷
Physical volume "/dev/sdb1" successfully created
Physical volume "/dev/sdb2" successfully created
Physical volume "/dev/sdb3" successfully created
[root@localhost ~]# pvcreate /dev/sdc # 将硬盘创建为物理卷
Physical volume "/dev/sdc" successfully created
[root@localhost ~]# pvs # 查看创建的物理卷
PV VG Fmt Attr PSize PFree
/dev/sdb1 myvg lvm2 a- 1.87G 1.87G
/dev/sdb2 myvg lvm2 a- 1.87G 1.87G
/dev/sdb3 myvg lvm2 a- 1.87G 1.87G
/dev/sdc myvg lvm2 a- 20.00G 20.00G
```
### 卷组(vgcreate)
```
[root@localhost ~]# vgcreate myvg /dev/sdb[1-3] /dev/sdc
Volume group "myvg" successfully created
[root@localhost ~]# vgs
VG #PV #LV #SN Attr VSize VFree
myvg 4 0 0 wz--n- 25.60G 25.60G
[root@localhost ~]#
[root@localhost ~]# vgdisplay
--- Volume group ---
VG Name myvg #卷组名
System ID
Format lvm2
Metadata Areas 4
Metadata Sequence No 1
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 0
Open LV 0
Max PV 0
Cur PV 4
Act PV 4
VG Size 25.60 GB
PE Size 4.00 MB #物理盘的基本单位默认4MB
Total PE 6553
Alloc PE / Size 0 / 0
Free PE / Size 6553 / 25.60 GB
VG UUID wuNBgb-tP95-pVoX-ehHw-cMfN-hyem-PNMqwe
[root@localhost ~]#
```
### 逻辑卷(lvcreate)
``` shell
[root@localhost ~]# lvcreate -L 2G -n mylv1 myvg #创建逻辑卷
Logical volume "mylv1" created
[root@localhost ~]# lvs #查看逻辑卷
LV VG Attr LSize Origin Snap% Move Log Copy% Convert
mylv1 myvg -wi-a- 2.00G
```
## 运维操作
### 扩大卷组
```
[root@localhost ~]# pvcreate /dev/sdd #将新硬盘/sdd加入物理卷中
Physical volume "/dev/sdd" successfully created
[root@localhost ~]# pvs #查看物理卷
/dev/cdrom: open failed: No medium found
PV VG Fmt Attr PSize PFree
/dev/sdb1 myvg lvm2 a- 1.87G 1.87G
/dev/sdb2 myvg lvm2 a- 1.87G 1.87G
/dev/sdb3 myvg lvm2 a- 1.87G 1.87G
/dev/sdc myvg lvm2 a- 20.00G 18.00G
/dev/sdd myvg lvm2 a- 20.00G 20.00G
[root@localhost ~]#
[root@localhost ~]# vgextend myvg /dev/sdd #扩展卷组
Volume group "myvg" successfully extended
[root@localhost ~]# vgs #查看新增加的卷组
VG #PV #LV #SN Attr VSize VFree
myvg 5 1 0 wz--n- 45.59G 43.59G
[root@localhost ~]#
```
### 扩大逻辑卷 (支持在线扩展)
```
# 扩展 2G 空间
[root@localhost mydata]# lvextend -L +2G /dev/myvg/mylv1
Extending logical volume mylv1 to 4.00 GB
Logical volume mylv1 successfully resized
# 扩展空闲所有
[root@localhost mydata]# lvextend -l +100%FREE /dev/myvg/mylv1
# ext4 文件系统
[root@localhost mydata]# resize2fs -p /dev/myvg/mylv1
# xfs 格式文件系统
[root@localhost mydata]# xfs_growfs -f /dev/myvg/mylv1
[root@localhost mydata]# lvs
LV VG Attr LSize Origin Snap% Move Log Copy% Convert
mylv1 myvg -wi-ao 4.00G
```
### 缩减逻辑卷
- 不能在线缩减,得先卸载
- 确保缩减后的空间大小依然能存储原有的所有数据
```
# 将/dev/myvg/mylv1 缩减到1G
# ext4
[root@localhost ~]# umount /dev/myvg/mylv1 #卸载分区
[root@localhost ~]# e2fsck -f /dev/myvg/mylv1 #强制检查文件系统
[root@localhost ~]# resize2fs /dev/myvg/mylv1 1G #缩减逻辑大小
[root@localhost ~]# lvreduce -L 1G /dev/myvg/mylv1 #缩减物理边界大小
# xfs
[root@localhost ~]# umount /dev/myvg/mylv1 #卸载分区
[root@localhost ~]#
[root@localhost ~]# lvs #查看逻辑卷
/dev/cdrom: open failed: No medium found
LV VG Attr LSize Origin Snap% Move Log Copy% Convert
mylv1 myvg -wi-ao 1.00G
[root@localhost ~]# mount /dev/myvg/mylv1 /mydata
```
### 缩减磁盘空间
发现物理磁盘空间使用不足,将其中一块硬盘或分区拿掉。
```
[root@localhost ~]# pvs
/dev/cdrom: open failed: No medium found
PV VG Fmt Attr PSize PFree
/dev/sdb1 myvg lvm2 a- 1.87G 1.87G
/dev/sdb2 myvg lvm2 a- 1.87G 1.87G
/dev/sdb3 myvg lvm2 a- 1.87G 1.87G
/dev/sdc myvg lvm2 a- 20.00G 19.00G
/dev/sdd myvg lvm2 a- 20.00G 20.00G
[root@localhost ~]#
[root@localhost ~]# pvmove /dev/sdb1
No data to move for myvg
[root@localhost ~]# vgreduce myvg /dev/sdb1
Removed "/dev/sdb1" from volume group "myvg"
root@localhost ~]# pvremove /dev/sdb1
Labels on physical volume "/dev/sdb1" successfully wiped
[root@localhost ~]# pvs
/dev/cdrom: open failed: No medium found
PV VG Fmt Attr PSize PFree
/dev/sdb2 myvg lvm2 a- 1.87G 1.87G
/dev/sdb3 myvg lvm2 a- 1.87G 1.87G
/dev/sdc myvg lvm2 a- 20.00G 19.00G
/dev/sdd myvg lvm2 a- 20.00G 20.00G
[root@localhost ~]#
```
### 实现快照,进行备份还原
在/mnt/lvm目录上我们将原始的目录文件进行快照然后将/mydata目录中的内容清空并进行还原。
```
[root@localhost ~]# cd /mydata/
[root@localhost mydata]# ls
index.html lost+found
[root@localhost mydata]# cat index.html
test
[root@localhost mydata]# lvcreate -L 30M -n backup -s -p r /dev/myvg/mylv1 #-L 快照大小 n:快照名称 p 权限只读 s 创建快照
Rounding up size to full physical extent 32.00 MB
Logical volume "backup" created
[root@localhost mydata]# ll
total 20
-rw-r--r-- 1 root root 5 Jun 28 01:04 index.html
drwx------ 2 root root 16384 Jun 28 00:47 lost+found
[root@localhost mydata]# mkdir /tmp/backup #创建挂载目录
[root@localhost mydata]# mount /dev/myvg/backup /tmp/backup/ #挂载
mount: block device /dev/myvg/backup is write-protected, mounting read-only
[root@localhost mydata]# cd /tmp/backup/
[root@localhost backup]# ls
index.html lost+found
[root@localhost backup]# mkdir /tmp/lvmbackup #创建备份目录
[root@localhost backup]# tar jcf /tmp/lvmbackup/sandy.tar.bz2 index.html #打包并压缩文件
[root@localhost backup]# cd ..
[root@localhost tmp]# cd lvmbackup/
[root@localhost lvmbackup]# ls #查看备份
sandy.tar.bz2
[root@localhost lvmbackup]# cd /mydata/
[root@localhost mydata]# ll
total 20
-rw-r--r-- 1 root root 5 Jun 28 01:04 index.html
drwx------ 2 root root 16384 Jun 28 00:47 lost+found
[root@localhost mydata]# rm -rf * #删除所有文件
[root@localhost mydata]#
[root@localhost mydata]# ll
total 0
[root@localhost mydata]# tar xf /tmp/lvmbackup/sandy.tar.bz2 #还原备份数据
[root@localhost mydata]# ll
total 4
-rw-r--r-- 1 root root 5 Jun 28 01:04 index.html
[root@localhost mydata]# cat index.html
test
[root@localhost mydata]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda2 9.5G 1.8G 7.2G 21% /
/dev/sda3 4.8G 138M 4.4G 4% /data
/dev/sda1 251M 17M 222M 7% /boot
tmpfs 60M 0 60M 0% /dev/shm
/dev/mapper/myvg-mylv1
1008M 67M 901M 7% /mydata
/dev/mapper/myvg-mylv1
1008M 67M 901M 7% /tmp/backup
[root@localhost mydata]#
```