一,LVM简介
LVM是逻辑盘卷管理(LogicalVolumeManager)的简称,它是Linux环境下对磁盘分区进行管理的一种机制,LVM是建立在硬盘和 分区之上的一个逻辑层,来提高磁盘分区管理的灵活性。通过LVM系统管理员可以轻松管理磁盘分区,如:将若干个磁盘分区连接为一个整块的卷组 (volumegroup),形成一个存储池。管理员可以在卷组上随意创建逻辑卷组(logicalvolumes),并进一步在逻辑卷组上创建文件系 统。管理员通过LVM可以方便的调整存储卷组的大小,并且可以对磁盘存储按照组的方式进行命名、管理和分配,例如按照使用用途进行定义:“development”和“sales”,而不是使用物理磁盘名“sda”和“sdb”。而且当系统添加了新的磁盘,通过LVM管理员就不必将磁盘的 文件移动到新的磁盘上以充分利用新的存储空间,而是直接扩展文件系统跨越磁盘即可。
二,LVM基本术语
前面谈到,LVM是在磁盘分区和文件系统之间添加的一个逻辑层,来为文件系统屏蔽下层磁盘分区布局,提供一个抽象的盘卷,在盘卷上建立文件系统。首先我们讨论以下几个LVM术语:
物理存储介质(The physical media):这里指系统的存储设备:硬盘,如:/dev/hda1、/dev/sda等等,是存储系统最低层的存储单元。
物理卷(physical volume):物理卷就是指硬盘分区或从逻辑上与磁盘分区具有同样功能的设备(如RAID),是LVM的基本存储逻辑块,但和基本的物理存储介质(如分区、磁盘等)比较,却包含有与LVM相关的管理参数。
卷组(Volume Group):LVM卷组类似于非LVM系统中的物理硬盘,其由物理卷组成。可以在卷组上创建一个或多个“LVM分区”(逻辑卷),LVM卷组由一个或多个物理卷组成。
逻辑卷(logical volume):LVM的逻辑卷类似于非LVM系统中的硬盘分区,在逻辑卷之上可以建立文件系统(比如/home或者/usr等)。
PE(physical extent):每一个物理卷被划分为称为PE(Physical Extents)的基本单元,具有唯一编号的PE是可以被LVM寻址的最小单元。PE的大小是可配置的,默认为4MB。
LE(logical extent):逻辑卷也被划分为被称为LE(Logical Extents) 的可被寻址的基本单位。在同一个卷组中,LE的大小和PE是相同的,并且一一对应。
简单来说就是:
PV:是物理的磁盘分区
VG:LVM中的物理的磁盘分区,也就是PV,必须加入VG,可以将VG理解为一个仓库或者是几个大的硬盘。
LV:也就是从VG中划分的逻辑分区
三,创建和管理LVM
要创建一人上LVM系统,需要经过以下步骤
1,创建分区
使用分区工个(fdisk)创建LVM分区,方法和创建分区一样,需要将LVM的分区类型设置成8e,配置如下:
[root@evgoo ~]# fdisk /dev/sdb
Command (m for help): n #新建分区
Command action
e extended
p primary partition (1-4)
p #主分区
Partition number (1-4): 1 #第1个分区
First cylinder (1-15665, default 1): #默认起始块
Using default value 1
Last cylinder, +cylinders or +size{K,M,G} (1-15665, default 15665): +10G #设置大小为10GB
Command (m for help): n
Command action
e extended
p primary partition (1-4)
p
Partition number (1-4): 2
First cylinder (1307-15665, default 1307):
Using default value 1307
Last cylinder, +cylinders or +size{K,M,G} (1307-15665, default 15665): +10G
Command (m for help): n
Command action
e extended
p primary partition (1-4)
p
Partition number (1-4): 3
First cylinder (2613-15665, default 2613):
Using default value 2613
Last cylinder, +cylinders or +size{K,M,G} (2613-15665, default 15665): +3G
Command (m for help): t #设置分区类型
Partition number (1-4): 1 #第1个磁盘
Hex code (type L to list codes): 8e #类型为8e
Changed system type of partition 1 to 8e (Linux LVM)
Command (m for help): t
Partition number (1-4): 2
Hex code (type L to list codes): 8e
Changed system type of partition 2 to 8e (Linux LVM)
Command (m for help): t
Partition number (1-4): 3
Hex code (type L to list codes): 8e
Changed system type of partition 3 to 8e (Linux LVM)
Command (m for help): w #保存退出
[root@evgoo ~]# partx -a /dev/sdb #重新加载分区
[root@evgoo ~]# partx -a /dev/sdb #重新加载分区
[root@evgoo ~]# vgcreate myvg /dev/sdb2 #新创建一个vg, 名称叫myvg,使用sdb2磁盘
[root@evgoo ~]# vgcreate myvg /dev/sdb1 #新创建一个vg, 名称叫myvg,使用sdb1磁盘
[root@evgoo ~]# pvdisplay /dev/sdb1
[root@evgoo ~]# vgextend myvg /dev/sdb1 #作用sdb1 来扩展myvg磁盘,
Volume group "myvg" successfully extended
--- Volume group ---
VG Name myvg
System ID
Format lvm2
Metadata Areas 2
Metadata Sequence No 2
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 20.00 GiB
PE Size 4.00 MiB
Total PE 5120
Alloc PE / Size 0 / 0
Free PE / Size 5120 / 20.00 GiB
VG UUID UTRjCt-NUHy-kHV1-rVs9-f2ZK-XLMW-2Jr0fK
[root@evgoo ~]# pvmove /dev/sdb1 #将sdb1磁盘移除
No data to move for myvg
[root@evgoo ~]# vgreduce myvg /dev/sdb1 #从myvg里删除sdb1磁盘
Removed "/dev/sdb1" from volume group "myvg"
[root@evgoo ~]# vgdisplay #显示myvg的磁盘容量,只有10GB
--- Volume group ---
VG Name myvg
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 3
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 0
Open LV 0
Max PV 0
Cur PV 1
Act PV 1
VG Size 10.00 GiB
PE Size 4.00 MiB
Total PE 2560
Alloc PE / Size 0 / 0
Free PE / Size 2560 / 10.00 GiB
VG UUID UTRjCt-NUHy-kHV1-rVs9-f2ZK-XLMW-2Jr0fK
[root@evgoo ~]# lvcreate -L 2G -n mylv myvg #在vg里创建一个新的LV,磁盘添加2GB
Logical volume "mylv" created
[root@evgoo ~]# ls /dev/mapper/
control myvg-mylv
[root@evgoo ~]# mke2fs -t ext4 -b 1024 -L MYLV /dev/myvg/mylv #格式化mylv,类型为ext4, 块大小为1024
[root@evgoo ~]# mkdir /backup #新建文件夹为backup
[root@evgoo ~]# mount /dev/myvg/mylv /backup/ #挂载backup
[root@evgoo ~]# ls -l /backup/
总用量 12
drwx------ 2 root root 12288 8月 22 18:35 lost+found
[root@evgoo ~]# mount
/dev/sda2 on / type ext4 (rw)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
tmpfs on /dev/shm type tmpfs (rw)
/dev/sda1 on /boot type ext4 (rw)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
vmware-vmblock on /var/run/vmblock-fuse type fuse.vmware-vmblock (rw,nosuid,nodev,default_permissions,allow_other)
gvfs-fuse-daemon on /root/.gvfs type fuse.gvfs-fuse-daemon (rw,nosuid,nodev)
/dev/mapper/myvg-mylv on /backup type ext4 (rw)
[root@evgoo ~]# cd /backup/ #进入到backup文件夹
[root@evgoo backup]# cp /etc/issue /backup/ #拷贝文件到backup
[root@evgoo backup]# cp /etc/grub.conf /backup/ #拷贝文件到backup
[root@evgoo backup]# cd /backup/
[root@evgoo backup]# ll
总用量 14
-rw------- 1 root root 769 8月 22 18:40 grub.conf
-rw-r--r-- 1 root root 47 8月 22 18:40 issue
drwx------ 2 root root 12288 8月 22 18:35 lost+found
[root@evgoo backup]# cat issue #查看文件内容
CentOS release 6.5 (Final)
Kernel \r on an \m
[root@evgoo ~]# lvextend -L 3G /dev/myvg/mylv #扩展mylv大小为3G
Extending logical volume mylv to 3.00 GiB #显示已扩展到3GB
Logical volume mylv successfully resized
[root@evgoo ~]# df -lh #查看磁盘块大小,mylv显示仍为2GB
Filesystem Size Used Avail Use% Mounted on
/dev/sda2 18G 2.6G 15G 16% /
tmpfs 931M 80K 931M 1% /dev/shm
/dev/sda1 291M 39M 238M 14% /boot
/dev/mapper/myvg-mylv 2.0G 36M 1.9G 2% /backup
[root@evgoo ~]# umount /backup/ #卸载backup文件
[root@evgoo ~]# mount /dev/myvg/mylv /backup/ #在挂载backup文件
[root@evgoo ~]# df -lh #仍显示为2GB磁盘
Filesystem Size Used Avail Use% Mounted on
/dev/sda2 18G 2.6G 15G 16% /
tmpfs 931M 80K 931M 1% /dev/shm
/dev/sda1 291M 39M 238M 14% /boot
/dev/mapper/myvg-mylv 2.0G 36M 1.9G 2% /backup
[root@evgoo ~]# resize2fs /dev/myvg/mylv #重新定义mylv
[root@evgoo ~]# xfs_growfs /dev/myvg/mylv (centos7用这个命令)
[root@evgoo ~]# umount /dev/myvg/mylv #卸载mylv
[root@evgoo ~]# e2fsck -f /dev/myvg/mylv #检查mylv
e2fsck 1.41.12 (17-May-2010)
第一步: 检查inode,块,和大小
第二步: 检查目录结构
第3步: 检查目录连接性
Pass 4: Checking reference counts
第5步: 检查簇概要信息
MYLV: 13/196608 files (0.0% non-contiguous), 86150/3145728 blocks
[root@evgoo ~]# resize2fs /dev/myvg/mylv 2G #缩减逻辑卷为2GB
resize2fs 1.41.12 (17-May-2010)
Resizing the filesystem on /dev/myvg/mylv to 2097152 (1k) blocks.
The filesystem on /dev/myvg/mylv is now 2097152 blocks long.
[root@evgoo ~]# lvreduce -L 2G /dev/myvg/mylv #缩减LV卷为2GB
WARNING: Reducing active logical volume to 2.00 GiB
THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce mylv? [y/n]: y
Reducing logical volume mylv to 2.00 GiB
Logical volume mylv successfully resized
[root@evgoo ~]# mount /dev/myvg/mylv /backup/
[root@evgoo ~]# df -lh #容量已被缩减成2GB了
Filesystem Size Used Avail Use% Mounted on
/dev/sda2 18G 2.6G 15G 16% /
tmpfs 931M 80K 931M 1% /dev/shm
/dev/sda1 291M 39M 238M 14% /boot
/dev/mapper/myvg-mylv 2.0G 36M 1.9G 2% /backup
[root@evgoo ~]# cd /backup/ #进入backup文件
[root@evgoo backup]# cat issue #查看issue文件仍可以正常显示
CentOS release 6.5 (Final)
Kernel \r on an \m
[root@evgoo backup]# lvcreate -s -L 512M -n mylv-snap -p r /dev/myvg/mylv #创建一个快照,快照名为mylv-snap,大小 为512M,权限为只读
Logical volume "mylv-snap" created
[root@evgoo backup]# mount /dev/myvg/mylv-snap /mnt #将快照挂载至/mnt目录下
mount: block device /dev/mapper/myvg-mylv--snap is write-protected, mounting read-only
[root@evgoo backup]# cd /mnt/ #进入/mnt目录下
[root@evgoo mnt]# cat issue #可以正常查看文件
CentOS release 6.5 (Final)
Kernel \r on an \m
[root@evgoo mnt]# cp -a grub.conf issue /tmp #将/mnt目录拷贝到/tmp目录下
[root@evgoo mnt]# cd
[root@evgoo ~]# umount /mnt/ #卸载/mnt目录
[root@evgoo ~]# lvremove /dev/myvg/mylv-snap #移除快照
Do you really want to remove active logical volume mylv-snap? [y/n]: y
Logical volume "mylv-snap" successfully removed
[root@evgoo ~]# umount /backup/ #卸载backup目录
[root@evgoo ~]# lvremove /dev/myvg/mylv #移除lv
Do you really want to remove active logical volume mylv? [y/n]: y
Logical volume "mylv" successfully removed
[root@evgoo ~]# vgremove myvg #移除vg
Volume group "myvg" successfully removed
[root@evgoo ~]# vgs
No volume groups found
[root@evgoo ~]# pvremove /dev/sdb1 #移除PV
Labels on physical volume "/dev/sdb1" successfully wiped
[root@evgoo ~]# pvremove /dev/sdb2 #移除PV
Labels on physical volume "/dev/sdb2" successfully wiped