LVM详解及创建过程
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LVM详解及创建过程相关的知识,希望对你有一定的参考价值。
参考技术A vg可以由多个pv在组成,如果随着时间的推移vg不够用了,就可增加一些pv到vg里面。如果vg太大,感觉用不完浪费掉了,就可以减少一些pv,并保证里面数据不会受到影响。Vg和lv:vg可以近似看成计算机上的一个完整的硬盘,把vg划分成多个lv的过程类似于把计算机的一个硬盘划分成多个分区的过程,同样lv也像硬盘分区那样格式化后才能使用。
如果非要拿硬盘和LVM作比较的话,拿我的计算机来说,vg相当于硬盘/dev/sda,lv相当于/dev/sda1,/dev/sda2,/dev/sda3等,lv一般也要格式化后才能使用。
Lv:如果lv里的数据增多,lv的空间不够用了,vg就可以增加一些空间给lv,如果空间太多就给lv缩减空间。前面提到的pe,就是lv的基本组成单元,假如一个pe大小为4M,如果要创建一个4G的lv,vg就会分1000个pe给lv。如果后来lv的空间最多使用量不足2G,为了节省磁盘,vg就从lv取下500个pe,这样就可以节省2G空间了,并且不会损坏原有数据。
优点:调整分区十分快捷方便,随意增减分区大小而对数据几乎不产生影响.
缺点:如果碰上百年不遇的霉运,数据损坏,想要找回数据却极为困难.
dm:device mapper将底层块设备组织成一个逻辑设备模块
像扩展分区,不能直接格式化使用,必须化分成lv才能格式化使用pe默认4M,一个lv是一个文件系统
Lv设备路径:
Lv设备路径有两种表达方式
以我的电脑举例就分别是:
testvg是我的电脑的一个vg名字,testlv是testvg上的一个lv,也是一个独立文件系统。
命令详解:
pvdisplay:查看所有pv的详细信息。后可加设备名查看某个pv的详细信息
扩展逻辑卷:注意,要先扩展物理边界再扩展逻辑边界
扩展lv物理边界为5G(给lv增加pe数量),+3G表示在原来基础上增加3G
缩减逻辑卷lvreduce 注意,要先缩减逻辑边界再缩减物理边界
原理:
正常备份数据的时候数据不能发生变化,否则备份出来的数据的是不完整的。但对于1T的数据做备份需要半个小时以上,这期间数据很难保持不变,为了解决这个问题,快照卷应运而生。
快照是在一瞬间记录下要备份的内容的元数据,然后监控这些元数据,如果元数据即将发生变化,就把将要变化的内容备份到快照里面,这样,快照里就存储着变化前的数据的备份。
快照和原文件应该属于同一个卷组vg,通过快照访问未变化的数据时,就像通过一个硬链接直接进入原文件访问。所以创建快照卷时不用格式化。
-s指明创建的是快照卷,-L指明快照卷大小,-n指明快照卷的名字,-p权限 最后面指定是谁的快照
1、创建一个至少有两个pv组成的大小为20G的名为testvg,要求PE大小为16M
然后在卷组中创建大小为5G的逻辑卷testlv挂在至/users下
2、新建用户archlinux,要求家目录为/users/archlinux,然后用archlinux用户,复制/etc/pam.d至自己家目录
3、扩展testlv至7G,要求archlinux用户文件不能丢失
4、收缩至3G,文件不能丢失
5、对testlv创建快照,基于快照备份数据,验证快照功能
dd命令比较底层,比cp效率更高
用于磁盘拷贝:
备份MBR:
破坏MBR中的bootloader:
link
Linux —— 1.5万字详解LVM逻辑卷管理
文章目录
一、逻辑卷管理
1. LVM介绍
逻辑卷(LVM):它是Linux环境下对磁盘分区进行管理的一种机制,它是建立在物理存储设备之上的一个抽象层,优点在于灵活管理。
特点:
- 动态在线扩容(关键)
- 离线裁剪
- 数据条带化
- 数据镜像
2. LVM基本概念
真实的物理设备创建过程
- 逻辑上(命令创建)
- 物理卷(pv)
- 卷组(vg)
- 逻辑卷(lv)
- 逻辑卷格式化
- 最后挂载使用
-
物理卷(Physical Volume,PV)
物理卷是底层真正提供容量,存放数据的设备,它可以是整个硬盘、硬盘上的分区等。 -
卷组(Volume Group, VG)
卷组建立在物理卷之上,它由一个或多个物理卷组成。即把物理卷整合起来提供容量分配。
一个LVM系统中可以只有一个卷组,也可以包含多个卷组。 -
逻辑卷(Logical Volume, LV)
逻辑卷建立在卷组之上,它是从卷组中“切出”的一块空间。它是最终用户使用的逻辑设备。逻辑卷创建之后,其大小可以伸缩。 -
物理区域 PE(physical extent)
每一个物理卷被划分为称为PE(Physical Extents)的基本单元,具有唯一编号的PE是能被LVM寻址的最小单元。PE的大小可指定,默认为4 MB。 PE的大小一旦确定将不能改变,同一个卷组中的所有物理卷的PE的大小是一致的。
4MB=4096kb=4096kb/4kb=1024个block
注意:
- 硬盘读取数据最小单位1个扇区512字节
- 操作读取数据最小单位1个数据块=8*512字节=4096字节=4KB
- lvm寻址最小单位1个PE=4MB
- 逻辑区域 LE(logical extent)
逻辑卷也被划分为被称为LE(Logical Extents) 的可被寻址的基本单位。在同一个卷组中,LE的大小和PE是相同的,并且一一对应。
二、逻辑卷LVM应用
1.逻辑卷创建
创建过程:
- 准备物理设备磁盘
- 将物理设备做成物理卷
- 创建卷组并将物理卷加入其中
- 创建逻辑卷
- 格式化逻辑卷
- 挂载使用
1)准备物理设备
用fdisk
对磁盘进行分区
sdb 8:16 0 10G 0 disk
├─sdb1 8:17 0 2G 0 part
├─sdb2 8:18 0 2G 0 part
├─sdb3 8:19 0 1K 0 part
├─sdb5 8:21 0 2G 0 part
├─sdb6 8:22 0 2G 0 part
└─sdb7 8:23 0 2G 0 part
2)创建物理卷(pvcreate)
通过pvcreate
命令来创建物理卷
[root@lamp ~]# pvcreate /dev/sdb1 /dev/sdb2
Physical volume "/dev/sdb1" successfully created.
Physical volume "/dev/sdb2" successfully created.
通过pvs
查看物理卷,详细查看pvdisplay [设备]
[root@lamp ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sda2 centos lvm2 a-- <19.00g 0
/dev/sdb1 lvm2 --- 2.00g 2.00g
/dev/sdb2 lvm2 --- 2.00g 2.00g
# 详细查看
[root@lamp ~]# pvdisplay /dev/sdb1
"/dev/sdb1" is a new physical volume of "2.00 GiB"
--- NEW Physical volume ---
PV Name /dev/sdb1
VG Name
PV Size 2.00 GiB
Allocatable NO
PE Size 0
Total PE 0
Free PE 0
Allocated PE 0
PV UUID 6nfyXO-5VFf-Wh8H-vu3r-byxX-4AIa-mSNrYP
3)创建卷组并将物理卷加入其中(vgcreate )
创建卷组命令:vgcreate [卷组名] [物理卷路径]
[root@lamp ~]# vgcreate vg01 /dev/sdb1 /dev/sdb2
Volume group "vg01" successfully created
查看卷组信息命令:vgs
,详细查看vgdisplay
那么卷组VG的大小就等于sdb1+sdb2
[root@lamp ~]# vgs vg01
VG #PV #LV #SN Attr VSize VFree
vg01 2 0 0 wz--n- 3.99g 3.99g
[root@lamp ~]# vgdisplay vg01
--- Volume group ---
VG Name vg01
System ID
Format lvm2
Metadata Areas 2
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 2
Act PV 2
VG Size 3.99 GiB
PE Size 4.00 MiB
Total PE 1022
Alloc PE / Size 0 / 0
Free PE / Size 1022 / 3.99 GiB
VG UUID cfaFGf-tB6g-IYgK-SVPc-JWeE-Uom8-Rk6CJ
4)创建逻辑卷(lvcreate)
使用lvcreate
创建逻辑卷
命令:lvcreate -n [逻辑卷名] -L [逻辑卷大小] [指定从哪个卷组创建]
常用选项:
-n
:指定逻辑卷名字-L
:指定逻辑卷大小-l
:通过PF或者百分比指定逻辑卷大小
注意:逻辑卷的大小不能超过卷组的大小
[root@lamp ~]# vgs vg01
VG #PV #LV #SN Attr VSize VFree
vg01 2 0 0 wz--n- 3.99g 3.99g
[root@lamp ~]# lvcreate -n lv01 -L 2.5G vg01
Logical volume "lv01" created.
[root@lamp ~]# vgs vg01
VG #PV #LV #SN Attr VSize VFree
vg01 2 1 0 wz--n- 3.99g 1.49g
在操作系统层面映射两个地方:
[root@lamp ~]# ll /dev/mapper/vg01-lv01
lrwxrwxrwx 1 root root 7 Jul 24 17:06 /dev/mapper/vg01-lv01 -> ../dm-2
[root@lamp ~]# ll /dev/vg01/lv01
lrwxrwxrwx 1 root root 7 Jul 24 17:06 /dev/vg01/lv01 -> ../dm-2
查看逻辑卷信息:
通过命令:lvdisplay [逻辑卷完整路径]
[root@lamp ~]# lvdisplay /dev/vg01/lv01
--- Logical volume ---
LV Path /dev/vg01/lv01
LV Name lv01
VG Name vg01
LV UUID 9z7lEI-L2eP-MlLd-c3rv-t1z9-2Zc9-K3rCng
LV Write Access read/write
LV Creation host, time lamp, 2022-07-24 17:06:22 +0800
LV Status available
# open 0
LV Size 2.50 GiB
Current LE 640
Segments 2
Allocation inherit
Read ahead sectors auto
- currently set to 8192
Block device 253:2
示例:创建大小为200M的逻辑卷lv02;每个PE为4M,-l100指定100个PE,大小为400M
[root@lamp ~]# lvcreate -n lv02 -l100 vg01
Logical volume "lv02" created.
# 一个
[root@lamp ~]# lvs /dev/vg01/lv02
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
lv02 vg01 -wi-a----- 400.00m
示例:
创建大小为剩余卷组vg01空间的50%的逻辑卷lv03
当前卷组大小为1.1G,50%就是564M左右
通过-l50%free
选项指定大小为卷组的50%大小
[root@lamp ~]# vgs vg01
VG #PV #LV #SN Attr VSize VFree
vg01 2 2 0 wz--n- 3.99g 1.10g
[root@lamp ~]# lvcreate -n lv03 -l50%free vg01
Logical volume "lv03" created.
[root@lamp ~]# lvs /dev/vg01/lv03
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
lv03 vg01 -wi-a----- 564.00m
5)格式化逻辑卷(mkfs)
命令:mkfs.[类型] [逻辑卷完整路径]
[root@lamp ~]# mkfs.xfs /dev/vg01/lv01
meta-data=/dev/vg01/lv01 isize=512 agcount=4, agsize=163840 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0, sparse=0
data = bsize=4096 blocks=655360, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal log bsize=4096 blocks=2560, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
[root@lamp ~]# blkid /dev/vg01/lv01
# 通过 blkid查看设备有信息说明查看成功
/dev/vg01/lv01: UUID="6e86c1ba-d4fb-4d32-a5b7-8a4b2164eba9" TYPE="xfs"
6)挂载使用
创建一个挂载点(目录)
[root@lamp ~]# mkdir /u01
[root@lamp ~]# mount /dev/vg01/lv01 /u01
[root@lamp ~]# lsblk
sdb 8:16 0 10G 0 disk
├─sdb1 8:17 0 2G 0 part
│ └─vg01-lv01 253:2 0 2.5G 0 lvm /u01
├─sdb2 8:18 0 2G 0 part
│ ├─vg01-lv01 253:2 0 2.5G 0 lvm /u01
│ ├─vg01-lv02 253:3 0 400M 0 lvm
│ └─vg01-lv03 253:4 0 564M 0 lvm
├─sdb3 8:19 0 1K 0 part
├─sdb5 8:21 0 2G 0 part
├─sdb6 8:22 0 2G 0 part
└─sdb7 8:23 0 2G 0 part
sr0 11:0 1 4.3G 0 rom
2. 逻辑卷动态扩容
示例:将/u01
目录动态扩容到4G
思路:
- 查看/u01目录所对应的逻辑卷是哪一个
- 查看当前逻辑卷所在的卷组vg01剩余空间是否足够
- 如果vg01空间不够,得先扩容卷组,再扩容逻辑卷
- 如果vg01空间足够,直接扩容逻辑卷
1)查看目录属于哪个卷组
通过命令查看目录/u1
属于哪个卷组
[root@lamp ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/vg01-lv01 2.5G 33M 2.5G 2% /u01
[root@lamp ~]# lvs /dev/vg01/lv01
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
lv01 vg01 -wi-ao---- 2.50g
2)查看卷组剩余空间
vg01
的卷组空间已经不足我扩容2G
[root@lamp ~]# vgs
VG #PV #LV #SN Attr VSize VFree
vg01 2 3 0 wz--n- 3.99g 564.00m
3)扩容逻辑卷所在卷组
[root@lamp ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sdb 8:16 0 10G 0 disk
├─sdb1 8:17 0 2G 0 part
│ └─vg01-lv01 253:2 0 2.5G 0 lvm /u01
├─sdb2 8:18 0 2G 0 part
│ ├─vg01-lv01 253:2 0 2.5G 0 lvm /u01
│ ├─vg01-lv02 253:3 0 400M 0 lvm
│ └─vg01-lv03 253:4 0 564M 0 lvm
├─sdb3 8:19 0 1K 0 part
├─sdb5 8:21 0 2G 0 part
├─sdb6 8:22 0 2G 0 part
└─sdb7 8:23 0 2G 0 part
把扩展分区sdb3下的sdb5做成物理卷(PV)
[root@lamp ~]# pvcreate /dev/sdb5
Physical volume "/dev/sdb5" successfully created.
[root@lamp ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sdb1 vg01 lvm2 a-- <2.00g 0
/dev/sdb2 vg01 lvm2 a-- <2.00g 564.00m
/dev/sdb5 lvm2 --- 2.00g 2.00g
[root@lamp ~]#
将物理卷加入到卷组中(卷组扩容 vgextend )
用vgextend
命令实现卷组扩容
[root@lamp ~]# vgextend vg01 /dev/sdb5
Volume group "vg01" successfully extended
[root@lamp ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sda2 centos lvm2 a-- <19.00g 0
/dev/sdb1 vg01 lvm2 a-- <2.00g 0
/dev/sdb2 vg01 lvm2 a-- <2.00g 564.00m
/dev/sdb5 vg01 lvm2 a-- <2.00g <2.00g
注意:
正常情况下,应该先将/dev/sdb5物理设备创建为物理卷再加入到卷组中;如果直接加入卷组,系统会自动帮你将其做成物理卷
4)扩容逻辑卷(lvextend)
从2.5G扩容到4G
lvextend -L 4G /dev/vg01/lv01
- -L:表示扩容到4G
等价于lvextend -L +1.5G /dev/vg01/lv01
[root@lamp ~]# lvs /dev/vg01/lv01
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
lv01 vg01 -wi-ao---- 2.50g
[root@lamp ~]# lvextend -L 4G /dev/vg01/lv01
Size of logical volume vg01/lv01 changed from 2.50 GiB (640 extents) to 4.00 GiB (1024 extents).
Logical volume vg01/lv01 successfully resized.
[root@lamp ~]# lvs /dev/vg01/lv01
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
lv01 vg01 -wi-ao---- 4.00g
但是检查发现实际容量并没有改变
[root@lamp ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/vg01-lv01 2.5G 33M 2.5G 2% /u01
5)同步文件系统(resize2fs)
先查看文件系统类型
[root@lamp ~]# mount | grep lv01
/dev/mapper/vg01-lv01 on /u01 type xfs (rw,relatime,attr2,inode64,noquota)
如果是ext4
就用:resize2fs [逻辑卷路径]
同步文件系统
如果是xfs
就用:xfs_growfs [逻辑卷路径]
同步文件系统
[root@lamp ~]# xfs_growfs /dev/vg01/lv01
meta-data=/dev/mapper/vg01-lv01 isize=512 agcount=4, agsize=163840 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0 spinodes=0
data = bsize=4096 blocks=655360, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal bsize=4096 blocks=2560, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
data blocks changed from 655360 to 1048576
# 同步之后就 正常了
[root@lamp ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/vg01-lv01 4.0G 33M 4.0G 1% /u01
三、逻辑卷相关命令(增、删、改)
1. 创建卷
创建物理卷:pvcreate
pvcreate /dev/sdb1
创建卷组:vgcreate
vgcreate vg01 /de/sdb1
创建逻辑卷:lvcreate
lvcreate -n lv01 -L 1G vg01 # 指定为1G
lvcreate -n lv01 -l 100 vg01 # 指定为100*PE大小
lvcreate -n lv01 -l 100%free vg01 #指定为卷组剩余大小
2. 删除卷
删除逻辑卷:lvremove
lvremove /dev/vg01/lv01
删除卷组:vgremove
vgremove vg01
说明:卷组里的物理卷没有被使用才可以直接删除卷组
删除物理卷:pvremove
pvremove /dev/sdb1
3. 扩容组
扩容卷组:vgextend
vgextend vg01 /dev/sdb2
扩容逻辑卷:lvextend
lvextend /dev/vg01/lv01 -L +2G
同步文件系统:
resize2fs /dev/vg01/lv01
四、逻辑卷实现条带化
1. 什么是条带化?
把保存到逻辑卷的数据分成n等分,分别写到不同的物理卷,可以提高数据的读写效率;这就是条带化。
如果任何一个涉及到的物理卷出现故障,数据都会无法恢复。
2.实现条带化
准备好一个磁盘,两个分区
sdc 8:32 0 20G 0 disk
├─sdc1 8:33 0 2G 0 part
└─sdc2 8:34 0 2G 0 part
1)创建物理卷
把sdc1和sdc2都创建为物理卷
命令:pvcreate /dev/sdc[12]
[root@lamp ~]# pvcreate /dev/sdc[12]
Physical volume "/dev/sdc1" successfully created.
Physical volume "/dev/sdc2" successfully created.
[root@lamp ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sdc1 lvm2 --- 2.00g 2.00g
/dev/sdc2 lvm2 --- 2.00g 2.00g
2)创建卷组
创建卷组名为vg02,并把物理卷sdc1和sdc2加入到卷组中
命令:vgcreate vg02 /dev/sdc[12]
[root@lamp ~]# vgcreate vg02 /dev/sdc[12]
Volume group "vg02" successfully created
[root@lamp ~]# pvs /dev/sdc[12]
PV VG Fmt Attr PSize PFree
/dev/sdc1 vg02 lvm2 a-- <2.00g <2.00g
/dev/sdc2 vg02 lvm2 a-- <2.00g <2.00g
3)创建实现条带化的逻辑卷
命令:lvcreate -n lv01 -L 1G vg02 -i 2 /dev/sdc1 /dev/sdc2
-i
:给出条带化的数量
在卷组vg02
中创建一个名为lv01
的逻辑卷,这个逻辑卷有条带化功能,分别把数据分成2等份分别写到sdc1
和sdc2
中
[root@lamp ~]# lvcreate -n lv01 -L 1G vg02 -i 2 /dev/sdc1 /dev/sdc2
Using default stripesize 64.00 KiB.
Logical volume "lv01" created.
# lv01逻辑卷大小为1G
[root@lamp ~]# lvs /dev/vg02/lv01
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
lv01 vg02 -wi-a----- 1.00g
可以看到sdc1
和sdc2
都少了500M的空间,也就是各自分配了500M给lv01
逻辑卷
[root@lamp ~]# pvs /dev/sdc[12]
PV VG Fmt Attr PSize PFree
/dev/sdc1 vg02 lvm2 a-- <2.00g <1.50g
/dev/sdc2 vg02 lvm2 a-- <2.00g <1.50g
4)格式化挂载使用
[root@lamp ~]# mkfs.xfs /dev/vg02/lv01
[root@lamp ~]# mount /dev/vg02/lv01 /u2
测试
iostat命令可以监控磁盘的使用情况
安装:yum -y install sysstat
使用iostat命令监控:iostat -m -d /dev/sdc[12] 2
-d
:查看磁盘-m
:什么速度显示,每M秒2
:每隔2秒显示- 还可以在接一个数字参数,表示显示几次
模拟写数据,往lv01
的挂载目录/u2
写1000M的数据
命令:dd if=/dev/zero of=/u2/test bs=1M count=1000
可以看到sdc1
和sdc2
各自用了500M
[root@lamp ~]# pvs /dev/sdc[12]
PV VG Fmt Attr PSize PFree
/dev/sdc1 vg02 lvm2 a-- <2.00g <1.50g
/dev/sdc2 vg02 lvm2 a-- <2.00g <1.50g
五、逻辑卷实现镜像
对某个逻辑卷的数据做镜像,起到数据备份的作用
当前环境
├─sdc5 8:37 0 3G 0 part
└─sdc6 8:38 0 3G 0 part
1. 创建物理卷
[root@lamp ~]# pvcreate /dev/sdc[56]
[root@lamp ~]# pvs /dev/sdc[56]
PV VG Fmt Attr PSize PFree
/dev/sdc5 lvm2 --- 3.00g 3.00g
/dev/sdc6 lvm2 --- 3.00g 3.00g
2. 将物理卷加入到卷组
[root@lamp ~]# vgextend vg02 /dev/sdc[56]
Volume group "vg02" successfully extended
[root@lamp ~]# vgs vg02
VG #PV #LV #SN Attr VSize VFree
vg02 6 1 0 wz--n- 13.97g 12.97g
3. 创建实现镜像的逻辑卷
[root@lamp ~]# lvcreate -n lv02 -L 2G vg02 -m 1 /dev/sdc[56]
Logical volume "lv02" created.
-m
:给出镜像个数,1表示1个镜像
创建2G镜像逻辑卷后,sdc5和sdc6各自少了2G
[root@lamp ~]# pvs /dev/sdc[56]
PV VG Fmt Attr PSize PFree
/dev/sdc5 vg02 lvm2 a-- <3.00g 1016.00m
/dev/sdc6 vg02 lvm2 a-- <3.00g 1016.00m
4. 格式化,挂载使用
[root@lamp ~]# mkfs.xfs /dev/vg02/lv02
[root@lamp u2]# mount /dev/mapper/vg02-lv02 /u2
在/u2
:目录创建文件
[root@lamp u2]# touch /u2/file1..4
[root@lamp u2]# mkdir /u2/dir1..4
5. 测试验证
损坏一个磁盘(sdc5),测试数据是否在第二个物理卷中
[root@lamp u2]# dd if=/dev/zero of=/dev/sdc5 bs=1M count=100
再次查看物理卷发现有一个unknown Device
[root@lamp u2]# pvs
/dev/sdc6 vg02 lvm2 a-- <3.00g 1016.00m
[unknown] vg02 lvm2 a-m <3.00g 1016.00m
将损坏的磁盘从卷组中移除
命令:vgreduce vg02 --removemissing --force
将vg02
卷组中损坏的磁盘移除,也就是损坏的sdc5
再次查看挂载点/u2
数据依然存在
[root@lamp u2]# ls
dir1 dir2 dir3 dir4 file1 file2 file3 file4
六、逻辑卷快照
注意:挂载快照,尽量使用ro的方式,将不会破坏快照卷中的数据
1. 创建挂载快照
给vg02卷组下的的逻辑卷lv02
创建快照
[root@lamp u2]# lvcreate -L 128M -s -n lv02_snap /dev/vg02/lv02
Logical volume "lv02_snap" created.
[root@lamp u2]# lsblk
vg02-lv02_rmeta_0 253:6 0 4M 0 lvm
└─vg02-lv02-real 253:11 0 2G 0 lvm
├─vg02-lv02 253:10 0 2G 0 lvm /u2
└─vg02-lv02_snap 253:13 0 2G 0 lvm
挂载快照到/mnt/lv02_snap/
如果是xfs文件系统:mount -o nouuid,ro /dev/vg02/lv02_snap /mnt/lv02_snap/
如果是ext4文件系统:mount -o ro /dev/vg02/lv02_snap /mnt/lv02_snap/
扫描快照
[root@lamp mnt]# lvscan
ACTIVE Original '/dev/vg02/lv02' [2.00 GiB] inherit
ACTIVE Snapshot '/dev/vg02/lv02_snap' [128.00 MiB] inherit
[root@lamp mnt]# dmsetup ls --tree
vg02-lv02_snap (253:13)
├─vg02-lv02_snap-cow (253:12) 保存原卷改变前的数据
│ └─ (8:33)
└─vg02-lv02-real (253:11) 真实的逻辑卷(原卷)
├─vg02-lv02_rimage_1 (253:9)
│ └─ (8:38)
├─vg02-lv02_rmeta_1 (253:8)
│ └─ (8:38)
├─vg02-lv02_rimage_0 (253:7)
└─vg02-lv02_rmeta_0 (253:6)
2. 修改原卷数据
[root@lamp mnt]# lvs /dev/vg02/lv02_snap
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
lv02_snap vg02 swi-aos--- 128.00m lv02 1.58
[root@lamp mnt]# dd if=/dev/zero of=/u2/test bs=1M count=50
# Data% 发生变化
[root@lamp mnt]# lvs /dev/vg02/lv02_snap
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
lv02_snap vg02 swi-aos--- 128.00m lv02 40.80
对比快照和原卷数据
[root@lamp lv02_snap]# ls
dir1 dir2 dir3 dir4 file1 file2 file3 file4
[root@lamp lv02_snap]# ls /u2/
dir1 dir2 dir3 dir4 file1 file2 file3 file4 test
3. 快照实现自动扩容
修改配置文件:vim /etc/lvm/lvm.conf
snapshot_autoextend_threshold = 80 # 1396行
snapshot_autoextend_percent = 20 # 1409行
//当快照使用到80%时,自动扩容20%;当snapshot_autoextend_threshold = 100表示关闭自动扩容
七、磁盘配额
磁盘配额的作用就是,限制用户或组对磁盘空间的使用,例如文件服务器,邮件服务器…
1. 启用磁盘配额
让文件系统支持配额
临时启用
[root@lamp ~]# mount -o rw,usrquota,grpquota /dev/vg01/lv01 /u01
[root@lamp ~]# mount | grep vg01
/dev/mapper/vg01-lv01 on /u01 type xfs (rw,relatime,attr2,inode64,usrquota,grpquota)
永久启动
修改配置文件vim /etc/fstab
/dev/vg01/lv01 /u01 xfs defaults,usrquota,grpquota 0 0
2. 创建磁盘配额的数据库文件
注意: 建议停用SELinux
安装quota:yum -y install quota
[root@lamp ~]# quotacheck -cug /u1
[root@lamp ~]# ll /u1
total 32
-rw------- 1 root root 6144 Jul 25 15:03 aquota.group
-rw------- 1 root root 6144 Jul 25 15:03 aquota.user
drwx------ 2 root root 16384 Jul 25 15:02 lost+found
3. 启动磁盘配额
quotaon -a //启动所有分区的磁盘配额
4. 设置配额
1)方法1(edquota)
为test用户设置配额
命令:edquota -u stu1
Disk quotas for user test (uid 1000):
Filesystem blocks soft hard inodes soft hard
/dev/mapper/vg01-lv01 0 10240 15360 0 3 5
soft:又称软限制,当用户到达这个限制以后,系统会给予警告,但仍可写入。
hard:又称硬限制,到达这个限制,就完全禁止任何写入
以下三个为磁盘空间的限制设置:
blocks:已使用空间,无需要设置
soft:用户空间使用限制,为软限制,需要设置
hard:用户空间使用限制,为硬限制,需要设置
以下三个为总文件个数的限制:
inodes:已有文件总数,无需要设置
soft:文件总数限制,为软限制,需要设置
hard:文件总数限制,为硬限制,需要设置
测试
[root@lamp ~]# chmod 777 /u1
[root@lamp ~]# su test
[test@lamp root]$ cd /u1
[test@lamp u1]$ touch file1..10
dm-2: warning, user file quota exceeded.
dm-2: write failed, user file limit reached.
touch: cannot touch ‘file6’: Disk quota exceeded
touch: cannot touch ‘file7’: Disk quota exceeded
touch: cannot touch ‘file8’: Disk quota exceeded
touch: cannot touch ‘file9’: Disk quota exceeded
touch: cannot touch ‘file10’: Disk quota exceeded
# 只能创建5个文件(硬性设置)
[test@lamp u1]$ ll
total 32
-rw------- 1 root root 7168 Jul 25 15:03 aquota.group
-rw------- 1 root root 7168 Jul 25 15:03 aquota.user
-rw-rw-r-- 1 test test 0 Jul 25 15:27 file1
-rw-rw-r-- 1 test test 0 Jul 25 15:27 file2
-rw-rw-r-- 1 test test 0 Jul 25 15:27 file3
-rw-rw-r-- 1 test test 0 Jul 25 15:27 file4
-rw-rw-r-- 1 test test 0 Jul 25 15:27 file5
drwx------ 2 root root 16384 Jul 25 15:02 lost+found
[test@lamp u1]$
大小,超过10M就会警告(软性设置),不能超过15M
[test@lamp u1]$ dd if=/dev/zero of=/u1/file1 bs=1M count=13
dm-2: warning, user block quota exceeded.
13+0 records in
13+0 records out
13631488 bytes (14 MB) copied, 0.021021 s, 648 MB/s
[test@lamp u1]$ dd if=/dev/zero of=/u1/file1 bs=1M count=5
5+0 records in
5+0 records out
5242880 bytes (5.2 MB) copied, 0.007817 s, 671 MB/s
2)方法2
# setquota -u username block软限制 block硬限制 inode软限制 inode硬限制 分区
# setquota -u jack 80000 100000 15 20 /dev/sda2
# quota jack
3. 复制配额
# edquota -p testtom robin user1 user2 user3
将test的配额方案复制给后面所有用户
4. 查看配额
查看单个用户的配额: # quota jack
查看所有用户的配额: # repquota -a
5. xfs配额注意事项
注意:
1、不需要手动执行quotacheck命令对xfs文件系统进行检查,它会在mount的时候自动执行
2、不需要在xfs文件系统的根下生成quota数据文件
八、swap扩容
查看swap空间大小命令:free -m
1. 方法一(增加硬盘)
sdb 8:16 0 10G 0 disk
├─sdb1 8:17 0 2G 0 part
│ └─vg01-lv01 253:2 0 1G 0 lvm /u1
├─sdb2 8:18 0 2G 0 part
└─sdb3 8:19 0 2G 0 part
1)格式化分区
格式化为swap文件系统
[root@lamp ~]# mkswap /dev/sdb3
Setting up swapspace version 1, size = 2097148 KiB
no label, UUID=7c2ca810-0ad7-4879-b4d4-045797c4958d
[root@lamp ~]# blkid /dev/sdb3
/dev/sdb3: UUID="7c2ca810-0ad7-4879-b4d4-045797c4958d" TYPE="swap"
2)激活swap分区
[root@lamp ~]# swapon /dev/sdb3
[root@lamp ~]# swapon -s
Filename Type Size Used Priority
/dev/dm-1 partition 2097148 0 -2
/dev/sdb3 partition 2097148 0 -3
2. 方法2(使用dd命令)
dd命令可以复制块设备文件
[root@server ~]# dd if=/dev/sr0 of=/rhel6.iso
[root@server ~]# dd if=/dev/sda1 of=/tmp/bak.boot
[root@server ~]#
[root@server ~]# dd if=/dev/zero of=/dev/sda1 bs=1M count=100 //不要执行
if=源文件
of=目标文件
bs=复制数据的大小
count=复制的个数
注意:
1. 一般可以使用dd命令做块设备文件的备份
2. /dev/zero 特殊设备,一般用来模拟一个大文件,源源不断的二进制的bit流;
/dev/null 空设备,类似黑洞
步骤:
1. 使用dd命令模拟大文件
# dd if=/dev/zero of=/tmp/swapfile bs=1M count=1024
2. 格式化大文件
[root@server ~]# mkswap /tmp/swapfile
3.激活大文件
[root@server ~]# swapon -p 1 /tmp/swapfile
-p:指定优先级,数字越大优先级越高,0-32767
4. 查看
[root@server ~]# swapon -s
Filename Type Size Used Priority
/tmp/swapfile file 1048568 0 1
如果开机自动挂载,需要修改文件:/etc/fstab
/swap_file swap swap defautls,pri=1 0 0
以上是关于LVM详解及创建过程的主要内容,如果未能解决你的问题,请参考以下文章