zoukankan      html  css  js  c++  java
  • LVM逻辑卷理论及配置

    LVM的概念
    LVM 是 Logical Volume Manager 的简称,译为中文就是逻辑卷管理。它是 Linux 系统对磁盘分区的一种管理机制。
    LVM 是在硬盘分区之上建立一个逻辑层,这个逻辑层让多个硬盘或分区看起来像一块逻辑硬盘,然后将这块逻辑硬盘分成逻辑卷之后使用,从而大大提高了分区的灵活性。我们把真实的物理硬盘或分区称作物理卷(PV);由多个物理卷组成一块大的逻辑硬盘,叫作卷组(VG);将卷组划分成多个可以使用的分区,叫作逻辑卷(LV)。而在 LVM 中最小的存储单位不再是 block,而是物理扩展块(Physical Extend,PE)。我们通过图 1 看看这些概念之间的联系。
    • 物理卷(Physical Volume,PV):就是真正的物理硬盘或分区
    • 卷组(Volume Group,VG):将多个物理卷合起来就组成了卷组。组成同一个卷组的物理卷可以是同一块硬盘的不同分区,也可以是不同硬盘上的不同分区。我们可以把卷组想象为一块逻辑硬盘。
    • 逻辑卷(Logical Volume,LV):卷组是一块逻辑硬盘,硬盘必领分区之后才能使用,我们把这个分区称作逻辑卷。逻辑卷可以被格式化和写入数据。我们可以把逻辑卷想象为分区。
    • 物理扩展(Physical Extend,PE):PE 是用来保存数据的最小单元,我们的数据实际上都是写入 PE 当中的。PE 的大小是可以配置的,默认是 4MB
    建立 LVM 的步骤:
    1. 把物理硬盘分成分区,当然也可以是整块物理硬盘;
    2. 把物理分区建立为物理卷(PV),也可以直接把整块硬盘都建立为物理卷。
    3. 把物理卷整合为卷组(VG)。卷组就已经可以动态地调整大小了,可以把物理分区加入卷组,也可以把物理分区从卷组中删除。
    4. 把卷组再划分为逻辑卷(LV),当然逻辑卷也是可以直接调整大小的。我们说逻辑卷可以想象为分区,所以也需要格式化和挂载。
    硬盘分区
    首先建立所需的物理分区,创建方式就是使用 fdisk 交互命令。需要注意的是,分区的系统 ID 不再是 Linux 默认的分区 ID 83,而要改成 LVM 的 ID 8e。在 /dev/sdb 硬盘中还有空闲空间,在这块硬盘中新建立 3 个分区,每 个分区的大小为 1GB。命令如下:
    [root@localhost ~]# fdisk /dev/sdb #建立分区的命令省略
    Command {m for help): p
    ………………
    #建立了/dev/sdb5 ~ 7三个分区
    Command (m for help): t
    Partition number (1-7): 5
    Hex code (type L to list codes): 8e
    Changed system type of partition 5 to 8e (Linux LVM)
    #把/dev/sdb5的分区ID改为8e,其他两个分区照做,改好后,查询结果如下:
    Command (m for help): p //查看结果
    Command (m for help): w //一定记得保存退出
    [root@localhost ~]# partprobe #记得重新读取分区表,否则重启系统
    建立物理卷
    建立物理卷的命令如下:
    [root@localhost ~]# pvcreate [设备文件名]
    [root@localhost ~]# pvcreate /dev/sdb
    在我们的使用中要把分区建立成物理卷,所以执行以下命令:
    [root@localhost ~]# pvcreate /dev/sdb5
    Writing physical volume data to disk "/dev/sdb5" Physical volume "/dev/sdb5" successfully created
    查看物理卷
    查看物理卷的命令有两个,第一个是 pvscan,用来查询系统中哪些硬盘或分区是物理卷。命令如下:
    [root@localhost ~]# pvscan
    PV /dev/sdb5 Ivm2 [1.01 GiB]
    PV /dev/sdb6 Ivm2 [1.01 GiB]
    PV /dev/sdb7 Ivm2 [1.01 GiB]
    Total: 3 [3.03 GiB] /in no VG: 0 [0 ] / in no VG: 3 [3.03 GiB]
    可以看到,在我们的系统中,/dev/sdb5~7 这三个分区是物理卷。最后一行的意思是:共有 3 个物理卷[大小]/使用了 0 个卷[大小]/空闲 3 个卷[大小]。
    第二个查询命令是 pvdisplay,它可以查看到更详细的物理卷状态,命令如下:
    [root@localhost ~]# pvdisplay
    "/dev/sdb5" is a new physical volume of "1.01 GiB"
    —NEW Physical volume 一
    PV Name /dev/sdb5
    #PV名
    VG Name
    #属于的VG名,还没有分配,所以空白
    PV Size 1.01 GiB
    #PV 的大小
    Allocatable NO
    #是否已经分配
    PE Size 0
    #PE大小,因为还没有分配,所以PE大小也没有指定
    Total PE 0
    #PE总数
    Free PE 0
    #空闲 PE数
    Allocated PE 0
    #可分配的PE数
    PV UUID CEsVz3-t0sD-e1w0-wkHZ-iaLq-06aV-xtQNTB
    #PV的UUID
    …其它两个PV省略…
    删除物理卷
    如果不再需要物理卷,则使用 pvremove 命令删除,命令如下:
    [root@localhost ~]# pvremove /dev/sdb7
    Labels on physical volume "/dev/sdb7" successfully wiped
    删除物理卷时,物理卷必须不属于任何卷组,也就是需要先将物理卷从卷组中删除,再删除物理卷。其实所有的删除就是把创建过程反过来,建立时不能少某个步骤,删除时也同样不能跳过某一步直接删除。
    建立卷组
    [root@localhost ~]# vgcreate [选项] 卷组名 物理卷名
    选项:
    • -s PE 大小:指定 PE 的大小,单位可以是 MB、GB、TB 等。如果不写,则默认 PE 大小是 4MB;
    [root@localhost ~]# vgcreate -s 8MB scvg/dev/sdb5 /dev/sdb6
    Volume group "scvg" successfully created
    我们把/dev/sdb和/dev/sdb6两个物理卷加入了卷组scvg,并指定了PE的大小是8MB
    查看卷组
    查看卷组的命令同样有两个:vgscan 命令主要用于査看系统中是否有卷组;而 vgdisplay 命令则用于査看卷组的详细状态。命令如下:
    [root@1ocalhost ~]# vgscan
    Reading all physical volumes. This may take a while...
    Found volume group "scvg" using metadata type lvm2 #scvg卷组确实存在
    [root@localhost ~]# vgdisplay
    ---Volume group ---
    VG Name scvg 卷组名
    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 2.02 GiB
    #卷组大小
    PE Size 8.00 MiB
    #PE大小
    Total PE 258
    #PE总数
    Alloc PE / Size 0/0
    #已用 PE 数量/大小
    Free PE / Size 258 / 2.02GiB
    #空闲PE数量/大小
    VG UUID Fs0dPf-LV7H-0Ir3-rthA-3UxC-LX5c-FLFriJ
    增加卷组容量
    我们现在要把 /dev/sdb7 加入卷组,使用的命令是 vgextend。命令如下:
    [root@localhost ~]# vgextend scvg /dev/sdb7
    Volume group "scvg" successfully extended
    #把/dev/sdb7物理卷也加入scvg卷组
    [root@localhost ~]# vgdisplay
    ---Volume group ---
    VG Name scvg
    System ID
    Format lvm2
    Metadata Areas 3
    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 3
    Act PV 3
    VG Size 3.02 GiB
    #卷组容量增加
    PE Size 8.00 MiB
    Total PE 387
    #PE 总数增加
    Alloc PE / Size 0/0
    Free PE / Size 387 / 3.02 GiB
    VG UUID Fs0dPf-LV7H-0Ir3-rthA-3UxC-LX5c-FLFriJ
    减少卷组容量
    使用 vgreduce 命令在卷组中删除物理卷。命令如下:
    [root@localhost ~]# vgreduce scvg /dev/sdb7
    Removed "/dev/sdb7" from volume group "scvg"
    #在卷组中删除/dev/sdb7物理卷
    [root@localhost ~]# vgreduce -a
    #删除所有未使用的物理卷
    删除卷组
    删除卷组的命令是 vgremove。命令如下:
    [root@localhost ~]# vgremove scvg
    Volume group "scvg" successfully removed
    只有在删除卷组之后,才能删除物理卷。还要注意的是,scvg 卷组中还没有添加任何逻辑卷,如果拥有了逻辑卷,则记得先删除逻再删除卷组。再次强调,删除就是安装的反过程,每一步都不能跳过。
    建立逻辑卷
    我们现在已经建立了 3GB 大小的卷组 scvg,接下来需要在卷组中建立逻辑卷。命令格式如下:
    [root@localhost ~]# lvcreate [选项] [-n 逻辑卷名] 卷组名
    选项:
    • -L 容量:指定逻辑卷大小,单位为 MB、GB、TB 等;
    • -l 个数:按照 PE 个数指定逻辑卷大小,这个参数需要换算容量,太麻烦;
    • -n 逻辑卷名:指定逻辑卷名;
    我们建立一个 1.5GB 大小的 lamplv 逻辑卷,命令如下:
    [root@localhost ~]# lvcreate -L 1.5G -n lamplv scvg
    Logical volume "lamplv" created
    #在scvg卷组中建立一个1.5GB大小的lamplv逻辑卷
    建立完逻辑卷,还要在格式化和挂载之后才能正常使用。格式化和挂载命令与操作普通分区时是一样的,不过需要注意的是,逻辑卷的设备文件名是"/dev/卷组名/逻辑卷名",如逻辑卷 lamplv 的设备文件名就是"/dev/scvg/lamplv"。具体命令如下:
    [root@localhost ~]# mkfs -t ext4 /dev/scvg/lamplv
    #格式化
    [root@localhost ~]# mkdir /disklvm
    [root@localhost ~]# mount /dev/scvg/lamplv /disklvm/
    #建立挂载点,并挂载
    [root@localhost ~]# mount
    …省略部分输出…
    /dev/mapper/scvg-lamplv on /disklvm type ext4(rw)
    #已经挂载了
    当然,如果需要开机后自动挂载,则要修改 /etc/fstab 文件。
    # /etc/fstab
    # Created by anaconda on Fri Mar 29 23:29:08 2019
    #
    # Accessible filesystems, by reference, are maintained under '/dev/disk'
    # See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
    #
    /dev/mapper/centos-root / xfs defaults 0 0
    UUID=d300a7c9-92a5-4e90-8001-970adab0c62e /boot xfs defaults 0 0
    /dev/mapper/centos-swap swap swap defaults 0 0
    /dev/mapper/mysqldata-mysql /mysqldata ext4 defaults 0 0
    查看逻辑卷
    查看命令同样有两个,第一个命令 lvscan 只能看到系统中是否拥有逻辑卷,命令如下:
    [root@localhost ~]# lvscan
    ACTIVE '/dev/scvg/lamplv' [1.50 GiB] inherit
    #能够看到激活的逻辑卷,大小是1.5GB
    第二个命令 lvdisplay 可以看到逻辑卷的详细信息,命令如下:
    [root@localhost ~]# lvdisplay
    ---Logical volume---
    LV Path /dev/scvg/lamplv
    逻辑卷的设备文件名
    LV Name lamplv
    #逻辑卷名
    VG Name scvg
    #所属的卷组名
    LV UUID 2kyKmn-Nupd-CldB-8ngY-NsI3-b8hV-QeUuna
    LV Write Access read/write
    LV Creation host, time localhost, 2013-04-18 03:36:39 +0800
    LV Status available
    # open 1
    LV Size 1.50 GiB
    #逻辑卷大小
    Current LE 192
    Segments 2
    Allocation inherit
    Read ahead sectors auto
    -currently set to 256
    Block device 253:0
    调整逻辑卷大小
    我们可以使用 lvresize 命令调整逻辑卷的大小,不过我们一般不推荐减少逻辑卷的空间,因为这非常容易导致逻辑卷中的文件系统的数据丟失。所以,除非我们已经备份了逻辑卷中的数据,否则不要减少逻辑卷的空间。
    lvresize 命令格式如下:
    [root@localhost ~]# lvresize [选项] 逻辑卷的设备文件名
    选项:
    • -L 容量:安装容量调整大小,单位为 KB、GB、TB 等。使用 + 増加空间,- 代表减少空间。如果直接写容量,则代表设定逻辑卷大小为指定大小;
    • -l 个数:按照 PE 个数调整逻辑卷大小;
    [root@luohuiwei ~]# lvresize -L +100M /dev/vgdata/lvdata //增加容量
    Size of logical volume vgdata/lvdata changed from 4.00 GiB (1024 extents) to <4.10 GiB (1049 extents).
    Logical volume vgdata/lvdata successfully resized.
    [root@luohuiwei ~]# df -H
    Filesystem Size Used Avail Use% Mounted on
    /dev/mapper/centos-root 19G 5.8G 13G 32% /
    devtmpfs 503M 0 503M 0% /dev
    tmpfs 520M 0 520M 0% /dev/shm
    tmpfs 520M 7.9M 512M 2% /run
    tmpfs 520M 0 520M 0% /sys/fs/cgroup
    /dev/sda1 1.1G 174M 890M 17% /boot
    /dev/mapper/vgdata-lvdata 4.2G 13M 4.0G 1% /data
    tmpfs 104M 0 104M 0% /run/user/0
    我们先在 /disklvm 分区中建立一些测试文件,一会儿调整完大小,再看看数据是否丟失了。
    [root@localhost ~]# cd /disklvm/
    [root@localhost disklvm]# touch testf
    [root@localhost disklvm]# mkdir testd
    [root@localhost disklvm]# ls
    lost+found testd testf
    lamplv 逻辑卷的大小是 1.5GB,而 scvg 卷组中还有 1.5GB 的空闲空间,那么增加 lamplv 逻辑卷的大小到 2.5GB。命令如下:
    [root@localhost disklvm]# lvresize -L 2.5G /dev/scvg/lamplv
    Extending logical volume lamplv to 2.50 GiB Logical volume lamplv successfully resized
    #增加lamplv逻辑卷的大小到2. 5GB,当然命令也可以这样写
    [roots localhost disklvm] # lvresize -L +1G /dev/scvg/lamplv
    [root@localhost disklvm]# lvdisplay
    ---Logical volume ---
    LV Path /dev/scvg/lamplv
    LV Name lamplv
    VG Name scvg
    LV UUID 2kyKmn-Nupd-CldB-8ngY-Ns13-b8hV-QeUuna
    LV Write Access read/write
    LV Creation host, time localhost, 2013-04-18 03:36:39 +0800 LV Status available
    # open 1
    LV Size 2.50 GiB
    #大小改变了
    Current LE 320
    Segments 3
    Allocation inherit
    Read ahead sectors auto
    -currently set to 256
    Block device 253:0
    逻辑卷的大小已经改变了,但是好像有如下一些问题:
    [root@localhost disklvm]# df -h /disklvm/
    文件系统 容量 已用 可用 已用% %挂载点
    /dev/mapper/scvg-lamplv 1.5G 35M 1.4G 3%/ disklvm
    怎么 /disklvm 分区的大小还是 1.5GB 啊?刚刚只是逻辑卷的大小改变了,如果要让分区使用这个新逻辑卷,则还要使用 resize2fs 命令来调整分区的大小不过这里就体现出了 LVM 的优势:我们不需要卸载分区,直接就能调整分区的大小。
    resize2fs命令的格式如下:
    [root@localhost ~]# resize2fs [选项] [设备文件名] [调整的大小]
    选项:
    • -f:强制调整;
    • 设备文件名:指定调整哪个分区的大小;
    • 调整的大小:指定把分区调整到多大,要加 M、G 等单位。如果不加大小,则会使用整个分区;
    • 使用 resize2fs或xfs_growfs 对挂载目录在线扩容 resize2fs 针对文件系统ext2 ext3 ext4 xfs_growfs 针对文件系统xfs
    我们已经把逻辑卷调整到 2.5GB,这时就需要把整个逻辑卷都加入 /disklvm 分区中,命令如下:
    [root@localhost ~]# resize2fs /dev/scvg/lamplv
    resize2fs 1.41.12(17-May-2010)
    Filesystem at /dev/scvg/lamplv is mounted on/ disklvm; on-line resizing required
    old desc_blocks = 1, new_desc_blocks = 1
    Performing an on-line resize of/dev/scvg/lamplv to 655360 (4k) blocks.
    The filesystem on /dev/scvg/lamplv is now 655360 blocks long.
    #已经调整了分区大小
    [root@localhost ~]# df -h /disklvm/
    文件系统 容量 已用 可用 已用% %挂载点
    /dev/mapper/scvg-lamplv 2.5G 35M 2.4G 2% /disklvm
    #分区大小已经是2.5GB 了
    [root@localhost ~]# ls /disklvm/
    lost+found testd testf
    #而且数据并没有丟失
    如果要减少逻辑卷的容量,则只需把增加步骤反过来再做一遍就可以了。不过我们并不推荐减少逻辑卷的容量,因为这有可能导致数据丟失。
    删除逻辑卷
    删除了逻辑卷,其中的数据就会丟失,所以要确定你真的需要删除这个逻辑卷。命令格式如下:
    [root@localhost ~]#lvremove 逻辑卷的设备文件名
    我们删除 lamplv 逻辑卷,记得在删除时要先卸载。 命令如下:
    [root@localhost ~]# umount /dev/scvg/lamplv
    [root@localhost ~]# Ivremove /dev/scvg/lamplv
    Do you really want to remove active logical volume lamplv? [y/n]: n
    #如果这里选择y,就会执行删除操作,逻辑卷内的所有数据都会被清空
    Logical volume lamplv not removed
  • 相关阅读:
    promise思考
    思考
    前端命名规范化
    location的属性
    underscore里面的debounce与throttle
    nginx使用
    js原形链
    JS中常遇到的浏览器兼容问题和解决方法
    用js刷题的一些坑
    从mixin到new和prototype:Javascript原型机制详解
  • 原文地址:https://www.cnblogs.com/--smile/p/11103432.html
Copyright © 2011-2022 走看看