为什么要使用逻辑卷管理?
逻辑卷:
逻辑卷(LVM):是linux环境下对磁盘管理的一种方式,它是建立在物理存储之上的一个抽象层,最大特点是灵活管理。
特点:
1、动态扩容
2、在线扩容
3、离线裁剪
4、数据条带化
5、数据镜像
基本概念:
物理卷(pv):
物理卷是底层真正提供容量的一个磁盘设备或者是某个分区。【面粉】
卷组(vg):
卷组是建立在物理卷之上的,它是由一个或者多个物理卷组成。【面团】
逻辑卷(lv):
逻辑卷是建立在卷组之上的,是由卷组”切出“空间来给用户使用。【馒头】
物理区域(pe):
每个物理卷加入卷组后,pe大小是固定的。它是寻址的最小单位。默认一个PE的大小是4M.
实例1:
创建一个大小为1.5g的逻辑卷挂载使用:
1、增加物理设备或者分区
# fdisk /dev/sdb
2、将物理设备或者某个分区做成一个pv
# pvcreate /dev/sdb1 将/dev/sdb1这个分区做成一个物理卷
或者:
# pvcreate /dev/sdb[1-4] /dev/sdc 将多个设备做成物理卷
# pvcreate /dev/sdb1 Physical volume "/dev/sdb1" successfully created
简单查看物理卷信息:
[root@node1 Desktop]# pvs PV VG Fmt Attr PSize PFree /dev/sda3 vg_clone lvm2 a-- 47.80g 0 /dev/sdb1 lvm2 a-- 2.01g 2.01g # pvdisplay 详细查看
3、创建卷组
# vgcreate vg01 /dev/sdb1 创建一个vg01的卷组,并且将/dev/sdb1物理卷加入到vg01卷组 # vgs # vgdisplay
4、创建一个大小为1.5g的逻辑卷
# lvcreate -n lv01 -L 1.5g vg01 Logical volume "lv01" created
-n:指定逻辑卷名
-L:指定逻辑卷大小 大小-l:指定逻辑卷大小 多少个PE或者50%free
# lvcreate -n lv02 -l 50 vg01 Logical volume "lv02" created
[root@node1 Desktop]# lvs LV VG Attr LSize Pool Origin Data% Move Log Cpy%Sync Convert lv01 vg01 -wi-a----- 1.50g lv02 vg01 -wi-a----- 200.00m LogVol01 vg_clone -wi-ao---- 33.15g vg_home vg_clone -wi-ao---- 14.65g # lvcreate -n lv03 -l 50%free vg01 Logical volume "lv03" created [root@node1 Desktop]# lvs LV VG Attr LSize Pool Origin Data% Move Log Cpy%Sync Convert lv01 vg01 -wi-a----- 1.50g lv02 vg01 -wi-a----- 200.00m lv03 vg01 -wi-a----- 156.00m LogVol01 vg_clone -wi-ao---- 33.15g vg_home vg_clone -wi-ao---- 14.65g
注意:创建好的逻辑卷会映射到操作系统两个地方
# ll /dev/vg01/lv01 lrwxrwxrwx. 1 root root 7 Jan 17 11:01 /dev/vg01/lv01 -> ../dm-2 [root@node1 Desktop]# ll /dev/mapper/vg01-lv01 lrwxrwxrwx. 1 root root 7 Jan 17 11:01 /dev/mapper/vg01-lv01 -> ../dm-2
5、格式化
mkfs.ext4 /dev/mapper/vg01-lv01
6、挂载使用
mount /dev/vg01/lv01 /u01
实例2:在线扩容逻辑卷(扩容500M)
情况1:需要扩容的逻辑卷所在卷组剩余空间不够
1、扩容卷组
No physical volume label read from /dev/sdb2 Physical volume /dev/sdb2 not found Physical volume "/dev/sdb2" successfully created Volume group "vg01" successfully extended # vgs VG #PV #LV #SN Attr VSize VFree vg01 2 3 0 wz--n- 4.01g 2.16g
2、扩容逻辑卷
# lvextend -L +500M /dev/mapper/vg01-lv01 扩容逻辑卷 Extending logical volume lv01 to 1.99 GiB Logical volume lv01 successfully resized
# resize2fs /dev/mapper/vg01-lv01 同步文件系统 resize2fs 1.41.12 (17-May-2010) Filesystem at /dev/mapper/vg01-lv01 is mounted on /u01; on-line resizing required old desc_blocks = 1, new_desc_blocks = 1 Performing an on-line resize of /dev/mapper/vg01-lv01 to 521216 (4k) blocks. The filesystem on /dev/mapper/vg01-lv01 is now 521216 blocks long.
情况2:需要扩容的逻辑卷所在卷组剩余空间足够
# lvextend -L +500M /dev/mapper/vg01-lv01 扩容逻辑卷 # resize2fs /dev/mapper/vg01-lv01 同步文件系统 #df -h
实例3:离线裁剪
1、卸载逻辑卷
umount /u01
2、检测文件系统
# fsck -f /dev/mapper/vg01-lv01
3、先裁剪文件系统
# resize2fs /dev/mapper/vg01-lv01 1G
# fsck -f /dev/mapper/vg01-lv01
4、再裁剪逻辑卷
# lvreduce -L 1G /dev/mapper/vg01-lv01
# fsck -f /dev/mapper/vg01-lv01
5、挂载使用
mount /dev/mapper/vg01-lv01 /u01
实例4:逻辑卷相关命令
pvcreate /dev/sdb[1-3] 创建物理卷
vgcreate vg01 /dev/sdb 创建卷组
lvcreate -n lv01 -L/-l 2G/50(pe) vg01 创建逻辑卷
pvs/vgs/lvs 简单查看
pvdipaly/vgdipaly/lvdipaly 详细查看
lvremove /dev/vg01/lv01 删除逻辑卷(该逻辑卷没有被挂载),一旦删除逻辑卷数据就没有了
vgreduce vg01 /dev/sdb1 将物理卷从卷组里移除
vgremove vg01 删除卷组
pvremove /dev/sdb1 删除物理卷
实例5:逻辑卷实现条带化
条带化:把保存在逻辑卷上的数据分成n等分,同时保存到不同的物理设备中,可提高数据的读写速率;如果物理设备有一个损坏,那么数据就会有问题。
创建之前:
# pvs
PV VG Fmt Attr PSize PFree
/dev/sdb1 vg01 lvm2 a– 2.00g 2.00g
/dev/sdb2 vg01 lvm2 a– 2.00g 2.00g
创建条带化的逻辑卷:
# lvcreate -n lv01 -L 1G vg01 -i 2 /dev/sdb1 /dev/sdb2 Using default stripesize 64.00 KiB Logical volume "lv01" created
-i:条带化
创建后:
# pvs
PV VG Fmt Attr PSize PFree
/dev/sdb1 vg01 lvm2 a– 2.00g 1.50g
/dev/sdb2 vg01 lvm2 a– 2.00g 1.50g
格式化:
# mkfs.ext4 /dev/mapper/vg01-lv01
挂载使用:
# mount /dev/mapper/vg01-lv01 /u01
测试验证:
往/u01目录里写东西
# iostat -d -m /dev/sdb[12] 2
实例6:逻辑卷实现镜像备份
镜像:往逻辑卷上写数据,同时写到不同的物理设备上,并且两个设备上的数据是完全一致的。优点数据备份,缺点占用空间。
创建前:
# pvs
PV VG Fmt Attr PSize PFree
/dev/sdb1 vg01 lvm2 a– 2.00g 1.50g
/dev/sdb2 vg01 lvm2 a– 2.00g 1.50g
/dev/sdb3 vg02 lvm2 a– 2.00g 2.00g
/dev/sdb4 vg02 lvm2 a– 2.00g 2.00g
创建一个互为镜像的逻辑卷:
# lvcreate -n lv02 -L 1G -m 1 vg02 /dev/sdb[34]
# lvs
LV VG Attr LSize Pool Origin Data% Move Log Cpy%Sync Convert
lv01 vg01 -wi-ao—- 1.00g
lv02 vg02 mwi-a-m— 1.00g lv02_mlog 100.00
创建后:
# pvs
PV VG Fmt Attr PSize PFree
/dev/sdb1 vg01 lvm2 a– 2.00g 1.50g
/dev/sdb2 vg01 lvm2 a– 2.00g 1.50g
/dev/sdb3 vg02 lvm2 a– 2.00g 1.00g
/dev/sdb4 vg02 lvm2 a– 2.00g 1.00g
格式化:
mkfs -t ext4 /dev/vg02/lv02
挂载使用:
mkdir /u02
mount /dev/vg02/lv02 /u02
测试验证:
模拟破坏验证:
dd if=/dev/zero of=/dev/sdb3 bs=1M count=300
# pvs
Couldn’t find device with uuid aUyUTK-IbQ5-1emF-irPC-ZQ92-NLEU-c0fkHT.
PV VG Fmt Attr PSize PFree
/dev/sda3 vg_clone lvm2 a– 47.80g 0
/dev/sdb1 vg01 lvm2 a– 2.00g 1.50g
/dev/sdb2 vg01 lvm2 a– 2.00g 1.50g
/dev/sdb3 vg02 lvm2 a– 2.00g 1.00g
unknown device vg02 lvm2 a-m 2.00g 1.00g
将原来的逻辑卷卸载,重新挂载:
[root@node1 ~]# umount /u02
[root@node1 ~]# mount /dev/vg02/lv02 /u02
mount: wrong fs type, bad option, bad superblock on /dev/mapper/vg02-lv02,
missing codepage or helper program, or other error
In some cases useful info is found in syslog – try
dmesg | tail or so
说明:当物理设备或者数据损坏时会出现这种错误。这个时候互为镜像的逻辑卷已经无法同步,赶紧将损坏的盘撤下来,让正常的盘正常使用。
将已经损坏的物理卷从卷组中移走
# vgreduce –removemissing vg02 –force
# pvs
PV VG Fmt Attr PSize PFree
/dev/sdb1 vg01 lvm2 a– 2.00g 1.50g
/dev/sdb2 vg01 lvm2 a– 2.00g 1.50g
/dev/sdb3 vg02 lvm2 a– 2.00g 1.00g
再次将逻辑卷挂载继续使用:
mount /dev/vg02/lv02 /u02
后续工作:
将损坏的硬盘修复好再次使用。
pvcreate /dev/sdb4
vgextend vg02 /dev/sdb4
再次让逻辑卷互为镜像:
# lvconvert -m 1 –mirrorlog core /dev/vg02/lv02 /dev/sdb[34]
vg02/lv02: Converted: 0.8%
vg02/lv02: Converted: 83.2%
vg02/lv02: Converted: 100.0%
# lvs
LV VG Attr LSize Pool Origin Data% Move Log Cpy%Sync Convert
lv01 vg01 -wi-ao—- 1.00g
lv02 vg02 mwi-aom— 1.00g 100.00
练习:
1、添加一块新的10g硬盘到你的虚拟机中,并将其分为2个分区(大小自己决定)。如sdb1、sdb2
2、将sdb1做成大小为2G的逻辑卷lv01挂载到操作系统中的/u01目录下,并在/u01目录下创建5个文件file1~file5.
3、假设sdb1分区有坏块,现在需要将sdb1上的数据快速放到sdb2磁盘上,怎么做?
参考:pvmove
4、由于业务需要,/u01目录需要扩大到9G,怎么做?
5、新建一个卷组,名为vg02,PEsize的大小为8M,在该卷组中创建一个名为lv02的逻辑卷,大小为50个PE,格式化成ext3的文件系统,挂载到/u02目录下,需要每次开机自动挂载。
vgcreate -s 8M vg02 /dev/sdb2
扩展:
1、测试验证已有逻辑卷的硬盘,从一台服务器换到另一台服务器上面是否可以正常读取到数据?需要怎么做?
2、测试验证已有互为镜像的逻辑卷的硬盘,从一台服务器换到另一台服务器上面是否可以正常读取到数据?怎么做?
自动挂载
autofs:
实例1:自动挂载本地设备
# service autofs status
automount (pid 19728) is running…
需求:/dev/sdb1 /u01/test
vim /etc/auto.master
/u01 /etc/auto.test 定义子配置文件,以及上一级挂载点
注意:子配置文件必须是以auto.开头
cp /etc/auto.misc /etc/auto.test
vim /etc/auto.test
test -fstype=ext4 :/dev/sdb1
| | |
这个目录可以不存在 文件系统类型 需要自动挂载的设备
需要重启autofs服务
service autofs restart
测试:
cd /u01
ls 什么都没有,正常
cd test
实例2:网络挂载
将192.168.0.254:/var/ftp/notes 挂载到你本地
vim /etc/auto.master 主配置文件
/u02 /etc/auto.note –timeout=60
vim /etc/auto.note 子配置文件
ule -ro,soft,intr 192.168.0.254:/var/ftp/notes
重启服务
service autofs restart