1.前言

LVM基本组成

LVM利用Linux内核的device-mapper来实现存储系统的虚拟化(系统分区独立于底层硬件)。通过LVM,你可以实现存储空间的抽象化并在上面建立虚拟分区(virtual partitions),可以更简便地扩大和缩小分区,无需担心某个硬盘上没有足够的连续空间。

LVM的基本组成块(building blocks)如下:

  1. 物理卷 Physical volume (PV) :可以在上面建立卷组的媒介,可以是硬盘分区,也可以是硬盘本身或者回环文件(loopback file)。物理卷包括一个特殊的header,其余部分被切割为一块块物理区域(physical extents)

  2. 卷组 Volume group (VG) :将一组物理卷收集为一个管理单元

  3. 逻辑卷 Logical volume (LV) :虚拟分区,由物理区域

  4. 物理区域 Physical extent (PE) :硬盘可供指派给逻辑卷的最小单位(通常为4MB)

lvm-volume

LVM 优点

比起正常的硬盘分区管理,LVM更富于弹性: 1. 使用卷组(VG),使众多硬盘空间看起来像一个大硬盘

  1. 使用逻辑卷(LV),可以创建跨越众多硬盘空间的分区

  2. 可以创建小的逻辑卷(LV),在空间不足时再动态调整它的大小

  3. 在调整逻辑卷(LV)大小时可以不用考虑逻辑卷在硬盘上的位置,不用担心没有可用的连续空间

  4. 可以在线(online)对逻辑卷(LV)和卷组(VG)进行创建、删除、调整大小等操作,LVM上的文件系统也需要重新调整大小,某些文件系统也支持这样的在线操作。

  5. 无需重新启动服务,就可以将服务中用到的逻辑卷(LV)在线(online)/动态(live)迁移至别的硬盘上。

  6. 允许创建快照,可以保存文件系统的备份,同时使服务的下线时间(downtime)降低到最小。

2.添加一块物理硬盘

添加一块硬盘(60GB)到系统中,并让系统识别它,具体步骤参考 不重启添加硬盘

使用 fdisk -l 命令查看到这块新盘为 /dev/sdb

[root@node2 ~]# fdisk -l #查看硬盘
磁盘 /dev/sda:21.5 GB, 21474836480 字节,41943040 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x000dda69

   设备 Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048     1026047      512000   83  Linux
/dev/sda2         1026048    41943039    20458496   8e  Linux LVM

磁盘 /dev/mapper/centos-root:18.8 GB, 18756927488 字节,36634624 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节

磁盘 /dev/mapper/centos-swap:2147 MB, 2147483648 字节,4194304 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节

磁盘 /dev/sdb:64.4 GB, 64424509440 字节,125829120 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节

3.对新盘分区

使用 fdisk 命令对新盘进行分区,这里建立了一个主分区 /dev/sdb1 ,大小 8GB,最后使用 partprobe 命令重新读取分区表,命令记录如下:

[root@node2 ~]# fdisk /dev/sdb #对 /dev/sdb 执行分区操作
欢迎使用 fdisk (util-linux 2.23.2)。

更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。

Device does not contain a recognized partition table
使用磁盘标识符 0x0096d9c0 创建新的 DOS 磁盘标签。

命令(输入 m 获取帮助):m # 输入 m 获取帮助
命令操作
   a   toggle a bootable flag
   b   edit bsd disklabel
   c   toggle the dos compatibility flag
   d   delete a partition
   g   create a new empty GPT partition table
   G   create an IRIX (SGI) partition table
   l   list known partition types
   m   print this menu
   n   add a new partition
   o   create a new empty DOS partition table
   p   print the partition table
   q   quit without saving changes
   s   create a new empty Sun disklabel
   t   change a partition's system id
   u   change display/entry units
   v   verify the partition table
   w   write table to disk and exit
   x   extra functionality (experts only)

命令(输入 m 获取帮助):n # 输入 n 添加新的物理分区
Partition type:
  p   primary (0 primary, 0 extended, 4 free)
  e   extended
