营销软件网站,申请域名免费,装修公司展厅效果图设计图片,设计师培训机构本章主要介绍逻辑卷的管理。
了解什么是逻辑卷创建和删除逻辑卷扩展逻辑卷缩小逻辑卷逻辑卷快照的使用 前面介绍了分区的使用#xff0c;如果某个分区空间不够#xff0c;想增加空间是非常困难的。所以#xff0c;建议尽可能使用逻辑卷而非普通的分区#xff0c;因为逻辑卷…本章主要介绍逻辑卷的管理。
了解什么是逻辑卷创建和删除逻辑卷扩展逻辑卷缩小逻辑卷逻辑卷快照的使用 前面介绍了分区的使用如果某个分区空间不够想增加空间是非常困难的。所以建议尽可能使用逻辑卷而非普通的分区因为逻辑卷的特点是空间可以动态地扩大或缩小。 了解逻辑卷
逻辑卷如图所示 这里有三个大小为10G的分区然后将这些分区加工变成PV(物理卷)它们就可以合体成 一个大小为30G的虚拟硬盘这个虚拟硬盘叫作VG(卷组)。然后在这个虚拟硬盘卷组上划分一个个分区(逻辑卷)如下图所示。 这个逻辑卷是可变大、可缩小的最大可以占用整个卷组的空间即30G。如果逻辑卷还不够,可以继续找一个硬盘加入卷组中如下图所示。 假设这里又在卷组中加了一个20G的分区此时卷组的大小为50G逻辑卷就可以继续扩展了。如果卷组不需要那么大空间,可以把新增加的硬盘从卷组中分离出去如下图所示。 用户直接格式化挂载逻辑卷即可不必关心写入逻辑卷中的数据最终是写入第一个分区还是第二个分区。
创建逻辑卷的整个过程如下。
创建物理卷PV。创建卷组VG。创建逻辑卷LV。下面介绍物理卷和卷组。
首先通过pvs或pvscan查看现在系统中是否存在PV命令如下。
[rootrhel03 ~]# pvscan No matching physical volumes found
[rootrhel03 ~]# 没有任何输出说明现在还不存在任何PV所以需要先创建PV。首先看一下分区情况命令如下。
[rootrhel03 ~]# fdisk -l /dev/sda
Disk /dev/sda60 GiB64424509440 字节125829120 个扇区
单元扇区 / 1 * 512 512 字节
扇区大小(逻辑/物理)512 字节 / 512 字节
I/O 大小(最小/最佳)512 字节 / 512 字节
磁盘标签类型dos
磁盘标识符0x2831c07e设备 启动 起点 末尾 扇区 大小 Id 类型
/dev/sda1 2048 10487807 10485760 5G 83 Linux
/dev/sda2 10487808 20973567 10485760 5G 82 Linux swap / Solaris
/dev/sda4 20973568 125829119 104855552 50G 5 扩展
/dev/sda5 20975616 41947135 20971520 10G 8e Linux LVM
/dev/sda6 41949184 62920703 20971520 10G 8e Linux LVM
/dev/sda7 62922752 83894271 20971520 10G 8e Linux LVM
[rootrhel03 ~]# 前面已经把sda5~sda7的分区类型转变为Linux LVM了。下面我们 把/dev/sda5~/dev/sda7创建为PV,命令如下。
[rootrhel03 ~]# pvcreate /dev/sda{5..7}Physical volume /dev/sda5 successfully created.Physical volume /dev/sda6 successfully created.Physical volume /dev/sda7 successfully created.
[rootrhel03 ~]#
删除PV用 pvremove命令。例如删除/dev/sda7则用pvremove /dev/sda7命令命令如下。
[rootrhel03 ~]# pvremove /dev/sda7Labels on physical volume /dev/sda7 successfully wiped.
[rootrhel03 ~]#
再次把/dev/sda7转变为PV,命令如下。
[rootrhel03 ~]# pvcreate /dev/sda7Physical volume /dev/sda7 successfully created.
[rootrhel03 ~]#
现在查看PV命令如下。
[rootrhel03 ~]# pvsPV VG Fmt Attr PSize PFree /dev/sda5 lvm2 --- 10.00g 10.00g/dev/sda6 lvm2 --- 10.00g 10.00g/dev/sda7 lvm2 --- 10.00g 10.00g
[rootrhel03 ~]# 当然也可以通过pvscan命令来查看从上面可以看到VG列是空的也就是这些PV都没 有加人任何VG。下面开始创建VG首先通过vgs或vgscan 查看是否存在VG命令如下。
[rootrhel03 ~]# vgs
[rootrhel03 ~]# vgscan
[rootrhel03 ~]# 没有任何输出说明此时不存在VG。下面把/dev/sda5、/dev/sda6组成一个名称为vg0 的VG,命令如下
[rootrhel03 ~]# vgcreate vg0 /dev/sda5 /dev/sda6Volume group vg0 successfully created
[rootrhel03 ~]#
这个命令可以用 vgcreate vg0 /dev/sda{5,6}替代。
再次查看现有的VG,命令如下。
[rootrhel03 ~]# vgsVG #PV #LV #SN Attr VSize VFree vg0 2 0 0 wz--n- 19.99g 19.99g
[rootrhel03 ~]# 可以看到VG由2个PV组成因为每个PV的大小为10G所以VG的大小约为20G。再次查看PV的信息命令如下。
[rootrhel03 ~]# pvsPV VG Fmt Attr PSize PFree /dev/sda5 vg0 lvm2 a-- 10.00g 10.00g/dev/sda6 vg0 lvm2 a-- 10.00g 10.00g/dev/sda7 lvm2 --- 10.00g 10.00g
[rootrhel03 ~]# 可以看到/dev/sda5和/dev/sda6现在是在vg0中的但是/dev/sda7不是。如果vg0的 空间不够了可以为 vg0增加空间。例如把/dev/sda7加过去命令如下。
[rootrhel03 ~]# vgextend vg0 /dev/sda7Volume group vg0 successfully extended
[rootrhel03 ~]#
这样就把/dev/sda7加到vg0中了再次查看VG的信息命令如下。
[rootrhel03 ~]# vgsVG #PV #LV #SN Attr VSize VFree vg0 3 0 0 wz--n- 29.99g 29.99g
[rootrhel03 ~]# 可以看到, VG现在由3个PV组成大小约为30G。如果空间又不够了还可以增加硬盘 继续添加到vg0中。如果此时想把/dev/sda7 从卷组中去除则用vgreduce命令命令如下。
[rootrhel03 ~]# vgreduce vg0 /dev/sda7Removed /dev/sda7 from volume group vg0
[rootrhel03 ~]# 使用vgdisplay命令会显示所有卷组的详细信息如果只想显示特定的某个卷组的详细信息则用“vgdisplay卷组名”命令。例如现在要显示 vg0的详细信息命令如下。
[rootrhel03 ~]# vgdisplay vg0--- Volume group ---VG Name vg0System ID Format lvm2Metadata Areas 2Metadata Sequence No 3VG Access read/writeVG Status resizableMAX LV 0Cur LV 0Open LV 0Max PV 0Cur PV 2Act PV 2VG Size 19.99 GiBPE Size 4.00 MiBTotal PE 5118Alloc PE / Size 0 / 0 Free PE / Size 5118 / 19.99 GiBVG UUID pSu9uD-DiCE-yheY-n21M-QDPR-EdPS-dZgm1X[rootrhel03 ~]# 上面的代码中有一个关键信息叫PE SizePE的意思是物理扩展是分配给逻辑卷的最小单位,即逻辑卷的大小是PE的整倍数。如果创建逻辑卷时指定的大小不是PE的整倍数例如, 创建一个大小为98M的逻辑卷而每个PE是4M因为98M有24.5个PE此时系统会自动把逻辑卷创建为100M、即25个PE如下所示。
[rootrhel03 ~]# lvcreate -L 98M -n lv0 vg0Rounding up size to full physical extent 100.00 MiBLogical volume lv0 created.
[rootrhel03 ~]#
删除此LV命令如下
[rootrhel03 ~]# lvremove -f /dev/vg0/lv0 Logical volume lv0 successfully removed.
[rootrhel03 ~]#
PE的大小只能在创建VG时用-s选项来指定不可以后期修改。
重命名VG用vgrename命令。例如把 vg0重命名为myvg命令如下。
[rootrhel03 ~]# vgsVG #PV #LV #SN Attr VSize VFree vg0 2 0 0 wz--n- 19.99g 19.99g
[rootrhel03 ~]# vgrename vg0 myvgVolume group vg0 successfully renamed to myvg
[rootrhel03 ~]# vgsVG #PV #LV #SN Attr VSize VFree myvg 2 0 0 wz--n- 19.99g 19.99g
[rootrhel03 ~]#
删除VG用vgremove命令。例如现在把myvg删除命令如下。
[rootrhel03 ~]# vgremove myvg Volume group myvg successfully removed
[rootrhel03 ~]# vgs
[rootrhel03 ~]#
练习创建一个PE大小为8M、名称为vg0的 VG,命令如下。
[rootrhel03 ~]# vgcreate -s 8 vg0 /dev/sda{5..7}Volume group vg0 successfully created
[rootrhel03 ~]#
此处8后面没有写单位默认就是M。查看vg0属性,命令如下。
[rootrhel03 ~]# vgdisplay vg0--- Volume group ---VG Name vg0System ID Format lvm2Metadata Areas 3Metadata Sequence No 1VG Access read/writeVG Status resizableMAX LV 0Cur LV 0Open LV 0Max PV 0Cur PV 3Act PV 3VG Size 29.98 GiBPE Size 8.00 MiBTotal PE 3837Alloc PE / Size 0 / 0 Free PE / Size 3837 / 29.98 GiBVG UUID dUojXX-7dlz-AxE8-9AlF-1TtW-FbLu-cjOkNc[rootrhel03 ~]#
为了后续使用方便删除此vg0然后创建一个默认PE大小的VG,命令如下。
[rootrhel03 ~]# vgremove vg0Volume group vg0 successfully removed
[rootrhel03 ~]# vgs
[rootrhel03 ~]#
[rootrhel03 ~]# vgcreate vg0 /dev/sda{5..7}Volume group vg0 successfully created
[rootrhel03 ~]# 创建逻辑卷
首先通过lvscan或lvs查看现在系统中是否存在逻辑卷命令如下。
[rootrhel03 ~]# lvscan
[rootrhel03 ~]# lvs
[rootrhel03 ~]# 没有任何输出说明现在还不存在任何逻辑卷。下面用 Ivereate命令创建逻辑卷语法如下。 lvcreate ‐L 大小 ‐n 名称 卷组需要注意的是,这里是大写字母L用于指定大小 或者 lvcreate ‐l pe数 ‐n 名称 卷组需要注意的是,这里是小写字母l用于指定PE数 或者 lvcreate ‐l 数字%free ‐n 名称 卷组 现在在vg0上创建一个大小为200M的逻辑卷lv0命令如下。
[rootrhel03 ~]# lvcreate -L 200M -n lv0 vg0Logical volume lv0 created.
[rootrhel03 ~]#
查看逻辑卷的信息,命令如下。
[rootrhel03 ~]# lvscanACTIVE /dev/vg0/lv0 [200.00 MiB] inherit
[rootrhel03 ~]#
可以看到访问逻辑卷的方式为/dev/卷组名/逻辑卷这里是/dev/vg0/1v0大小为 200M。
再创建一个包含50个PE、名称为lv1的逻辑卷命令如下。
[rootrhel03 ~]# lvcreate -l 50 -n lv1 vg0Logical volume lv1 created.
查看逻辑卷的信息,命令如下。
[rootrhel03 ~]# lvscanACTIVE /dev/vg0/lv0 [200.00 MiB] inheritACTIVE /dev/vg0/lv1 [200.00 MiB] inherit
[rootrhel03 ~]#
因为每个PE的大小为4M50个PE总共为200M。
创建一个逻辑卷lv2大小为剩余空间的25%命令如下。
[rootrhel03 ~]# lvcreate -l 25%free -n lv2 vg0Logical volume lv2 created.
[rootrhel03 ~]#
创建一个逻辑卷lv3使用剩余所有空间命令如下。
[rootrhel03 ~]# lvcreate -l 100%free -n lv3 vg0Logical volume lv3 created.
[rootrhel03 ~]#
现在查看一下现有逻辑卷命令如下。
[rootrhel03 ~]# lvscanACTIVE /dev/vg0/lv0 [200.00 MiB] inheritACTIVE /dev/vg0/lv1 [200.00 MiB] inheritACTIVE /dev/vg0/lv2 [7.40 GiB] inheritACTIVE /dev/vg0/lv3 [22.20 GiB] inherit
[rootrhel03 ~]# 显示逻辑卷的详细信息可以用Ivdisplay命令这样会显示所有逻辑卷的信息如果想要查看某个逻辑卷的详细信息则用“lvdisplay 逻辑卷名”命令。例如查看/dev/vg0/lv0的详 细信息,命令如下。
[rootrhel03 ~]# lvdisplay /dev/vg0/lv0--- Logical volume ---LV Path /dev/vg0/lv0LV Name lv0VG Name vg0LV UUID zY4lqW-tiuJ-5BSC-Jark-fdGa-Mfli-5eSpSDLV Write Access read/writeLV Creation host, time rhel03, 2023-12-06 06:09:59 0300LV Status available# open 0LV Size 200.00 MiBCurrent LE 50Segments 1Allocation inheritRead ahead sectors auto- currently set to 8192Block device 253:0[rootrhel03 ~]#
删除逻辑卷用“lvremove逻辑卷名”命令。例如删除/dev/vg0/1v3命令如下。
[rootrhel03 ~]# lvremove /dev/vg0/lv3
Do you really want to remove active logical volume vg0/lv3? [y/n]: yLogical volume lv3 successfully removed.
[rootrhel03 ~]# 此处必须输入y或n,y表示确定删除。如果想直接删除可以加上-f选项表示强制删除。例如现在把lv2删除,命令如下
[rootrhel03 ~]# lvremove -f /dev/vg0/lv2Logical volume lv2 successfully removed.
[rootrhel03 ~]# 查看逻辑卷的信息,命令如下。
[rootrhel03 ~]# lvscanACTIVE /dev/vg0/lv0 [200.00 MiB] inheritACTIVE /dev/vg0/lv1 [200.00 MiB] inherit
[rootrhel03 ~]#
下面将这两个逻辑卷分别用XFS和EXT4文件系统进行格式化命令如下。
[rootrhel03 ~]# mkfs.xfs /dev/vg0/lv0
meta-data/dev/vg0/lv0 isize512 agcount4, agsize12800 blks sectsz512 attr2, projid32bit1 crc1 finobt1, sparse1, rmapbt0 reflink1
data bsize4096 blocks51200, imaxpct25 sunit0 swidth0 blks
naming version 2 bsize4096 ascii-ci0, ftype1
log internal log bsize4096 blocks1368, version2 sectsz512 sunit0 blks, lazy-count1
realtime none extsz4096 blocks0, rtextents0
[rootrhel03 ~]# mkfs.ext4 /dev/vg0/lv1
mke2fs 1.45.6 (20-Mar-2020)
创建含有 204800 个块每块 1k和 51200 个inode的文件系统
文件系统UUIDbc14700f-70a7-44a9-b7ff-7fa2b464c402
超级块的备份存储于下列块 8193, 24577, 40961, 57345, 73729正在分配组表 完成
正在写入inode表 完成
创建日志4096 个块完成
写入超级块和文件系统账户统计信息 已完成[rootrhel03 ~]# 然后创建两个目录/lv0-xfs 和/lv1-ext4,分别挂载/dev/vg0/lv0和 /dev/vg0/lv1命令如下。
[rootrhel03 ~]# mkdir /lv0-xfs /lv1-ext4
[rootrhel03 ~]# mount /dev/vg0/lv0 /lv0-xfs/
[rootrhel03 ~]# mount /dev/vg0/lv1 /lv1-ext4/
[rootrhel03 ~]#
查看逻辑卷的挂载情况命令如下。
[rootrhel03 ~]# df -Th | grep lv
/dev/mapper/vg0-lv0 xfs 195M 12M 184M 6% /lv0-xfs
/dev/mapper/vg0-lv1 ext4 190M 1.6M 175M 1% /lv1-ext4
[rootrhel03 ~]# 注意逻辑卷的命名也可以写成如下格式。 /dev/mapper/卷组名-逻辑卷名 然后分别往两个挂载点中拷贝测试文件命令如下。
[rootrhel03 ~]# cp /etc/hosts /lv0-xfs/
[rootrhel03 ~]# cp /etc/hosts /lv1-ext4/
[rootrhel03 ~]# 逻辑卷扩大 前面讲逻辑卷的优点在于可以动态地扩大或缩小下面演示逻辑卷的扩大。首先查看当前逻辑卷和文件系统的大小,命令如下。
[rootrhel03 ~]# lvscanACTIVE /dev/vg0/lv0 [200.00 MiB] inheritACTIVE /dev/vg0/lv1 [200.00 MiB] inherit
[rootrhel03 ~]#
[rootrhel03 ~]# df -Th | grep lv
/dev/mapper/vg0-lv0 xfs 195M 12M 184M 6% /lv0-xfs
/dev/mapper/vg0-lv1 ext4 190M 1.6M 175M 1% /lv1-ext4
[rootrhel03 ~]# 可以看到lv0和lv1的大小都是200M里面的文件系统也为200M显示为195M)。为了 更好地理解可以将文件系统当成逻辑卷中的填充物如下图所示。 里面灰色部分为文件系统填充了整个逻辑卷。下面开始扩展逻辑卷命令是lvextend, 用法如下。 lvextend ‐L M ‐n逻辑卷 ‐‐这句话的意思是在原有的基础上加M 或者 lvextend ‐L N ‐n 逻辑卷‐‐这句话的意思是不管原来是多大现在变为N 练习把 lv0 扩展到600M命令如下。
[rootrhel03 ~]# lvextend -L 400M /dev/vg0/lv0Size of logical volume vg0/lv0 changed from 200.00 MiB (50 extents) to 600.00 MiB (150 extents).Logical volume vg0/lv0 successfully resized.
[rootrhel03 ~]#
这是在原有的基础上额外加400M现在共600M。
把 lv1 扩展到600M命令如下。
[rootrhel03 ~]# lvextend -L 600M /dev/vg0/lv1Size of logical volume vg0/lv1 changed from 200.00 MiB (50 extents) to 600.00 MiB (150 extents).Logical volume vg0/lv1 successfully resized.
[rootrhel03 ~]#
这里不带“”直接写600M意思是不管原来是多大现在扩展到600M。查看大小 命令如下。
[rootrhel03 ~]# lvscanACTIVE /dev/vg0/lv0 [600.00 MiB] inheritACTIVE /dev/vg0/lv1 [600.00 MiB] inherit
[rootrhel03 ~]#
现在查看一下文件系统的大小,命令如下。
[rootrhel03 ~]# df -Th | grep lv
/dev/mapper/vg0-lv0 xfs 195M 12M 184M 6% /lv0-xfs
/dev/mapper/vg0-lv1 ext4 190M 1.6M 175M 1% /lv1-ext4
[rootrhel03 ~]# 会发现还是200M这是为何?需要卸载重新挂载吗?不需要如下图所示。 刚才讲了为了便于理解把文件系统当成填充物右侧是逻辑卷新增加的400M空间这里面没有文件系统只有前面200M的逻辑卷中才有文件系统。所以现在要做的就是扩展文件系统直到把多增加的400M逻辑卷也填充满为止如下图所示。 这样文件系统的大小也是600M了扩展文件系统的命令如下。 XFS文件系统使用xfs_growfs用法xfs_growfs/挂载点EXT4文件系统用resize2fs用法resize2fs逻辑卷名#注意不是挂载点 下面开始扩展lv0的文件系统大小命令如下。
[rootrhel03 ~]# xfs_growfs /lv0-xfs/
meta-data/dev/mapper/vg0-lv0 isize512 agcount4, agsize12800 blks sectsz512 attr2, projid32bit1 crc1 finobt1, sparse1, rmapbt0 reflink1
data bsize4096 blocks51200, imaxpct25 sunit0 swidth0 blks
naming version 2 bsize4096 ascii-ci0, ftype1
log internal log bsize4096 blocks1368, version2 sectsz512 sunit0 blks, lazy-count1
realtime none extsz4096 blocks0, rtextents0
data blocks changed from 51200 to 153600
[rootrhel03 ~]#
扩展lv1的文件系统大小命令如下。
[rootrhel03 ~]# resize2fs /dev/vg0/lv1
resize2fs 1.45.6 (20-Mar-2020)
/dev/vg0/lv1 上的文件系统已被挂载于 /lv1-ext4需要进行在线调整大小old_desc_blocks 2, new_desc_blocks 5
/dev/vg0/lv1 上的文件系统现在为 614400 个块每块 1k。[rootrhel03 ~]#
查看大小命令如下。
[rootrhel03 ~]# lvscanACTIVE /dev/vg0/lv0 [600.00 MiB] inheritACTIVE /dev/vg0/lv1 [600.00 MiB] inherit
[rootrhel03 ~]# df -Th | grep lv
/dev/mapper/vg0-lv0 xfs 595M 15M 580M 3% /lv0-xfs
/dev/mapper/vg0-lv1 ext4 578M 2.3M 545M 1% /lv1-ext4
[rootrhel03 ~]# 可以看到已经成功扩展了在整个扩展过程中并没有先卸载这种叫作在线扩展。现在测试一下里面的文件是否被损坏命令如下。
[rootrhel03 ~]# cat /lv0-xfs/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.23.133 www.rhel.cc
[rootrhel03 ~]# cat /lv1-ext4/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.23.133 www.rhel.cc
[rootrhel03 ~]# 依然是可以读取的,说明文件并没有损坏。 注意在使用 Ivextend命令时可以加上 -r 选项,这样在扩展逻辑卷的同时会把文件系统XFS,EXT4等) 一并扩展了。 逻辑卷的缩小
非常不建议对逻辑卷做缩小的操作但是如果必须缩小一定要先缩小文件系统然后再 缩小逻辑卷,否则会破坏文件系统如下图所示。 原来的文件系统和逻辑卷是贴合的如果先把逻辑卷缩小了则文件系统会多出来一块 没有承载体整个文件系统就会被破坏所以一定要先缩小文件系统然后再缩小逻辑卷。 不过对于XFS 文件系统来说是不支持缩小的这里使用EXT4来演示。 下面开始进行缩小的操作缩小文件系统请严格按照下面的步骤进行操作。
1卸载文件系统命令如下。
[rootrhel03 ~]# umount /lv1-ext4
[rootrhel03 ~]#
2对文件系统进行fsck检查命令如下。
[rootrhel03 ~]# fsck -f /dev/vg0/lv1
fsck来自 util-linux 2.32.1
e2fsck 1.45.6 (20-Mar-2020)
第 1 步检查inode、块和大小
第 2 步检查目录结构
第 3 步检查目录连接性
第 4 步检查引用计数
第 5 步检查组概要信息
/dev/mapper/vg0-lv112/153600 文件0.0% 为非连续的 25794/614400 块
[rootrhel03 ~]# 3缩小文件系统命令如下。
[rootrhel03 ~]# resize2fs /dev/vg0/lv1 200M
resize2fs 1.45.6 (20-Mar-2020)
将 /dev/vg0/lv1 上的文件系统调整为 204800 个块每块 1k。
/dev/vg0/lv1 上的文件系统现在为 204800 个块每块 1k。[rootrhel03 ~]#
这里200M指的是最终的大小,即文件系统被减掉了400M。
4减小逻辑卷逻辑卷最终的大小要大于等于200M即减掉的值不能超过600M. 命令如下。
[rootrhel03 ~]# lvreduce -L -400M /dev/vg0/lv1WARNING: Reducing active logical volume to 200.00 MiB.THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce vg0/lv1? [y/n]: ySize of logical volume vg0/lv1 changed from 600.00 MiB (150 extents) to 200.00 MiB (50 extents).Logical volume vg0/lv1 successfully resized.
[rootrhel03 ~]# 这里给了一次警告提示“如果你减小逻辑卷可能会损坏数据你是否要继续”输 入“y”并按【Enter】键。
现在重新挂载逻辑卷验证,命令如下。
[rootrhel03 ~]# mount /dev/vg0/lv1 /lv1-ext4/
[rootrhel03 ~]# df -Th | grep lv1
/dev/mapper/vg0-lv1 ext4 190M 1.6M 176M 1% /lv1-ext4
[rootrhel03 ~]#
[rootrhel03 ~]# lvscanACTIVE /dev/vg0/lv0 [700.00 MiB] inheritACTIVE /dev/vg0/lv1 [200.00 MiB] inherit
[rootrhel03 ~]#
可以看到,逻辑卷和文件系统的大小均为200M。验证里面的文件是否被损坏命令如下。
[rootrhel03 ~]# cat /lv1-ext4/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.23.133 www.rhel.cc
[rootrhel03 ~]#
依然是可以访问的。 恢复逻辑卷 当在逻辑卷中存储数据时数据是写入底层的PV中的所以即使删除了逻辑卷也并没有删除存储在PV中的数据。如果恢复删除的逻辑卷仍然能看到逻辑卷中原有的数据。
前面已经创建了逻辑卷lv1里面有几个文件现在卸载并把此逻辑卷删除命令如下。
[rootrhel03 ~]# umount /lv1-ext4
[rootrhel03 ~]# lvremove -f /dev/vg0/lv1Logical volume lv1 successfully removed.
[rootrhel03 ~]# lvscan | grep lv1
[rootrhel03 ~]# 下面开始恢复。我们在卷组上做过的所有操作均有日志记录可以通过“vgcfgrestore-- list卷组名”来查看。现在查看vg0的所有日志记录命令如下。
[rootrhel03 ~]# vgcfgrestore --list vg0
File: /etc/lvm/archive/vg0_00023-895388597.vgVG name: vg0Description: Created *before* executing lvremove -f /dev/vg0/lv1Backup Time: Wed Dec 6 06:59:24 2023 可以看到执行Ivremove -f /dev/vg0/Iv1命令之前的日志文件是/etc/lvm/archive/vg0_00023-895388597.vg那么就可以利用这个文件对LV进行恢复。恢复 命令是vgcfgrestore语法如下。 vgcfgrestore ‐f 日志文件卷组名 下面开始恢复vg0命令如下。
[rootrhel03 ~]# vgcfgrestore -f /etc/lvm/archive/vg0_00023-895388597.vg vg0Volume group vg0 has active volume: lv0.WARNING: Found 1 active volume(s) in volume group vg0.Restoring VG with active LVs, may cause mismatch with its metadata.
Do you really want to proceed with restore of volume group vg0, while 1 volume(s) are active? [y/n]: yRestored volume group vg0.
[rootrhel03 ~]# 查看逻辑卷的信息,命令如下。
[rootrhel03 ~]# lvscan | grep lv1inactive /dev/vg0/lv1 [200.00 MiB] inherit
[rootrhel03 ~]#
可以看到现在已经恢复出来了但是状态为inactive即不活跃状态所以现在需要激活它命令如下。
[rootrhel03 ~]# lvchange -ay /dev/vg0/lv1
[rootrhel03 ~]# lvscan | grep lv1ACTIVE /dev/vg0/lv1 [200.00 MiB] inherit
[rootrhel03 ~]#
这里-ay的意思是 active yes表明已经成功激活然后挂载查看里面的文件命令如下。
[rootrhel03 ~]# mount /dev/vg0/lv1 /lv1-ext4/
[rootrhel03 ~]# ls /lv1-ext4/
hosts lostfound
[rootrhel03 ~]#
依然是可以正常访问的。 逻辑卷的快照 为了备份逻辑卷中的数据,可以通过对逻辑卷做快照 来实现,快照的原理如下图所示。 现在有一个逻辑卷lv0这个文件中有3个文件 hosts、issue、 file然后对这个逻辑卷做快照 Iv0_snap记住不要对快照格式化)。用户访同 lv0_snap时,发现v0中的内容在Iv0_snap中都有,例如,在 lv0_snap中也能看到hosts 等文件。 但是此时在lv0_snap中看到的这些文件都只是一个影子而已这个影子通过硬链接来实 现)如同井中望月。所以创建快照时快照的空间可以很小因为看到的内容并非真的存 储在快照中。 如果在快照中把 issue删除也不会从原始逻辑卷中把 issue删除只是把对应的映射删除而已如下图所示。 如果在 lv0_snap中创建一个文件 file则这个文件是保存在lv0_snap中的占用 1vO_snap的空间并不会写入lv0如下图所示。 所以在快照中新增文件的总大小不能超过快照的大小。 上面这种映射和原始文件之间的关系采用的是写时复制copy-on-write策略。 创建快照的语法如下。 lvcreate ‐L 大小 ‐n 名称 ‐s 逻辑卷 现在为lv0创建一个名称为lv0_snap、大小为20M 的快照命令如下。
[rootrhel03 ~]# lvcreate -L 20M -n lv0_snap -s /dev/vg0/lv0Logical volume lv0_snap created.
[rootrhel03 ~]# 查看逻辑卷的信息,命令如下。
[rootrhel03 ~]# lvscanACTIVE Original /dev/vg0/lv0 [700.00 MiB] inheritACTIVE /dev/vg0/lv1 [200.00 MiB] inheritACTIVE Snapshot /dev/vg0/lv0_snap [20.00 MiB] inherit
[rootrhel03 ~]# 可以看到/dev/vg0/lv0是原始逻辑卷/dev/vg0/lv0_snap是快照。从哪里能看 到/dev/vg0/lv0_snap是/dev/vg0/lv0的快照呢?可以通过lvs命令来查看命令如下。
[rootrhel03 ~]# lvsLV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convertlv0 vg0 owi-aos--- 700.00m lv0_snap vg0 swi-a-s--- 20.00m lv0 0.06 lv1 vg0 -wi-ao---- 200.00m
[rootrhel03 ~]#
或者
[rootrhel03 ~]# lvdisplay /dev/vg0/lv0_snap --- Logical volume ---LV Path /dev/vg0/lv0_snapLV Name lv0_snapVG Name vg0LV UUID rO100L-UIbF-xvY9-afPN-0nRT-kQVd-LoXXINLV Write Access read/writeLV Creation host, time rhel03, 2023-12-06 07:16:06 0300LV snapshot status active destination for lv0LV Status available# open 0LV Size 700.00 MiBCurrent LE 175COW-table size 20.00 MiBCOW-table LE 5Allocated to snapshot 0.10%Snapshot chunk size 4.00 KiBSegments 1Allocation inheritRead ahead sectors auto- currently set to 8192Block device 253:4[rootrhel03 ~]# 把lv0_snap挂载到/snap目录上命令如下。
[rootrhel03 ~]# mkdir /snap
[rootrhel03 ~]# mount -o nouuid /dev/vg0/lv0_snap /snap/
[rootrhel03 ~]# ls /snap/
hosts issue
[rootrhel03 ~]# 注意 快照不需要格式化。因为原始逻辑卷的文件系统是XFS的所以挂载快照时需要加上nouid选项。 可以看到/snap中有lv0的内容但是这些内容并非存储在lv0_snap中的。在/snap下面再创建一个10M的测试文件,命令如下。
[rootrhel03 ~]# dd if/dev/zero of/snap/file bs1M count10
记录了100 的读入
记录了100 的写出
10485760 bytes (10 MB, 10 MiB) copied, 0.0107622 s, 974 MB/s
[rootrhel03 ~]# 这10M的文件占用的是快照lv0_snap的空间并没有出现在lv0中命令如下。
[rootrhel03 ~]# ls /lv0-xfs/
hosts issue
[rootrhel03 ~]# 快照有什么用呢?假设原始逻辑卷中的数据被我们误删除了那么可以利用快照恢复原始逻辑卷中的数据。
先把lv0中的数据删除,命令如下。
[rootrhel03 ~]# rm -rf /lv0-xfs/*
[rootrhel03 ~]# ls /lv0-xfs/
[rootrhel03 ~]#
然后用lv0_snap恢复lv0中的数据。先卸载1v0_snap和 lv0命令如下。
[rootrhel03 ~]# umount /snap
[rootrhel03 ~]# umount /lv0-xfs
[rootrhel03 ~]#
然后用Ivconvert命令恢复数据命令如下。
[rootrhel03 ~]# lvconvert --merge /dev/vg0/lv0_snapMerging of volume vg0/lv0_snap started.vg0/lv0: Merged: 99.94%[rootrhel03 ~]# 这里后面指定了快照即用哪个快照来恢复原始逻辑卷中的数据现在看到已经恢复成功了验证命令如下。
[rootrhel03 ~]# mount /dev/vg0/lv0 /lv0-xfs/
[rootrhel03 ~]# ls /lv0-xfs/
file hosts issue
[rootrhel03 ~]# 可以看到数据已经恢复出来了且在快照中创建的文件也恢复到原始逻辑卷中了。通过这种用法我们可以每天对某逻辑卷做快照一旦数据丢失就可以用快照来恢复数据了。
再次查看逻辑卷的信息命令如下。
[rootrhel03 ~]# lvscanACTIVE /dev/vg0/lv0 [700.00 MiB] inheritACTIVE /dev/vg0/lv1 [200.00 MiB] inherit
[rootrhel03 ~]#
可以看到快照lv0_snap已经没有了因为它已经“牺牲”自己成全了lv0。