codecamp

7.2.1 部署逻辑卷

一般而言,在生产环境中无法精确地评估每个硬盘分区在日后的使用情况,因此会导致原先分配的硬盘分区不够用。比如,伴随着业务量的增加,用于存放交易记录的数据库目录的体积也随之增加;因为分析并记录用户的行为从而导致日志目录的体积不断变大,这些都会导致原有的硬盘分区在使用上捉襟见肘。而且,还存在对较大的硬盘分区进行精简缩容的情况。

我们可以通过部署LVM来解决上述问题。部署LVM时,需要逐个配置物理卷、卷组和逻辑卷。常用的部署命令如表7-2所示。

表7-2 常用的LVM部署命令

功能/命令 物理卷管理 卷组管理 逻辑卷管理
扫描 pvscan vgscan lvscan
建立 pvcreate vgcreate lvcreate
显示 pvdisplay vgdisplay lvdisplay
删除 pvremove vgremove lvremove
扩展 vgextend lvextend
缩小 vgreduce lvreduce

为了避免多个实验之间相互发生冲突,请大家自行将虚拟机还原到初始状态,并在虚拟机中添加两块新硬盘设备,然后开机,如图7-8所示。

在虚拟机中添加两块新硬盘设备的目的,是为了更好地演示LVM理念中用户无需关心底层物理硬盘设备的特性。我们先对这两块新硬盘进行创建物理卷的操作,可以将该操作简单理解成让硬盘设备支持LVM技术,或者理解成是把硬盘设备加入到LVM技术可用的硬件资源池中,然后对这两块硬盘进行卷组合并,卷组的名称可以由用户来自定义。接下来,根据需求把合并后的卷组切割出一个约为150MB的逻辑卷设备,最后把这个逻辑卷设备格式化成EXT4文件系统后挂载使用。在下文中,刘遄老师将对每一个步骤再作一些简单的描述。

第1步:让新添加的两块硬盘设备支持LVM技术。

    [root@linuxprobe ~]# pvcreate /dev/sdb /dev/sdc
     Physical volume "/dev/sdb" successfully created
     Physical volume "/dev/sdc" successfully created

图7-8 在虚拟机中添加两块新的硬盘设备

第2步:把两块硬盘设备加入到storage卷组中,然后查看卷组的状态。

    [root@linuxprobe ~]# vgcreate storage /dev/sdb /dev/sdc
     Volume group "storage" successfully created
    [root@linuxprobe ~]# vgdisplay
    --- Volume group ---
     VG Name storage
     System ID 
     Format lvm2
     Metadata Areas 2
     Metadata Sequence No 1
     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 39.99 GiB
     PE Size 4.00 MiB
     Total PE 10238
     Alloc PE / Size 0 / 0  Free PE / Size 10238 / 39.99 GiB
     VG UUID KUeAMF-qMLh-XjQy-ArUo-LCQI-YF0o-pScxm1
    ………………省略部分输出信息………………

第3步:切割出一个约为150MB的逻辑卷设备。

这里需要注意切割单位的问题。在对逻辑卷进行切割时有两种计量单位。第一种是以容量为单位,所使用的参数为-L。例如,使用-L 150M生成一个大小为150MB的逻辑卷。另外一种是以基本单元的个数为单位,所使用的参数为-l。每个基本单元的大小默认为4MB。例如,使用-l 37可以生成一个大小为37×4MB=148MB的逻辑卷。

    [root@linuxprobe ~]# lvcreate -n vo -l 37 storage
     Logical volume "vo" created
    [root@linuxprobe ~]# lvdisplay 
     --- Logical volume ---
     LV Path /dev/storage/vo
     LV Name vo
     VG Name storage
     LV UUID D09HYI-BHBl-iXGr-X2n4-HEzo-FAQH-HRcM2I
     LV Write Access read/write
     LV Creation host, time localhost.localdomain, 2017-02-01 01:22:54 -0500
     LV Status available
     # open 0
     LV Size 148.00 MiB
     Current LE 37
     Segments 1
     Allocation inherit
     Read ahead sectors auto
     - currently set to 8192
     Block device 253:2
    ………………省略部分输出信息………………

第4步:把生成好的逻辑卷进行格式化,然后挂载使用。

Linux系统会把LVM中的逻辑卷设备存放在/dev设备目录中(实际上是做了一个符号链接),同时会以卷组的名称来建立一个目录,其中保存了逻辑卷的设备映射文件(即/dev/卷组名称/逻辑卷名称)。

    [root@linuxprobe ~]# mkfs.ext4 /dev/storage/vo 
    mke2fs 1.42.9 (28-Dec-2013)
    Filesystem label=
    OS type: Linux
    Block size=1024 (log=0)
    Fragment size=1024 (log=0)
    Stride=0 blocks, Stripe width=0 blocks
    38000 inodes, 151552 blocks
    7577 blocks (5.00%) reserved for the super user
    First data block=1
    Maximum filesystem blocks=33816576
    19 block groups
    8192 blocks per group, 8192 fragments per group
    2000 inodes per group
    Superblock backups stored on blocks: 
     8193, 24577, 40961, 57345, 73729
    Allocating group tables: done 
    Writing inode tables: done 
    Creating journal (4096 blocks): done
    Writing superblocks and filesystem accounting information: done 
    [root@linuxprobe ~]# mkdir /linuxprobe
    [root@linuxprobe ~]# mount /dev/storage/vo /linuxprobe

第5步:查看挂载状态,并写入到配置文件,使其永久生效。

    [root@linuxprobe ~]# df -h
     Filesystem Size Used Avail Use% Mounted on
     /dev/mapper/rhel-root 18G 3.0G 15G 17% /
     devtmpfs 905M 0 905M 0% /dev
     tmpfs 914M 140K 914M 1% /dev/shm
     tmpfs 914M 8.8M 905M 1% /run
     tmpfs 914M 0 914M 0% /sys/fs/cgroup
     /dev/sr0 3.5G 3.5G 0 100% /media/cdrom
     /dev/sda1 497M 119M 379M 24% /boot
     /dev/mapper/storage-vo 145M 7.6M 138M 6% /linuxprobe
     [root@linuxprobe ~]# echo "/dev/storage/vo /linuxprobe ext4 defaults 0 0" >> /etc/fstab
7.2 LVM逻辑卷管理器
7.2.2 扩容逻辑卷
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }