LVM是什么?为什么要使用LVM?
LVM(Logical Volume Manager):逻辑卷管理, 在日常使用或生产环境中, 我们可能会因为在规划存储时未考虑到未来数据增长的速度超乎我们的预计而措手不及,因为增加一块硬盘再将源数据移到新硬盘上很麻烦并且提高了成本还浪费硬盘空间。
在1998年有人在开发了一个基于卷的管理方式, 在HP-UX中使用,这就是LVM,LVM可以无损扩容、缩减空间来达到应对硬盘空间不足的情况。
LVM相关原理
LVM通过内核中的dm(device mapper)模块实现使用纯软件的方式将一个或多个底层硬件设备组织成一个或多个逻辑设备。
相关术语:
PV:Physical Volume #一般是物理分区 /dev/sd##…
VG:Volume Group #由多个PE组成,创建卷组时可指定PE大小
PE:Physical Extent #默认大小为4M,LVM中的最小单元
LV:Logical Volume #由多个PE组成
LE:Logical Extent #在LV中的PE称作LE
LVM通过PV组成PV池,基于PV创建VG,VG由若干个PE组成,在VG中由多个PE组成LV,在LV中PE叫做LE。
原理图:
此图转自维基百科
实战:创建、扩容、缩减、快照
系统环境
当前系统分区信息,当前系统有2块新硬盘,分别为20G [root@server2 ~]# fdisk -l Disk /dev/sda: 21.5 GB, 21474836480 bytes 255 heads, 63 sectors/track, 2610 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x0002777c Device Boot Start End Blocks Id System /dev/sda1 * 1 26 208813+ 83 Linux /dev/sda2 27 1985 15735667+ 83 Linux /dev/sda3 1986 2247 2104515 82 Linux swap / Solaris Disk /dev/sdb: 21.5 GB, 21474836480 bytes 255 heads, 63 sectors/track, 2610 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0xdee177d5 Device Boot Start End Blocks Id System Disk /dev/sdc: 21.5 GB, 21474836480 bytes 255 heads, 63 sectors/track, 2610 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x00000000
LVM相关命令解释
vg管理工具: vgs #查看vg简要信息 vgdisplay #查看vg详细信息 vgcreate [-s #[kKmMgGtTpPeE]] VolumeGroupName PhysicalDevicePath [PhysicalDevicePath...] #创建vg vgextend VolumeGroupName PhysicalDevicePath [PhysicalDevicePath...] #扩展vg容量 vgreduce VolumeGroupName PhysicalDevicePath [PhysicalDevicePath...] #缩减vg容量 vgremove VolumeGroupName #删除vg lv管理工具: lvs #查看lv简要信息 lvdisplay #查看lv详细信息 lvcreate -L #[mMgGtT] -n NAME VolumeGroup #创建lv lvremove /dev/VG_NAME/LV_NAME #删除lv 扩展逻辑卷: lvextend -L [+]#[mMgGtT] /dev/VG_NAME/LV_NAME #扩展逻辑卷 resize2fs /dev/VG_NAME/LV_NAME #重新定义文件系统大小 缩减逻辑卷: umount /dev/VG_NAME/LV_NAME #卸载lv e2fsck -f /dev/VG_NAME/LV_NAME #检查lv resize2fs /dev/VG_NAME/LV_NAME #[mMgGtT] #重新定义lv大小 lvreduce -L [-] [mMgGtT] /dev/VG_NAME/LV_NAME #缩减lv
LVM创建
[root@server2 ~]# pvcreate /dev/sdb #将sdb硬盘添加到PV池中 Physical volume "/dev/sdb" successfully created [root@server2 ~]# pvcreate /dev/sdc #将sdc硬盘添加到PV池中 Physical volume "/dev/sdc" successfully created [root@server2 ~]# pvs #查看PV池 PV VG Fmt Attr PSize PFree /dev/sdb lvm2 --- 20.00g 20.00g /dev/sdc lvm2 --- 20.00g 20.00g [root@server2 ~]# vgcreate myvg /dev/sdb #创建名称为myvg的卷组,由/dev/sdb提供PE Volume group "myvg" successfully created #提示vg创建成功 [root@server2 ~]# vgs #查看vg简要信息 VG #PV #LV #SN Attr VSize VFree myvg 1 1 0 wz--n- 20.00g 10.00g [root@server2 ~]# lvcreate -L 10G -n mylv myvg #在myvg下创建容量为10G、名称为mylv的lv Logical volume "mylv" created. [root@server2 ~]# lvs #查看lv简要信息 LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert mylv myvg -wi-a----- 10.00g [root@server2 ~]# mkfs.ext4 /dev/mapper/myvg-mylv #格式化lv为ext4文件系统 mke2fs 1.41.12 (17-May-2010) Filesystem label= OS type: Linux Block size=4096 (log=2) Fragment size=4096 (log=2) Stride=0 blocks, Stripe width=0 blocks 655360 inodes, 2621440 blocks 131072 blocks (5.00%) reserved for the super user First data block=0 Maximum filesystem blocks=2684354560 80 block groups 32768 blocks per group, 32768 fragments per group 8192 inodes per group Superblock backups stored on blocks: 32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632 Writing inode tables: done Creating journal (32768 blocks): done Writing superblocks and filesystem accounting information: done This filesystem will be automatically checked every 30 mounts or 180 days, whichever comes first. Use tune2fs -c or -i to override. [root@server2 ~]# mount /dev/mapper/myvg-mylv /mnt/ #将mylv挂载到/mnt下 [root@server2 ~]# df -lh #查看mylv分区使用情况 Filesystem Size Used Avail Use% Mounted on /dev/sda2 15G 3.4G 11G 25% / tmpfs 491M 0 491M 0% /dev/shm /dev/sda1 194M 36M 148M 20% /boot /dev/mapper/myvg-mylv 9.8G 23M 9.2G 1% /mnt
LVM扩展
我们现在想将mylv扩展到30G该如何操作?
应该先将myvg扩展到30G以上,在将mylv扩展到30G
操作过程
[root@server2 ~]# vgextend myvg /dev/sdc #扩展myvg,将sdc的空间也提供给myvg Volume group "myvg" successfully extended [root@server2 ~]# vgs #查看vg当前信息,myvg大小为40G VG #PV #LV #SN Attr VSize VFree myvg 2 1 0 wz--n- 39.99g 29.99g [root@server2 ~]# umount /mnt/ #卸载mylv [root@server2 ~]# lvextend -L 30G /dev/myvg/mylv #扩展lv到30G Size of logical volume myvg/mylv changed from 10.00 GiB (2560 extents) to 30.00 GiB (7680 extents). Logical volume mylv successfully resized [root@server2 ~]# lvs #查看当前lv信息,mylv为30G LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert mylv myvg -wi-a----- 30.00g [root@server2 ~]# mount /dev/mapper/myvg-mylv /mnt/ #挂载mylv到/mnt目录 [root@server2 ~]# df ##注意:这里显示mylv大小只有10G,这是因为我们没有进行重新定义 Filesystem 1K-blocks Used Available Use% Mounted on /dev/sda2 15357672 3527844 11043048 25% / tmpfs 502384 0 502384 0% /dev/shm /dev/sda1 198123 36589 151094 20% /boot /dev/mapper/myvg-mylv 10190136 23028 9642820 1% /mnt [root@server2 ~]# df -lh Filesystem Size Used Avail Use% Mounted on /dev/sda2 15G 3.4G 11G 25% / tmpfs 491M 0 491M 0% /dev/shm /dev/sda1 194M 36M 148M 20% /boot /dev/mapper/myvg-mylv 9.8G 23M 9.2G 1% /mnt [root@server2 ~]# resize2fs /dev/mapper/myvg-mylv #使用resize2fs可以重新定义分区的大小 resize2fs 1.41.12 (17-May-2010) Filesystem at /dev/mapper/myvg-mylv is mounted on /mnt; on-line resizing required old desc_blocks = 1, new_desc_blocks = 2 Performing an on-line resize of /dev/mapper/myvg-mylv to 7864320 (4k) blocks. The filesystem on /dev/mapper/myvg-mylv is now 7864320 blocks long. [root@server2 ~]# df -lh #现在mylv大小终于恢复正常了 Filesystem Size Used Avail Use% Mounted on /dev/sda2 15G 3.4G 11G 25% / tmpfs 491M 0 491M 0% /dev/shm /dev/sda1 194M 36M 148M 20% /boot /dev/mapper/myvg-mylv 30G 28M 28G 1% /mnt
LVM缩减
缩减mylv到10G
操作过程
[root@server2 ~]# umount /mnt/ #先卸载挂载目录 [root@server2 ~]# resize2fs /dev/mapper/myvg-mylv 8G resize2fs 1.41.12 (17-May-2010) Please run 'e2fsck -f /dev/mapper/myvg-mylv' first. #提示需先使用e2fsck命令检查文件系统 [root@server2 ~]# e2fsck -f /dev/mapper/myvg-mylv #检查mylv文件系统 e2fsck 1.41.12 (17-May-2010) 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/mapper/myvg-mylv: 11/1966080 files (0.0% non-contiguous), 167409/7864320 blocks [root@server2 ~]# resize2fs /dev/mapper/myvg-mylv 8G #使用resize2fs命令重新定义mylv分区大小 resize2fs 1.41.12 (17-May-2010) Resizing the filesystem on /dev/mapper/myvg-mylv to 2097152 (4k) blocks. The filesystem on /dev/mapper/myvg-mylv is now 2097152 blocks long. [root@server2 ~]# lvreduce -L 8G /dev/myvg/mylv #将mylv大小缩减成8G WARNING: Reducing active logical volume to 8.00 GiB THIS MAY DESTROY YOUR DATA (filesystem etc.) Do you really want to reduce mylv? [y/n]: y Size of logical volume myvg/mylv changed from 30.00 GiB (7680 extents) to 8.00 GiB (2048 extents). Logical volume mylv successfully resized [root@server2 ~]# lvs #查看mylv信息 LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert mylv myvg -wi-ao---- 8.00g [root@server2 ~]# mount /dev/mapper/myvg-mylv /mnt/ 重新挂载 [root@server2 ~]# df -lh #查看分区大小 Filesystem Size Used Avail Use% Mounted on /dev/sda2 15G 3.4G 11G 25% / tmpfs 491M 0 491M 0% /dev/shm /dev/sda1 194M 36M 148M 20% /boot /dev/mapper/myvg-mylv 7.8G 36M 7.4G 1% /mnt
LVM快照创建
LVM快照简单来说就是将所快照源分区一个时间点所有文件的元数据进行保存,如果源文件没有改变,那么访问快照卷的相应文件则直接指向源分区的源文件,如果源文件发生改变,则快照卷中与之对应的文件不会发生改变。快照卷主要用于辅助备份文件。 这里只简单介绍,点击查看详细介绍
操作过程
[root@server2 mnt]# df Filesystem 1K-blocks Used Available Use% Mounted on /dev/sda2 15357672 3527924 11042968 25% / tmpfs 502384 0 502384 0% /dev/shm /dev/sda1 198123 36589 151094 20% /boot /dev/mapper/myvg-mylv 8125880 36852 7669600 1% /mnt [root@server2 mnt]# pwd #当前在mylv的分区中 /mnt [root@server2 mnt]# cp -rf /etc/{grub.conf,sysconfig} ./ #复制/etc/sysconfig,/etc/grub.conf到当前目录(mylv中) [root@server2 mnt]# ls #查看当前分区中的文件 grub.conf lost+found sysconfig [root@server2 mnt]# lvcreate -s -n mylv-snap -L 8G /dev/myvg/mylv #创建mylv的快照卷mylv-snap Logical volume "mylv-snap" created. [root@server2 mnt]# lvs #查看lv的信息,出现了mylv-snap LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert mylv myvg owi-aos--- 8.00g mylv-snap myvg swi-a-s--- 8.00g mylv 0.00 [root@server2 mnt]# mkdir /mylv-snap #创建mylv-snap目录 [root@server2 mnt]# mount /dev/myvg/mylv-snap /mylv-snap/ #将mylv-snap挂载到/mylv-snap [root@server2 mnt]# ll /mylv-snap/ #查看分区中的文件,和/mnt下一样 total 20 lrwxrwxrwx. 1 root root 22 Jan 4 16:01 grub.conf -> ../boot/grub/grub.conf drwx------. 2 root root 16384 Jan 4 15:44 lost+found drwxr-xr-x. 7 root root 4096 Jan 4 16:02 sysconfig [root@server2 mnt]# cp /etc/rc.d/init.d/functions ./ #复制/etc/rc.d/init.d/functions到/mnt目录中 [root@server2 mnt]# ls #查看当前目录(/mnt,即是mylv)中的文件 functions grub.conf lost+found sysconfig [root@server2 mnt]# ll /mylv-snap/ #查看/mylv-snap(即是mylv-snap)中的文件,发现并没有functions total 20 lrwxrwxrwx. 1 root root 22 Jan 4 16:01 grub.conf -> ../boot/grub/grub.conf drwx------. 2 root root 16384 Jan 4 15:44 lost+found drwxr-xr-x. 7 root root 4096 Jan 4 16:02 sysconfig
总结
LVM虽然很好用,但是因为在硬件上使用纯软件方式进行管理,所以误删除数据恢复更加困难,LVM缩减分区大小风险较大,况且现在btrfs已经很稳定了,功能更加强大,并不推荐使用LVM对磁盘分区进行管理。
原创文章,作者:Net18-AnyISalIn,如若转载,请注明出处:http://www.178linux.com/12339
评论列表(2条)
16岁文章已经写成这样,让我等汗颜呀~
@stanley:过奖,时间多而已。