Select (default p): p # 输入 p 选择主分区类型
分区号 (1-4,默认 1): # 默认
起始 扇区 (2048-125829119,默认为 2048): # 默认
将使用默认值 2048
Last 扇区, +扇区 or +size{K,M,G} (2048-125829119,默认为 125829119): # 默认
将使用默认值 125829119
分区 1 已设置为 Linux 类型,大小设为 60 GiB

命令(输入 m 获取帮助):t # 输入 t 修改分区 id
已选择分区 1
Hex 代码(输入 L 列出所有代码):L # 输入 L 查看所有 ID

 0  空              24  NEC DOS         81  Minix / 旧 Linu bf  Solaris
 1  FAT12           27  隐藏的 NTFS Win 82  Linux 交换 / So c1  DRDOS/sec (FAT-
 2  XENIX root      39  Plan 9          83  Linux           c4  DRDOS/sec (FAT-
 3  XENIX usr       3c  PartitionMagic  84  OS/2 隐藏的 C:  c6  DRDOS/sec (FAT-
 4  FAT16 <32M      40  Venix 80286     85  Linux 扩展      c7  Syrinx
 5  扩展            41  PPC PReP Boot   86  NTFS 卷集       da  非文件系统数据
 6  FAT16           42  SFS             87  NTFS 卷集       db  CP/M / CTOS / .
 7  HPFS/NTFS/exFAT 4d  QNX4.x          88  Linux 纯文本    de  Dell 工具
 8  AIX             4e  QNX4.x 第2部分  8e  Linux LVM       df  BootIt
 9  AIX 可启动      4f  QNX4.x 第3部分  93  Amoeba          e1  DOS 访问
 a  OS/2 启动管理器 50  OnTrack DM      94  Amoeba BBT      e3  DOS R/O
 b  W95 FAT32       51  OnTrack DM6 Aux 9f  BSD/OS          e4  SpeedStor
 c  W95 FAT32 (LBA) 52  CP/M            a0  IBM Thinkpad 休 eb  BeOS fs
 e  W95 FAT16 (LBA) 53  OnTrack DM6 Aux a5  FreeBSD         ee  GPT
 f  W95 扩展 (LBA)  54  OnTrackDM6      a6  OpenBSD         ef  EFI (FAT-12/16/
10  OPUS            55  EZ-Drive        a7  NeXTSTEP        f0  Linux/PA-RISC
11  隐藏的 FAT12    56  Golden Bow      a8  Darwin UFS      f1  SpeedStor
12  Compaq 诊断     5c  Priam Edisk     a9  NetBSD          f4  SpeedStor
14  隐藏的 FAT16 <3 61  SpeedStor       ab  Darwin 启动     f2  DOS 次要
16  隐藏的 FAT16    63  GNU HURD or Sys af  HFS / HFS+      fb  VMware VMFS
17  隐藏的 HPFS/NTF 64  Novell Netware  b7  BSDI fs         fc  VMware VMKCORE
18  AST 智能睡眠    65  Novell Netware  b8  BSDI swap       fd  Linux raid 自动
1b  隐藏的 W95 FAT3 70  DiskSecure 多启 bb  Boot Wizard 隐  fe  LANstep
1c  隐藏的 W95 FAT3 75  PC/IX           be  Solaris 启动    ff  BBT
1e  隐藏的 W95 FAT1 80  旧 Minix
Hex 代码(输入 L 列出所有代码):8e # 输入 8e 修改分区为 Linux LVM 类型
已将分区“Linux”的类型更改为“Linux LVM”
命令(输入 m 获取帮助):w # 输入 w 将修改写入磁盘
The partition table has been altered!

Calling ioctl() to re-read partition table.
正在同步磁盘。
# 分区结束
[root@node2 ~]# partprobe # 使用 partprobe 命令重新读取分区表
[root@node2 ~]# fdisk -l # 查看修改后的结果

磁盘 /dev/sda:21.5 GB, 21474836480 字节,41943040 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x000dda69

   设备 Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048     1026047      512000   83  Linux
/dev/sda2         1026048    41943039    20458496   8e  Linux LVM

磁盘 /dev/mapper/centos-root:18.8 GB, 18756927488 字节,36634624 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节


磁盘 /dev/mapper/centos-swap:2147 MB, 2147483648 字节,4194304 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节


磁盘 /dev/sdb:64.4 GB, 64424509440 字节,125829120 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x0096d9c0

   设备 Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048   125829119    62913536   8e  Linux LVM
[root@node2 ~]#

4.创建物理卷(PV)

[root@node2 ~]# pvdisplay # 创建新物理卷前查看 PV
  --- Physical volume ---
  PV Name               /dev/sda2
  VG Name               centos
  PV Size               19.51 GiB / not usable 3.00 MiB
  Allocatable           yes
  PE Size               4.00 MiB
  Total PE              4994
  Free PE               10
  Allocated PE          4984
  PV UUID               ypckOI-BXmZ-J6Cp-jIbY-Gn2m-D7yr-2s1o68

[root@node2 ~]# pvcreate /dev/sdb1 # 创建 PV
  Physical volume "/dev/sdb1" successfully created.
[root@node2 ~]# pvdisplay # 再次查看,可看到新的 PV
  --- Physical volume ---
  PV Name               /dev/sda2
  VG Name               centos
  PV Size               19.51 GiB / not usable 3.00 MiB
  Allocatable           yes
  PE Size               4.00 MiB
  Total PE              4994
  Free PE               10
  Allocated PE          4984
  PV UUID               ypckOI-BXmZ-J6Cp-jIbY-Gn2m-D7yr-2s1o68

  "/dev/sdb1" is a new physical volume of "60.00 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/sdb1
  VG Name
  PV Size               60.00 GiB
  Allocatable           NO
  PE Size               0
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               NE729N-o2N6-dc8o-dryH-drZx-ql8c-A9MGlH

[root@node2 ~]#

5.将PV加入卷组(VG)

[root@node2 ~]# vgdisplay # 查看卷组,可用 PE 为 10 个
  --- Volume group ---
  VG Name               centos
  System ID
  Format                lvm2
  Metadata Areas        1
  Metadata Sequence No  3
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                2
  Open LV               2
  Max PV                0
  Cur PV                1
  Act PV                1
  VG Size               19.51 GiB
  PE Size               4.00 MiB
  Total PE              4994
  Alloc PE / Size       4984 / 19.47 GiB
  Free  PE / Size       10 / 40.00 MiB
  VG UUID               pQd8HL-4SpW-36rY-oQoF-wIcL-8vXl-BTjQTz

[root@node2 ~]# vgextend centos /dev/sdb1 # 将新的 PV 加入 centos 组卷
  Volume group "centos" successfully extended
[root@node2 ~]# vgdisplay # 查看 VG 信息,可用 PE 为 15369 个
  --- Volume group ---
  VG Name               centos
  System ID
  Format                lvm2
  Metadata Areas        2
  Metadata Sequence No  5
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                2
  Open LV               2
  Max PV                0
  Cur PV                2
  Act PV                2
  VG Size               79.50 GiB
  PE Size               4.00 MiB
  Total PE              20353
  Alloc PE / Size       4984 / 19.47 GiB
  Free  PE / Size       15369 / 60.04 GiB
  VG UUID               pQd8HL-4SpW-36rY-oQoF-wIcL-8vXl-BTjQTz

6.创建逻辑卷(LV)

[root@node2 ~]# lvdisplay # 先查看 LV 信息
  --- Logical volume ---
  LV Path                /dev/centos/swap
  LV Name                swap
  VG Name                centos
  LV UUID                2Dhfs3-Vl5T-wJft-5KCe-Rhwv-3rmv-olue6A
  LV Write Access        read/write
  LV Creation host, time node1, 2017-01-05 16:22:47 +0800
  LV Status              available
  # open                 2
  LV Size                2.00 GiB
  Current LE             512
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:1

  --- Logical volume ---
  LV Path                /dev/centos/root
  LV Name                root
  VG Name                centos
  LV UUID                kzgrfG-vO3b-ehtS-Ydxx-92jK-ol2T-l7NJw7
  LV Write Access        read/write
  LV Creation host, time node1, 2017-01-05 16:22:47 +0800
  LV Status              available
  # open                 1
  LV Size                17.47 GiB
  Current LE             4472
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:0

[root@node2 ~]# lvcreate -L 40G -n aurthur centos # 创建了一个新的 LV,并起名 aurthur
  Logical volume "aurthur" created.
[root@node2 ~]# lvdisplay # 查看创建新 LV 后的相关信息,多了 /dev/centos/aurthur LV
  --- Logical volume ---
  LV Path                /dev/centos/swap
  LV Name                swap
  VG Name                centos
  LV UUID                2Dhfs3-Vl5T-wJft-5KCe-Rhwv-3rmv-olue6A
  LV Write Access        read/write
  LV Creation host, time node1, 2017-01-05 16:22:47 +0800
  LV Status              available
  # open                 2
  LV Size                2.00 GiB
  Current LE             512
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:1

  --- Logical volume ---
  LV Path                /dev/centos/root
  LV Name                root
  VG Name                centos
  LV UUID                kzgrfG-vO3b-ehtS-Ydxx-92jK-ol2T-l7NJw7
  LV Write Access        read/write
  LV Creation host, time node1, 2017-01-05 16:22:47 +0800
  LV Status              available
  # open                 1
  LV Size                17.47 GiB
  Current LE             4472
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:0

  --- Logical volume ---
  LV Path                /dev/centos/aurthur
  LV Name                aurthur
  VG Name                centos
  LV UUID                GemtcP-9beI-Cao9-oJ3a-p1oD-ee3e-THh5Bd
  LV Write Access        read/write
  LV Creation host, time node2, 2017-01-07 21:20:13 +0800
  LV Status              available
  # open                 0
  LV Size                40.00 GiB
  Current LE             10240
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:2

[root@node2 ~]# vgdisplay # 查看一下 VG ,可用 PE 仅剩 5129 个
  --- Volume group ---
  VG Name               centos
  System ID
  Format                lvm2
  Metadata Areas        2
  Metadata Sequence No  6
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                3
  Open LV               2
  Max PV                0
  Cur PV                2
  Act PV                2
  VG Size               79.50 GiB
  PE Size               4.00 MiB
  Total PE              20353
  Alloc PE / Size       15224 / 59.47 GiB
  Free  PE / Size       5129 / 20.04 GiB
  VG UUID               pQd8HL-4SpW-36rY-oQoF-wIcL-8vXl-BTjQTz

7.格式化逻辑卷(LV)并挂载

[root@node2 ~]# mkfs.xfs /dev/centos/aurthur # 格式化新 LV
meta-data=/dev/centos/aurthur    isize=512    agcount=4, agsize=2621440 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0, sparse=0
data     =                       bsize=4096   blocks=10485760, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal log           bsize=4096   blocks=5120, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0

[root@node2 ~]# mkdir /data # 新建挂载点
[root@node2 ~]# mount -t xfs /dev/centos/aurthur /data # 将已格式化的 LV 挂在到 /data 上
[root@node2 ~]# df -Th # 查看挂载后的信息
文件系统                   类型      容量  已用  可用 已用% 挂载点
/dev/mapper/centos-root    xfs        18G  1.5G   17G    9% /
devtmpfs                   devtmpfs  3.9G     0  3.9G    0% /dev
tmpfs                      tmpfs     3.9G     0  3.9G    0% /dev/shm
tmpfs                      tmpfs     3.9G  8.5M  3.9G    1% /run
tmpfs                      tmpfs     3.9G     0  3.9G    0% /sys/fs/cgroup
/dev/sda1                  xfs       497M  169M  329M   34% /boot
tmpfs                      tmpfs     783M     0  783M    0% /run/user/0
/dev/mapper/centos-aurthur xfs        40G   33M   40G    1% /data

8.设置开机自动挂载

编辑 /etc/fstab 文件,加入一行

/dev/centos/aurthur     /data                   xfs     defaults        1 2

用命令查看是否有错

[root@node2 ~]# mount -fav
/                        :已忽略
/boot                    :已经挂载
swap                     :已忽略
/data                    :已经挂载

9.逻辑卷(LV)扩容

[root@node2 ~]# lvextend -l +100%FREE /dev/centos/aurthur # 用 lvextend 将 /dev/centos/aurthur 所在卷组所有剩余空间都分配给了它
  Size of logical volume centos/aurthur changed from 40.00 GiB (10240 extents) to 60.04 GiB (15369 extents).
  Logical volume centos/aurthur successfully resized.
[root@node2 ~]# xfs_growfs /dev/centos/aurthur # 用 xfs_growfs 对扩容后的 LV 进行 xfs 格式大小调整,Centos 6 使用 resize2fs
meta-data=/dev/mapper/centos-aurthur isize=512    agcount=4, agsize=2621440 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0 spinodes=0
data     =                       bsize=4096   blocks=10485760, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal               bsize=4096   blocks=5120, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
data blocks changed from 10485760 to 15737856

[root@node2 ~]# vgdisplay # 查看卷组信息,可用 PE 已经为 0 个
  --- Volume group ---
  VG Name               centos
  System ID
  Format                lvm2
  Metadata Areas        2
  Metadata Sequence No  7
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                3
  Open LV               3
  Max PV                0
  Cur PV                2
  Act PV                2
  VG Size               79.50 GiB
  PE Size               4.00 MiB
  Total PE              20353
  Alloc PE / Size       20353 / 79.50 GiB
  Free  PE / Size       0 / 0
  VG UUID               pQd8HL-4SpW-36rY-oQoF-wIcL-8vXl-BTjQTz
[root@node2 ~]# lvdisplay # 查看 LV 信息,/dev/centos/aurthur 已扩大为 60.04 G
  --- Logical volume ---
  LV Path                /dev/centos/swap
  LV Name                swap
  VG Name                centos
  LV UUID                2Dhfs3-Vl5T-wJft-5KCe-Rhwv-3rmv-olue6A
  LV Write Access        read/write
  LV Creation host, time node1, 2017-01-05 16:22:47 +0800
  LV Status              available
  # open                 2
  LV Size                2.00 GiB
  Current LE             512
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:1

  --- Logical volume ---
  LV Path                /dev/centos/root
  LV Name                root
  VG Name                centos
  LV UUID                kzgrfG-vO3b-ehtS-Ydxx-92jK-ol2T-l7NJw7
  LV Write Access        read/write
  LV Creation host, time node1, 2017-01-05 16:22:47 +0800
  LV Status              available
  # open                 1
  LV Size                17.47 GiB
  Current LE             4472
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:0

  --- Logical volume ---
  LV Path                /dev/centos/aurthur
  LV Name                aurthur
  VG Name                centos
  LV UUID                GemtcP-9beI-Cao9-oJ3a-p1oD-ee3e-THh5Bd
  LV Write Access        read/write
  LV Creation host, time node2, 2017-01-07 21:20:13 +0800
  LV Status              available
  # open                 1
  LV Size                60.04 GiB
  Current LE             15369
  Segments               2
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:2

[root@node2 ~]# df -Th # 查看挂载信息,/data 容量已扩大为 60 G
文件系统                   类型      容量  已用  可用 已用% 挂载点
/dev/mapper/centos-root    xfs        18G  1.5G   17G    9% /
devtmpfs                   devtmpfs  3.9G     0  3.9G    0% /dev
tmpfs                      tmpfs     3.9G     0  3.9G    0% /dev/shm
tmpfs                      tmpfs     3.9G  8.5M  3.9G    1% /run
tmpfs                      tmpfs     3.9G     0  3.9G    0% /sys/fs/cgroup
/dev/sda1                  xfs       497M  169M  329M   34% /boot
tmpfs                      tmpfs     783M     0  783M    0% /run/user/0
/dev/mapper/centos-aurthur xfs        61G   33M   60G    1% /data