Linux下的设备管理
一.如何建立可变容量分区lvm
1、建立lvm所需要的概念
命令 | 功能 |
---|---|
pv | 物理卷,被lv命令处理过的物理分区 |
vg | 物理卷组,被捆绑到一起的多个物理卷 |
pe | 图里扩展,lvm设备的最小存储单元,lvm的大小是pe的整数倍,pe越小越精细,但读取速度越慢 |
lvm | 逻辑卷,直接使用的设备,可以增大、缩小,并保持原有数据不变 |
2、lvm的建立
命令 | 功能 |
---|---|
watch -n1 ‘df -H /weixindata;echo =====;pvs;echo =====;vgs;echo =====;lvs’ | 监控建立和更改过程 |
fdisk /dev/vdb | 建立分区,建立时标签设定为8e(按t设定) |
pvcreate /dev/vdb1 | 用/dev/vdb1建立一个pv |
vgcreate vg1 /dev/vdb1 | 建立一个vg,名为vg1,与/dev/vdb1这个pv相关联 |
lvcreate -L 30M -n lv0 /dev/vg1 | 建立一个lv,名为lv0,指定大小为30M,该lv与/dev/vg1/lv0这个vg相关联 |
mkfs.xfs /dev/vg1/lv0 | 格式化,给lvm加上文件系统 |
mount /dev/vg1/lv0 /weixindata | 挂载lvm至目录 |
df -H /weixindata | 查看目录挂载情况 |
3、lvm的拉伸与缩减
lvm以xfs格式化时只能拉伸不能缩减,以ext4格式化时可以拉伸也可以缩减
(1)当vg中剩余的容量充足时(xfs文件系统)
命令 | 功能 |
---|---|
lvextend -L 100M vg1 | 拉伸设备至100M,拉伸时使用的是vg1中的剩余容量 |
xfs_grow /dev/vg1/lv0 | 拉伸该设备的文件系统,因为设备拉伸后,新的设备容量未被格式化过,没有文件系统,拉伸文件系统让拉伸后的新设备的所有容量都有文件系统 |
(2)当vg中剩余的容量不足时(xfs文件系统)
命令 | 功能 |
---|---|
fdisk /dev/vdb | 再次建立一个新的分区,并修改标签为8e |
partprobe | 重新读取磁盘分区表 |
pvcreate /dev/vdb2 | 用/dev/vdb2建立一个pv |
vgextend vg1 /dev/vdb2 | 用/dev/vdb2这个pv拉伸vg1,使vg1容量变大 |
lvextend -L 1500M /dev/vg1/lv0 | 拉伸后的vg容量足够大,可直接拉伸lvm |
xfs_grow /dev/vg1/lv0 | 拉伸lvm设备的容量后,拉伸lvm的文件系统,使所有容量都有文件系统 |
(3)将lvm格式化为ext文件系统
命令 | 功能 |
---|---|
umount /weixindata | 卸载lvm |
mkfs.ext4 /dev/vg1/lv0 | 以ext4文件系统格式化lvm |
mount /dev/vg1/lv0 /weixindata | 挂载lvm,此时lvm的文件系统是ext文件系统 |
(4)ext文件系统下的lvm设备的拉伸
命令 | 功能 |
---|---|
lvextend -L 2G /dev/vg1/lv0 | 拉伸设备至2G |
resize2fs /dev/vg1/lv0 | 设定lvm的文件系统大小,不指定时默认拉伸至与设备容量一样大的大小 |
(5)ext文件系统下的lvm设备的缩减
命令 | 功能 |
---|---|
umount /weixindata | 卸载lvm |
e2fsck -f /dev/vg1/lv0 | 扫描该设备,查看当前使用容量的大小,便于决定缩减大小 |
resize2fs /dev/vg1/lv0 500M | 设定lvm文件系统大小为500M |
lvreduce -L 500M /dev/vg1/lv0 | 缩减lvm设备的容量大小,与文件系统大小统一 |
mount /dev/vg1/lv0 /weixindata | 重新挂载lvm,查看是否更改成功 |
4、vg的缩减
(1)移除空闲的vg设备
命令 | 功能 |
---|---|
vgreduce vg1 /dev/vdb2 | 移除vg1中空闲的/dev/vdb2设备 |
(2)移除含有数据的vg设备
命令 | 功能 |
---|---|
pvmove /dev/vdb1 /dev/vdb2 | 将/dev/vdb1中使用的内存转移到/dev/vdb2中 |
vgreduce vg1 /dev/vdb1 | 将/dev/vdb1中使用的内存移除,则/dev/vdb1空闲,可直接移除 |
pvremove /dev/vdb1 | 删除多余的pv设备 |
5、lvm的快照
(1)lvm快照的建立
命令 | 功能 |
---|---|
lvcreate -L 25M -n lv0-snap1 -s /dev/vg1/lv0 | 建立/dev/vg1/lv0的快照,快照名为lv0-snap1,设定大小为25M,实际建立大小为28M,因为pe为4M,25M不是4M的倍数 |
mount /dev/vg1/lv0-snap1 /weixindata | 挂载快照 |
(2)lvm快照损坏如何重置
命令 | 功能 |
---|---|
rm -rf /weixindata/* | 删除挂载的目录下的文件,使lvm快照损坏 |
umount /weixindata | 卸载lvm快照 |
lvremove /dev/vg1/lv0-snap1 | 删除损坏快照 |
lvcreate -L 25M -n lv0-snap1 -s /dev/vg1/lv0 | 重新建立可用快照 |
mount /dev/vg1/lv0-snap1 /weixindata | 挂载可用新快照 |
(3)如何验证lvm快照的最大容量
命令 | 功能 |
---|---|
dd if=/dev/zero of=/weixindata/file bs=1M count=20 | 添加20M的文件 |
lvdisplay | 查看lvm快照是否完好(此时应完好) |
df | 查看lvm快照是否挂载(此时应挂载) |
dd if=/dev/zero of=/weixindata/file bs=1M count=50 | 添加50M的文件 |
lvdisplay | 查看快照是否完好(此时崩溃) |
6、如何整个删除lvm设备
删除时需从lv的快照开始删除,然后删除lv,再删除vg,再删除pv
(1)正确删除步骤
命令 | 功能 |
---|---|
df | 查看当前是否有lvm的快照或lv挂载,若有则卸载 |
lvremove /dev/vg1/lv0-snap1 | 删除快照(若有,无则不用) |
lvremove /dev/vg1/lv0 | 删除lv |
vgremove vg1 | 删除名为vg1的vg |
pvremove /dev/vdb2 | 删除名为/dev/vdb2的pv,若有多个则都删除 |
(2)若直接删除/dev/vdb1设备(不正确删除步骤)
命令 | 功能 |
---|---|
fdisk /dev/vdb | 直接在磁盘分区表中删除/dev/vdb1后,lvm会出现报错 |
vgreduce --removemissing vg1 | 删除名为vg1的vg中出现问题的设备,将解决报错 |