参考文献

LVM

  • LVM(Logical Volume Manager)逻辑卷管理是在Linux2.4内核以上实现的磁盘管理技术

相关名词解释

Physical Volume(PV)

  • 物理卷,将实际的磁盘分区(partition)系统识别码(system ID)修改为8e后,在通过pvcreate指令转化为LVM最底层的物理卷,作为后续空间管理的基础.

Volume Group(VG)

  • 卷组,将数个PV进行整合,即形成了VG,在32位的操作系统中,LV的大小与PE的大小有关;在64位的操作系统中,LV几乎没有容量限制.

Physical Extent(PE)

  • 物理区块,他是LVM中的最小存储单元.PE类似于文件系统中的block.

Logical Volume(LV)

  • 逻辑卷,由VG划分而来,LV的大小与PE的大小及PE的数量有关,Size(LV)= Count(PE)* Size(PE)

工作原理

  • 它就是通过将底层的物理硬盘抽象的封装起来,然后以逻辑卷的方式呈现给上层应用.在传统的磁盘管理机制中,我们的上层应用是直接访问文件系统,从而对底层的物理硬盘进行读取,而在LVM中,其通过对底层的硬盘进行封装,当我们对底层的物理硬盘进行操作时,其不再是针对于分区进行操作,而是通过一个叫做逻辑卷的东西来对其进行底层的磁盘管理操作.比如说我增加一个物理硬盘,这个时候上层的服务是感觉不到的,因为呈现给上层服务的是以逻辑卷的方式.

建立PVPV的查询

  • pvcreate : 将实体 partition 建立成为 PV
  • pvscan: 搜寻目前系统里面任何具有 PV 的磁盘
  • pvdisplay: 显示出目前系统上面的 PV 状态
  • pvremove: 将 PV 属性移除,让该 partition 不具有 PV 属性
  • partprobe : 这个指令可以让核心立刻读入最新的 partition table 而不必 reboot

建立VG

  • vgcreate : 就是主要建立VG的指令啦
  • vgscan : 搜寻系统上面是否有VG存在
  • vgdisplay : 显示目前系统上面的VG状态
  • vgextend : 在VG内增加额外的 PV
  • vgreduce : 在VG内移除 PV
  • vgchange : 设定VG是否启动 (active)
  • vgremove : 删除一个 VG

建立LV

  • lvcreate : 建立 LV
  • lvscan : 查询系统上面的 LV
  • lvdisplay : 显示系统上面的 LV 状态
  • lvextend : 在 LV 里面增加容量
  • lvreduce : 在 LV 里面减少容量
  • lvremove : 删除一个 LV
  • lvresize : 对 LV 进行容量大小的调整

总结

任务 PV VG LV
搜索(scan) pvscan vgscan lvscan
创建(create) pvcreate vgcreate lvcreate
列举(display) pvdisplay vgdisplay lvdisplay
增加(extend) vgextend lvextend
减少(reduce) vgreduce lvreduce
删除(remove) pvremove vgremove lvremove
改变容量(resize) lvresize

遇到的问题

