LVM是 Logical Volume Manager(逻辑卷管理)的简写,LVM将一个或多个硬盘的分区在逻辑上集合,相当于一个大硬盘来使用,当硬盘的空间不够使用的时候,可以继续将其它的硬盘的分区加入其中,这样可以实现磁盘空间的动态管理,相对于普通的磁盘分区有很大的灵活性。
在目前的云服务器中,我们经常需要升级配置,比如硬盘什么的,windows比较方便,直接用diskpart工具下的extend命令就可以搞定,而linux如果用普通分区方式,就无法扩展分区了,比较不方面。由此,建议云服务器用户用lvm来创建分区。下面以centos6为例,讲讲如何创建lvm。
首先,登录系统,记录创建分区等操作,必须具备root权限!
先看看磁盘设备:
[root@cloud ~]# ls /dev/sd* /dev/sda /dev/sda1 /dev/sda2 /dev/sdb
我们发现了,系统盘在sda设备上,我们要操作的应该是sdb这个硬盘设备。
用fdisk分区
[root@cloud ~]# fdisk /dev/sdb
Command (m for help): n Command action e extended p primary partition (1-4) p Partition number (1-4): 1 First cylinder (1-8224, default 1): Using default value 1 Last cylinder, +cylinders or +size{K,M,G} (1-8224, default 8224): Using default value 8224
上面依次按n,p创建分区后,按t,选择类型为8e,也就是lvm类型,之后按w保存。再次查看
[root@cloud ~]# ls /dev/sd* /dev/sda /dev/sda1 /dev/sda2 /dev/sdb /dev/sdb1
发现多了个sdb1的分区,我们就在这个上面创建lvm。
[root@cloud ~]# pvcreate /dev/sdb1 Physical volume "/dev/sdb1" successfully created [root@cloud ~]# vgcreate vg0 /dev/sdb1 Volume group "vg0" successfully created [root@cloud ~]# lvcreate -L 30G -n lv0 vg0 Logical volume "lv0" created
上面的lvm,我们先创建了30g大小,如果不够,以后可以扩大逻辑卷的。格式化lvm:
[root@cloud ~]# mkfs.ext4 /dev/vg0/lv0
创建挂载目录/mnt/sdb,然后挂载:
[root@cloud ~]# blkid /dev/sdb1: UUID="a5i0dO-I1Cr-SScv-7M1n-6pNz-ucd2-a9o1eY" TYPE="LVM2_member" /dev/sda1: UUID="63f656e2-4a3c-4b34-a59e-13358830e87b" TYPE="ext4" /dev/sda2: UUID="dtK0fn-wMNW-wB8L-ueXq-H3Ad-cek9-5wCgac" TYPE="LVM2_member" /dev/mapper/vg_cloud-lv_root: UUID="b1b727fa-2e21-4399-8e63-d5565636c16b" TYPE="ext4" /dev/mapper/vg_cloud-lv_swap: UUID="9464fd57-de55-47d9-9015-80dab53800b1" TYPE="swap" /dev/mapper/vg0-lv0: UUID="f17c14b5-fb85-4624-8eee-d5a700f3047e" TYPE="ext4"
把我们要挂载卷的UUID=”f17c14b5-fb85-4624-8eee-d5a700f3047e”记下来,写入/etc/fstab,可以用vim编辑,也可以直接执行:
echo "UUID=f17c14b5-fb85-4624-8eee-d5a700f3047e /mnt/sdb ext4 defaults 0 0" >> /etc/fstab
执行mount -a挂载。此时逻辑卷应该已经挂载成功了,查看下:
[root@cloud ~]# mount /dev/mapper/vg_cloud-lv_root 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,rootcontext="system_u:object_r:tmpfs_t:s0") /dev/sda1 on /boot type ext4 (rw) none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw) sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw) /dev/mapper/vg0-lv0 on /mnt/sdb type ext4 (rw)
可以看到,已经挂载到/mnt/sdb上去了。
要扩大lvm大小,可以执行:
[root@cloud ~]# lvresize -L 35G /dev/vg0/lv0 Extending logical volume lv0 to 35.00 GiB Logical volume lv0 successfully resized [root@cloud ~]# resize2fs /dev/vg0/lv0 resize2fs 1.41.12 (17-May-2010) Filesystem at /dev/vg0/lv0 is mounted on /mnt/sdb; on-line resizing required old desc_blocks = 2, new_desc_blocks = 3 Performing an on-line resize of /dev/vg0/lv0 to 9175040 (4k) blocks. The filesystem on /dev/vg0/lv0 is now 9175040 blocks long.
查看大小:
[root@cloud ~]# df -lhT 文件系统 类型 容量 已用 可用 已用%% 挂载点 /dev/mapper/vg_cloud-lv_root ext4 7.5G 3.5G 3.7G 49% / tmpfs tmpfs 946M 72K 946M 1% /dev/shm /dev/sda1 ext4 485M 32M 428M 7% /boot /dev/mapper/vg0-lv0 ext4 35G 176M 33G 1% /mnt/sdb
可以看到,已经扩大到35G了。
要使用全部大小,可以用vgdisplay,显示vg的大小,之后按上述方案分配即可。
[root@cloud ~]# vgdisplay --- Volume group --- VG Name vg0 System ID Format lvm2 Metadata Areas 1 Metadata Sequence No 3 VG Access read/write VG Status resizable MAX LV 0 Cur LV 1 Open LV 1 Max PV 0 Cur PV 1 Act PV 1 VG Size 63.00 GiB PE Size 4.00 MiB Total PE 16127 Alloc PE / Size 8960 / 35.00 GiB Free PE / Size 7167 / 28.00 GiB VG UUID j0lzmj-7daQ-aTFv-EHdA-02px-dir6-xjP973
可以看到,vg0最大有63GiB大小,总PE数量为16127个。
有些客户,喜欢把系统根目录”/”的lvm和其他磁盘合并,这样做其实非常不科学和危险,一旦系统出问题,重装系统,lvm卷里的数据很难恢复,处理起来也非常麻烦,不推荐大家和根目录逻辑卷合并。