Linux lvm使用

date: 2013.06.28; modification:2017.04.12

目录:

1 基本框架

+-----------------------------------------------------+
|           LV_1           |           LV_2           |  # 逻辑卷(可以在其上建立文件系统)
+-----------------------------------------------------+
|                        VG_1                         |  # 抽象出来的卷组(可以想象为一个抽象的逻辑硬盘)
+-----------------+-----------------+-----------------+
| PV_1(/dev/sda1) | PV_2(/dev/sda2) | PV_3(/dev/sdax) |  # 底层的物理分区
+-----------------+-----------------+-----------------+

2 安装工具

sudo apt-get install lvm2

3 使用

  1. 先创建物理分区:

    sudo fdisk /dev/sd硬盘名 # 硬盘名为a/b/c等, 不带1,2,3等数字
    
    进入fdisk后(可以先用m命令打印帮助信息, 用p打印当前分区信息):
    
    1. 用n命令, 创建新分区.
    2. 用t命令, 修改分区类型, 然后输入8e, 即Linux LVM.
    3. 用w命令, 保存并退出.
  2. 首先创建一个物理卷(PV):

    sudo pvcreate /dev/sdb1
    sudo pvscan # 可以查看结果
  3. 然后在此物理卷上创建一个逻辑卷组(LVG):

    sudo vgcreate vg名称 /dev/sdx1   # 其中x为硬盘名, 1为分区编号.
    扩容: sudo vgextend [vg名称] [pv4]
    显示: sudo vgdisplay
  4. 最后在卷组上划分逻辑卷(LV):

    sudo lvcreate -L 20G -n lv名称 vg名称
    或者按照百分比:
    sudo lvcreate -l 100%FREE -n lv名称 vg名称
  5. 这个逻辑卷: "lv名称", 就可以用mkfs来创建文件系统(设备为/dev/mapper/vg名称-lv名称), 然后挂载使用使用了. 如果想用UUID来挂载, 可以用sudo blkid命令查看.

其实lvm相关的指令很简单, 就pv, vg, lv 三个层级, 加上create, remove, extend, reduce, scan, display几个动作, 再多个lvresize而已, 动手试看看, 一下就上手了.

而且, LVM 在空间扩充上的优点, 也保留了日后需要时, 可以依需求增减系统空间, 不需要重新安装系统.

4 扩容

  1. 按照上述方法创建pv.

  2. 将pv加入到需要扩展的vg.

    vgextend vg名称 新pv名称

  3. 扩展lv

    lvextend -L +5G /dev/mapper/VolGroup-lv_root 或: lvextend -l +30%FREE /dev/mapper/VolGroup-lv_root

    注意: 上面两个命令参数中的加号, 代表再原有空间大小上新增这么多, 如果不带加号, 则代表用参数指定的大小, 代替原有的大小, 如果指定的比原本的小, 则会失败.

    此时, 如果有df命令查看的话, 会发现root空间并没有增加的. 还需要执行以下操作才可以.

  4. 重新定义分区大小

    resize2fs /dev/mapper/VolGroup-lv_root

5 缩减容量

  1. 删除lv. 不能直接用lv的名称删除, 而是应该用:

    lvremove /dev/VolGroup/lv_test # VolGroup是vg的名称

  2. 从vg中将pv移除.

    vgreduce -v VolGroup /dev/hdd2 # hdd2是lv_test所在的pv

如果提示: Removed "/dev/vda3" from volume group "VolGroup", 则成功.

  1. 删除pv.

    pvremove /dev/hdd2

6 Other tips

6.1 查看UUID

方法1:

sudo blkid

方法2:

ls -l /dev/disk/by-uuid