Linux /dev/mapper/ubuntu–vg-ubuntu–lv磁盘满了怎么解决

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# df -h
Filesystem Size Used Avail Use% Mounted on
udev 47G 0 47G 0% /dev
tmpfs 9.5G 2.0M 9.5G 1% /run
/dev/mapper/ubuntu--vg-ubuntu--lv 191G 191G 0G 100% /
tmpfs 48G 0 48G 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 48G 0 48G 0% /sys/fs/cgroup
/dev/sda2 974M 288M 620M 32% /boot
/dev/sdb 7.3T 724G 6.2T 11% /home
/dev/sda1 511M 6.7M 505M 2% /boot/efi
tmpfs 9.5G 0 9.5G 0% /run/user/0
overlay 7.3T 724G 6.2T 11% /home/docker/overlay2/ed0ac3d52e7e6964d6657099d1da21cf39ec53568efbdf1c8ab3b75a52828789/merged
overlay 7.3T 724G 6.2T 11% /home/docker/overlay2/9087fcddfdcd16c1550773f161407bd74523e8405f78ad274b6023ff9764faf2/merged
shm 64M 0 64M 0% /home/docker/containers/d4fc833dc4b02c4ef7d74d602c3e956b9068dc87f2b616ee70be76f770811459/mounts/shm
overlay 7.3T 724G 6.2T 11% /home/docker/overlay2/ca42d051d3f7b74f5270725f10339c869655a11c32a713d84434243e18659889/merged
tmpfs 9.5G 0 9.5G 0% /run/user/1002
tmpfs 9.5G 0 9.5G 0% /run/user/1001
  • 使用vgdisplay显示存在的卷组
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# sudo vgdisplay
--- Volume group ---
`VG`Name ubuntu-vg
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 8
`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 445.12 GiB
PE Size 4.00 MiB
Total PE 113951
Alloc PE / Size 112640 / 200.00 GiB
Free PE / Size 1311 / 245.12 GiB
`VG`UUID 8M0qEi-Qk87-09w9-7NOa-n3bt-pmfI-rjogej
  • 使用lvextend扩容,使用resize2fs执行调整

    • 使用说明

      1
      2
      3
      4
      5
      6
      7
      lvextend -L 120G /dev/mapper/ubuntu--vg-ubuntu--lv     //增大至120G
      lvextend -L +20G /dev/mapper/ubuntu--vg-ubuntu--lv //增加20G
      lvreduce -L 50G /dev/mapper/ubuntu--vg-ubuntu--lv //减小至50G
      lvreduce -L -8G /dev/mapper/ubuntu--vg-ubuntu--lv //减小8G
      lvresize -L 30G /dev/mapper/ubuntu--vg-ubuntu--lv //调整为30G

      resize2fs /dev/mapper/ubuntu--vg-ubuntu--lv //执行调整
      1
      2
      # sudo lvresize -L +249G /dev/mapper/ubuntu--vg-ubuntu--lv     
      # sudo resize2fs /dev/mapper/ubuntu--vg-ubuntu--lv
  • 调整后

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    # df -h
    Filesystem Size Used Avail Use% Mounted on
    udev 47G 0 47G 0% /dev
    tmpfs 9.5G 2.0M 9.5G 1% /run
    /dev/mapper/ubuntu--vg-ubuntu--lv 433G 191G 223G 47% /
    tmpfs 48G 0 48G 0% /dev/shm
    tmpfs 5.0M 0 5.0M 0% /run/lock
    tmpfs 48G 0 48G 0% /sys/fs/cgroup
    /dev/sda2 974M 288M 620M 32% /boot
    /dev/sdb 7.3T 724G 6.2T 11% /home
    /dev/sda1 511M 6.7M 505M 2% /boot/efi
    tmpfs 9.5G 0 9.5G 0% /run/user/0
    overlay 7.3T 724G 6.2T 11% /home/docker/overlay2/ed0ac3d52e7e6964d6657099d1da21cf39ec53568efbdf1c8ab3b75a52828789/merged
    overlay 7.3T 724G 6.2T 11% /home/docker/overlay2/9087fcddfdcd16c1550773f161407bd74523e8405f78ad274b6023ff9764faf2/merged
    shm 64M 0 64M 0% /home/docker/containers/d4fc833dc4b02c4ef7d74d602c3e956b9068dc87f2b616ee70be76f770811459/mounts/shm
    overlay 7.3T 724G 6.2T 11% /home/docker/overlay2/ca42d051d3f7b74f5270725f10339c869655a11c32a713d84434243e18659889/merged
    tmpfs 9.5G 0 9.5G 0% /run/user/1002
    tmpfs 9.5G 0 9.5G 0% /run/user/1001
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    # sudo vgdisplay
    --- Volume group ---
    `VG`Name ubuntu-vg
    System ID
    Format lvm2
    Metadata Areas 1
    Metadata Sequence No 8
    `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 445.12 GiB
    PE Size 4.00 MiB
    Total PE 113951
    Alloc PE / Size 112640 / 440.00 GiB
    Free PE / Size 1311 / 5.12 GiB
    `VG`UUID 8M0qEi-Qk87-09w9-7NOa-n3bt-pmfI-rjogej

实例

使用LVM

  • 查看硬盘情况

    1
    2
    fdisk -l
    lsblk -l
使用parted硬盘格式化
  • 执行parted 硬盘路径parted /dev/sdb

  • 根据提示输入mklabel gpt,将MBR分区转换为GPT分区

  • 运行mkpart primary ext4

    • 划分一个采用ext4文件系统的主分区,并设置分区的开始位置和结束位置.

    • 如果一个数据盘只有一个分区,则运行mkpart primary ext4 0 -1

    • 执行后会有如下提示,输入i忽略

      1
      2
      warning: The resulting partition is not properly aligned for best performance.
      Ignore/Cancel
  • 使用 print命令打印磁盘信息

  • 使用toggle更改磁盘类型,使用toggle 1 lvm,然后运行quit命令,parted操作

使用partprobe,使系统重读分区表
使用LVM
  • 使用pvcreate /dev/sdb1
  • 使用pvdisplay查看pv情况
  • 创建卷组VG
    • 使用vgscan 查看vg情况
    • 使用vgcreate data-lvm /dev/sdb1 来创建名为data-lvmvg并将/dev/sdb1加入
  • 创建lv(lv是真正用来写数据)
    • lvcreate -l 100%free -n bigdata data-lvm
    • 查看lv,ls -l /dev/data-lvm/bigdata
制作文件系统并挂载到系统上
1
2
mkfs.xfs /dev/data-lvm/bigdata
mount /dev/data-lvm/bigdata /data
验证检查
1
df -h
扩容
  • 新增磁盘/dev/sdc

    1
    2
    3
    4
    5
    6
    parted /dev/sdc
    mklabel gpt
    mkpart primary ext4 0 -1
    toggle 1 lvm
    quit
    partprobe
  • 将普通磁盘转换为pv

    1
    pvcreate /dev/sdc1
  • 将新的磁盘加入vg

    1
    vgextend data-lvm /dev/sdc1
  • 扩容lv

    1
    lvextend -l +100%free /dev/data-lvm/bigdata
  • 使用resize2fs来更新

    1
    2
    3
    resize2fs /dev/data-lvm/bigdata

    xfs_growfs /dev/data-lvm/bigdata