逻辑卷的管理
- 物理分区
- pv:物理卷,被处理过的物理分区
- vg:物理卷组,由pv组成
- pe:物理扩展,是lvm的最小的存储单元
- lvm:逻辑卷,是pe大小的整数倍,从vg里面划出来的,可以使硬盘无限扩容、无限分区,上限:8EB-1字节
为什么使用逻辑卷?
逻辑卷和逻辑卷管理有助于更加轻松地管理磁盘空间。如果文件系统需要更多的空间,可以将其卷组的可用空间分配给逻辑卷,并且可以 整文件系统的大小。如果磁盘开始出现错误,可以通过卷组将替换磁盘注册为物理卷,并且逻辑卷的范围可以迁移到新磁盘。
- 用命令行实施 lvm 存储
- 清除上一个实验的操作:
umount /mnt/ 卸载
vim /etc/fstab 删除上面实验添加的内容
fdisk /dev/vdb 删除分区
partprobe 同步分区信息
fdisk -l 查看分区
- 打开监控:
watch -n 1 ‘pvs;vgs;lvs;df -h /mnt’ - 建立2个分区,大小分别为 1G;改变 id 为8e,即就是建立物理设备
- pvcreate /dev/vdb1 #将设备变成物理卷
- vgcreate vg0 /dev/vdb1 #将设备放进物理卷组,vg的名字vg0不做限制,可以在创建时指定其他物理卷(以空格隔开),也可以随后使用vgextend添加新物理卷
- lvcreate -L 300M -n lv0 vg0 #从物理卷组vg0取出一部分lv0,大小为300M,lvm的名字lv0不做限制
- mkfs.xfs /dev/vg0/lv0 #格式化该部分,将在新逻辑卷上创建xfs文件系统
- mount /dev/vg0/lv0 /mnt/ #挂载
实验:
将上一个实验的设备删除,以及清空自动激活的文件策略
[root@localhost ~]# fdisk /dev/vdb 建立分区
Welcome to fdisk (util-linux 2.23.2).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
Command (m for help): n
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p): p
Partition number (1-4, default 1): 1
First sector (2048-20971519, default 2048):
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-20971519, default 20971519): +1G
Partition 1 of type Linux and of size 1 GiB is set
Command (m for help): n
Partition type:
p primary (1 primary, 0 extended, 3 free)
e extended
Select (default p): p
Partition number (2-4, default 2): 2
First sector (2099200-20971519, default 2099200):
Using default value 2099200
Last sector, +sectors or +size{K,M,G} (2099200-20971519, default 20971519): +1G
Partition 2 of type Linux and of size 1 GiB is set
Command (m for help): t 将id修改为8e
Partition number (1,2, default 2): 1
Hex code (type L to list all codes): 8e
Changed type of partition ‘Linux’ to ‘Linux LVM’
Command (m for help): t
Partition number (1,2, default 2): 2
Hex code (type L to list all codes): 8e
Changed type of partition ‘Linux’ to ‘Linux LVM’
Command (m for help): p
Disk /dev/vdb: 10.7 GB, 10737418240 bytes, 20971520 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0xaafbd64a
Device Boot Start End Blocks Id System
/dev/vdb1 2048 2099199 1048576 8e Linux LVM
/dev/vdb2 2099200 4196351 1048576 8e Linux LVM
Command (m for help): wq
The partition table has been altered!
Calling ioctl() to re-read partition table.
WARNING: Re-reading the partition table failed with error 16: Device or resource busy.
The kernel still uses the old table. The new table will be used at
the next reboot or after you run partprobe(8) or kpartx(8)
Syncing disks.
[root@localhost ~]# partprobe
[root@localhost ~]# cat /proc/partitions
major minor #blocks name
253 0 10485760 vda
253 1 10484142 vda1
253 16 10485760 vdb
253 17 1048576 vdb1
253 18 1048576 vdb2
[root@localhost ~]# watch -n 1 ‘pvs;vgs;lvs;df -h /mnt’ 打开监控
[root@localhost ~]# pvcreate /dev/vdb1 物理分区处理,初始化物理卷pv
Physical volume “/dev/vdb1” successfully created
监控显示
[root@localhost ~]# vgcreate vg0 /dev/vdb1 创建物理卷组vg0
Volume group “vg0” successfully created
[root@localhost ~]# lvcreate -L 300M -n lv0 vg0 创建lv0逻辑卷,大小为300M
WARNING: xfs signature detected on /dev/vg0/lv0 at offset 0. Wipe it? [y/n] y
Wiping xfs signature on /dev/vg0/lv0.
Logical volume “lv0” created
[root@localhost ~]# mkfs.xfs /dev/vg0/lv0 格式化,使用lv0逻辑卷
meta-data=/dev/vg0/lv0 isize=256 agcount=4, agsize=19200 blks
= sectsz=512 attr=2, projid32bit=1
= crc=0
data = bsize=4096 blocks=76800, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=0
log =internal log bsize=4096 blocks=853, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
[root@localhost ~]# mount /dev/vg0/lv0 /mnt/ 挂载
监控中显示挂载设备名为/dev/mapper/vg0-lv0和挂载的名不同,两个查看设备是否是同一个:
[root@localhost ~]# ll /dev/vg0/lv0 监控中显示挂载的设备是/dev/mapper/vg0-lv0,查看设备
lrwxrwxrwx. 1 root root 7 May 7 07:36 /dev/vg0/lv0 -> …/dm-0
[root@localhost ~]# ll /dev/mapper/vg0-lv0 lv 查看设备,和上面的设备名是一样的,因为/dev/mapper/存储的就是虚拟设备
ls: cannot access lv: No such file or directory
lrwxrwxrwx. 1 root root 7 May 7 07:36 /dev/mapper/vg0-lv0 -> …/dm-0
- 当lvm不够用的时候,xfs扩容,xfs的文件系统调整,只支持增大
1、vg0的大小够用
lvextend -L 500M /dev/vg0/lv0 #将lvm扩展到500M
xfs_growfs /dev/vg0/lv0 #将文件系统拉伸变大500M
实验:
[root@localhost ~]# lvextend -L 500M /dev/vg0/lv0 扩展lvm
Extending logical volume lv0 to 500.00 MiB
Logical volume lv0 successfully resized
[root@localhost ~]# xfs_growfs /dev/vg0/lv0 拉伸文件系统
meta-data=/dev/mapper/vg0-lv0 isize=256 agcount=4, agsize=19200 blks
= sectsz=512 attr=2, projid32bit=1
= crc=0
data = bsize=4096 blocks=76800, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=0
log =internal bsize=4096 blocks=853, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
data blocks changed from 76800 to 128000
2、vg0的大小不够用
pvcreate /dev/vdb2 #创建一个物理卷,当创建时提示已挂载,是因为磁盘阵列没有关闭
vgextend vg0 /dev/vdb2 #将物理卷组扩展
lvextend -L 1500M /dev/vg0/lv0 #将lvm扩展到1500M
xfs_growfs /dev/vg0/lv0 #将挂载的lvm拉伸变大到1500M
实验:
[root@localhost ~]# pvcreate /dev/vdb2 创建一个新的物理卷
Physical volume /dev/vdb2 not found
WARNING: linux_raid_member signature detected on /dev/vdb2 at offset 4096. Wipe it? [y/n] y
Wiping linux_raid_member signature on /dev/vdb2.
Physical volume “/dev/vdb2” successfully created
[root@localhost ~]# vgextend vg0 /dev/vdb2 扩展物理卷组
Volume group “vg0” successfully extended
[root@localhost ~]# lvextend -L 1500M /dev/vg0/lv0 扩展lvm
Extending logical volume lv0 to 1.46 GiB
Logical volume lv0 successfully resized
[root@localhost ~]# xfs_growfs /dev/vg0/lv0 拉伸文件系统
meta-data=/dev/mapper/vg0-lv0 isize=256 agcount=7, agsize=19200 blks
= sectsz=512 attr=2, projid32bit=1
= crc=0
data = bsize=4096 blocks=128000, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=0
log =internal bsize=4096 blocks=853, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
data blocks changed from 128000 to 384000
当lvm不够大,ext扩容,ext的文件系统调整,可增大可缩小
1、增大文件系统
umount /mnt #将lvm卸载
mkfs.ext4 /dev/vg0/lv0 #格式化成ext系统文件
mount /dev/vg0/lv0 /mnt/ #将lvm挂载
mount #查看是否激活
lvextend -L 1800M /dev/vg0/lv0 #将lvm扩展到1800M
resize2fs /dev/vg0/lv0 #将文件系统拉伸变大到1800M
实验:
[root@localhost ~]# mkfs.ext4 /dev/vg0/lv0
mke2fs 1.42.9 (28-Dec-2013)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
96000 inodes, 384000 blocks
19200 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=394264576
12 block groups
32768 blocks per group, 32768 fragments per group
8000 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912
Allocating group tables: done
Writing inode tables: done
Creating journal (8192 blocks): done
Writing superblocks and filesystem accounting information: done
[root@localhost ~]# mount /dev/vg0/lv0 /mnt/
[root@localhost ~]# mount
/dev/mapper/vg0-lv0 on /mnt type ext4 (rw,relatime,seclabel,data=ordered)查看内容过多,只显示本行,表示已激活ext4文件系统的配额
[root@localhost ~]# lvextend -L 1800M /dev/vg0/lv0
Extending logical volume lv0 to 1.76 GiB
Logical volume lv0 successfully resized
[root@localhost ~]# resize2fs /dev/vg0/lv0
resize2fs 1.42.9 (28-Dec-2013)
Filesystem at /dev/vg0/lv0 is mounted on /mnt; on-line resizing required
old_desc_blocks = 1, new_desc_blocks = 1
The filesystem on /dev/vg0/lv0 is now 460800 blocks long.
2、缩小文件系统:
umount /mnt/ #卸载
e2fsck -f /dev/vg0/lv0 #数据扫描,防止破坏文件系统中的数据
resize2fs /dev/vg0/lv0 1000M #缩小文件系统到1000M
mount /dev/vg0/lv0 /mnt #挂载
lvreduce -L 1000M /dev/vg0/lv0缩小lvm
实验:
[root@localhost ~]# umount /mnt/
[root@localhost ~]# e2fsck -f /dev/vg0/lv0
e2fsck 1.42.9 (28-Dec-2013)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
/dev/vg0/lv0: 11/120000 files (9.1% non-contiguous), 16862/460800 blocks
[root@localhost ~]# resize2fs /dev/vg0/lv0 1000M 缩小文件系统
resize2fs 1.42.9 (28-Dec-2013)
Resizing the filesystem on /dev/vg0/lv0 to 256000 (4k) blocks.
The filesystem on /dev/vg0/lv0 is now 256000 blocks long.
[root@localhost ~]# mount /dev/vg0/lv0 /mnt/
[root@localhost ~]# lvreduce -L 1000M /dev/vg0/lv0 缩小lvm
WARNING: Reducing active and open logical volume to 1000.00 MiB
THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce lv0? [y/n]: y
Reducing logical volume lv0 to 1000.00 MiB
Logical volume lv0 successfully resized
3、缩减vg:
pvmove /dev/vdb1 /dev/vdb2 #将vdb1移到闲置的vdb2中
vgreduce vg0 /dev/vdb1 #从vg0中移除vdb1
pvremove /dev/vdb1 #删除vdb1
[root@localhost ~]# pvmove /dev/vdb1 /dev/vdb2
/dev/vdb1: Moved: 4.8%
/dev/vdb1: Moved: 100.0%
[root@localhost ~]# vgreduce vg0 /dev/vdb1
Removed “/dev/vdb1” from volume group “vg0”
[root@localhost ~]# pvremove /dev/vdb1
Labels on physical volume “/dev/vdb1” successfully wiped
lvm快照
创建快照以便于数据备份
快照逻辑卷是 lvm 存储的另一个灵活功能。lvm 快照是临时保留所更改的逻辑卷的原始数据的逻辑卷。快照提供原始卷的静态视图,从而能够以一致状态备份其数据。快照卷大小只需足以存储在它存在期间更改的数据即可。如果数据更改量大于快照存储容量,则快照将自动变为不可用(原始卷原封不动,仍然需要从卷组中动手解除挂载和删除不可用快照)
pvcreate /dev/vdb2 #创建vdb2
vgextend vg0 /dev/vdb2 #vdb2加入vg0
lvcreate -L 50M -n lv0backup -s /dev/vg0/lv0 #给lv0生成快照,大小50M,名字是lv0backup
mount /dev/vg0/lv0backup /mnt/ #挂载快照
ls /mnt/ #查看快照内容
rm -fr /mnt/* #删除快照里面的所有内容
ls /mnt/ #查看快照内容
umount /mnt/ #卸载快照
lvremove /dev/vg0/lv0backup #把快照删除
lvcreate -L 50M -n lv0backup -s /dev/vg0/lv0 #重新照一个快照
mount /dev/vg0/lv0backup /mnt/ #挂载
ls /mnt/ #内容还在,读取的是原始设备
实验:
[root@localhost ~]# pvcreate /dev/vdb1
Physical volume “/dev/vdb1” successfully created
[root@localhost ~]# vgextend vg0 /dev/vdb1
Volume group “vg0” successfully extended
[root@localhost ~]# lvcreate -L 50M -n lv0backup -s /dev/vg0/lv0
Rounding up size to full physical extent 52.00 MiB
Logical volume “lv0backup” created
[root@localhost ~]# mount /dev/vg0/lv0backup /mnt/
[root@localhost ~]# ls /mnt/
lost+found
[root@localhost ~]# rm -fr /mnt/*
[root@localhost ~]# ls /mnt/
[root@localhost ~]# umount /mnt/
[root@localhost ~]# lvremove /dev/vg0/lv0backup
Do you really want to remove active logical volume lv0backup? [y/n]: y
Logical volume “lv0backup” successfully removed
[root@localhost ~]# lvcreate -L 50M -n lv0backup -s /dev/vg0/lv0 新建一个快照
Rounding up size to full physical extent 52.00 MiB
Logical volume “lv0backup” created
[root@localhost ~]# mount /dev/vg0/lv0backup /mnt/
[root@localhost ~]# ls /mnt/ 查看原内容还在
lost+found
删除设备
1、umount /mnt #卸载快照
2、lvremove /dev/vg0/lv0backup #移除快照
3、umount /mnt/ #卸载lv0
4、lvremove /dev/vg0/lv0 #移除lv0
5、vgremove vg0 #移除物理卷组
6、pvremove /dev/vdb{1…2} #移除物理卷
注意:一定要按以上步骤进行
实验:
[root@localhost ~]# umount /mnt
[root@localhost ~]# lvremove /dev/vg0/lv0backup
Do you really want to remove active logical volume lv0backup? [y/n]: y
Logical volume “lv0backup” successfully removed
[root@localhost ~]# umount /mnt
[root@localhost ~]# lvremove /dev/vg0/lv0
Do you really want to remove active logical volume lv0? [y/n]: y
Logical volume “lv0” successfully removed
[root@localhost ~]# vgremove vg0
Volume group “vg0” successfully removed
[root@localhost ~]# pvremove /dev/vdb{1…2}
Labels on physical volume “/dev/vdb1” successfully wiped
Labels on physical volume “/dev/vdb2” successfully wiped
删除设备后的监控显示: