Linux配置LVM

Linux LVM概念介绍及相关配置

LVM简介

LVM是Linux操作系统的逻辑卷管理器。 现在有两个Linux版本的LVM,分别是 LVM1,LVM2。LVM1是一种已经被认为稳定了几年的成熟产品,LVM2 是最新最好的LVM版本。 LVM2几乎完全向后兼容使用LVM1创建的卷,目前centos7以上版本默认都是使用的LVM2(ubuntu默认安装没有使用lvm这项技术)。

简单来说,就是操作系统把一组物理磁盘先组成卷组,然后在该卷组上划分逻辑卷,不同的逻辑卷可以格式化成不同的文件格式,从而使得操作系统可以统一操作所有的存储资源,屏蔽了不同存储硬件的差异,有点存储资源池化的意思。

LVM中的概念

物理存储介质(The physical media)

这里指系统的存储设备:硬盘,如:/dev/hda、/dev/sda等等,是存储系统最低层的存储单元。可以简单理解为:插在服务器上的一块硬盘设备。硬盘设备及硬盘分区可使用fdisk命令进行管理。

PV(physical volume)

物理卷在LVM管理系统最底层,基于整个物理硬盘或实际物理硬盘上的分区进行创建。可使用pvs命令查看pv信息。

VG(volume group)

卷组建立在物理卷上,一个卷组中至少要包括一个物理卷,卷组建立后可动态的添加卷到卷组中,一个逻辑卷管理系统工程中可有多个卷组。LVM卷组由一个或多个物理卷组成。通过卷组这个概念,可以方便的把不同的物理卷(对应到不同的物理磁盘)纳入到一个统一的卷组中进行管理。可使用vgs命令查看vg信息。

LV(logical volume)

逻辑卷建立在卷组基础上,卷组中未分配空间可用于建立新的逻辑卷,逻辑卷建立后可以动态扩展和缩小空间。在逻辑卷之上可以建立文件系统(比如/home或者/usr等)。注意:xfs文件系统是不能缩减的,只能增加。可使用lvs命令查看lv信息。

PE(physical extent)

物理区域是物理卷中可用于分配的最小存储单元,物理区域大小在建立卷组时指定,一旦确定不能更改,同一卷组所有物理卷的物理区域大小需一致,新的pv加入到vg后,pe的大小自动更改为vg中定义的pe大小。

LE(logical extent)

逻辑区域是逻辑卷中可用于分配的最小存储单元,逻辑区域的大小取决于逻辑卷所在卷组中的物理区域的大小。卷组描述区域:卷组描述区域存在于每个物理卷中,用于描述物理卷本身、物理卷所属卷组、卷组中逻辑卷、逻辑卷中物理区域的分配等所有信息,它是在使用pvcreate建立物理卷时建立的。

图1:磁盘分区/物理卷(PV)、卷组(VG)、逻辑卷(LV)之间的关系图

使用LVM扩展逻辑卷

下面以在虚拟机中挂载一个新的磁盘设备sdb为例,来看看具体如何在操作系统中扩展逻辑卷。

1、查看当前目录下子目录占用容量(不是必须的,可以看下目前整体的磁盘使用情况)

[root@localhost ~]# du -lh --max-depth=1
8.0K    ./.cache
4.0K    ./.dbus
4.0K    ./.config
4.0K    ./.ssh
91M     ./docker
2.0G    ./kubernetes
4.0K    ./.docker
0       ./.m2
11M     ./apache-maven-3.5.4
213M    ./localRepo
1.1M    ./.basher
2.3M    ./.kube
3.2M    ./.helm
62M     ./linux-amd64
185M    ./alpinejre
108K    ./auto-deploy-app
208M    ./jre1.8.0_181
20K     ./.oracle_jre_usage
163M    ./springcloud
383M    ./jdk1.8.0_191
69M     ./.npm
0       ./.npm-global
371M    ./node_modules
137M    ./apache-skywalking-apm-incubating
333M    ./jira
56K     ./.java
11M     ./maven3
0       ./.pki
4.7G    .

2、查看当前的磁盘设备使用情况

[root@localhost ~]# fdisk -l

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

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

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


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


磁盘 /dev/mapper/rhel-swap:2164 MB, 2164260864 字节,4227072 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
[root@localhost ~]# lsblk
NAME          MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
fd0             2:0    1    4K  0 disk 
sda             8:0    0   70G  0 disk 
├─sda1          8:1    0  500M  0 part /boot
└─sda2          8:2    0 49.5G  0 part 
  ├─rhel-root 253:0    0 47.5G  0 lvm  /
  └─rhel-swap 253:1    0    2G  0 lvm  [SWAP]
sdb             8:16   0  100G  0 disk 
sr0            11:0    1 1024M  0 rom  
[root@localhost ~]# df -hT
文件系统              类型      容量  已用  可用 已用% 挂载点
/dev/mapper/rhel-root xfs        48G   45G  3.4G   94% /
devtmpfs              devtmpfs  5.9G     0  5.9G    0% /dev
tmpfs                 tmpfs     5.9G  148K  5.9G    1% /dev/shm
tmpfs                 tmpfs     5.9G   18M  5.9G    1% /run
tmpfs                 tmpfs     5.9G     0  5.9G    0% /sys/fs/cgroup
/dev/sda1             xfs       497M  118M  379M   24% /boot
[root@localhost ~]# vgs
  VG   #PV #LV #SN Attr   VSize  VFree
  rhel   1   2   0 wz--n- 49.51g    0 
[root@localhost ~]# lvs
  LV   VG   Attr       LSize  Pool Origin Data%  Move Log Cpy%Sync Convert
  root rhel -wi-ao---- 47.49g                                             
  swap rhel -wi-ao----  2.02g                                             
[root@localhost ~]# pvs
  PV         VG   Fmt  Attr PSize  PFree
  /dev/sda2  rhel lvm2 a--  49.51g    0

这边我们先使用fdisk -l命令查看当前的磁盘设备,可以看到有sdasdb两块裸设备,容量分别为70G和100G,其中sda分了两个分区sda1和sda2。使用lsblk命令可以比较直观的看出其中的组织结构关系。系统中有一个名为/dev/sda2的pv,容量为49.5G,有一个名为rhel的vg卷组(目前只有/dev/sda2这个pv组成),rhel这个vg下有两个逻辑卷,分别是root和swap,其中/dev/mapper/rhel-root这个逻辑卷的挂载点为根目录,即意味着除了/dev/run/boot这些特殊目录,其他绝大部分的系统目录使用的都是rhel-root这个逻辑卷,这个lv的文件格式为xfs。所以我们这边的任务就是扩展这个rhel-root逻辑卷的容量

从上面的信息来分析,可以看到其实sda这个设备的磁盘容量并没有被充分使用,所以我们这边第一步任务是为sda设备先创建新的分区,并把这部分容量扩充到rhel-root这个逻辑卷,第二步是把整个sdb设备加入rhel这个vg,并扩展到rhel-root这个lv。

3、创建分区,扩展逻辑卷

[root@localhost ~]# fdisk /dev/sda   //创建分区
 n 新建分区
 p 打印分区列表
 t 修改分区格式,LVM=8e
 w 保存分区信息到磁盘,退出
 q 不保存分区信息到磁盘,退出
//先使用选项n创建一个名为/dev/sdb3的分区,都用默认选项就好。注意使用选项t修改分区格式,改为8e是lvm支持的格式
[root@localhost ~]# partprobe  //发现新分区
[root@localhost ~]# lsblk    //列出设备信息,可以看到有sda3这个分区了,容量为20G,即sda设备的剩余容量
NAME          MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
fd0             2:0    1    4K  0 disk 
sda             8:0    0   70G  0 disk 
├─sda1          8:1    0  500M  0 part /boot
├─sda2          8:2    0 49.5G  0 part 
│ ├─rhel-root 253:0    0 47.5G  0 lvm  /
│ └─rhel-swap 253:1    0    2G  0 lvm  [SWAP]
└─sda3          8:3    0   20G  0 part 
sdb             8:16   0  100G  0 disk 
sr0            11:0    1 1024M  0 rom  
[root@localhost ~]# pvcreate /dev/sda3  //使用新分区创建pv
  Physical volume "/dev/sda3" successfully created
[root@localhost ~]# vgextend rhel /dev/sda3  //将新的pv加入rhel这个vg
  Volume group "rhel" successfully extended
[root@localhost ~]# lvextend -l +100%free /dev/rhel/root  //按百分比扩展LV
#[root@localhost ~]# lvextend -L +1G /dev/rhel/root  //按指定容量扩展LV
  Extending logical volume root to 67.49 GiB
  Logical volume root successfully resized
[root@localhost ~]# xfs_growfs /dev/mapper/rhel-root  //扩展xfs文件系统
meta-data=/dev/mapper/rhel-root  isize=256    agcount=4, agsize=3112448 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=0
data     =                       bsize=4096   blocks=12449792, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=0
log      =internal               bsize=4096   blocks=6079, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
data blocks changed from 12449792 to 17691648
[root@localhost ~]# df -hT  //这边看到,rhel-root这个逻辑卷的容量已经扩充为68G
文件系统              类型      容量  已用  可用 已用% 挂载点
/dev/mapper/rhel-root xfs        68G   45G   24G   66% /
devtmpfs              devtmpfs  5.9G     0  5.9G    0% /dev
tmpfs                 tmpfs     5.9G  148K  5.9G    1% /dev/shm
tmpfs                 tmpfs     5.9G   18M  5.9G    1% /run
tmpfs                 tmpfs     5.9G     0  5.9G    0% /sys/fs/cgroup
/dev/sda1             xfs       497M  118M  379M   24% /boot

4、如果是添加裸磁盘的话就更加方便,可以不分区,直接将整个设备创建为pv(pvcreate /dev/sdb),之后的操作是一样的,以下是将sdb设备加入进来后的最终情况。

[root@localhost ~]# lsblk
NAME          MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
fd0             2:0    1     4K  0 disk 
sda             8:0    0    70G  0 disk 
├─sda1          8:1    0   500M  0 part /boot
├─sda2          8:2    0  49.5G  0 part 
│ ├─rhel-root 253:0    0 167.5G  0 lvm  /
│ └─rhel-swap 253:1    0     2G  0 lvm  [SWAP]
└─sda3          8:3    0    20G  0 part 
  └─rhel-root 253:0    0 167.5G  0 lvm  /
sdb             8:16   0   100G  0 disk 
└─rhel-root   253:0    0 167.5G  0 lvm  /
sr0            11:0    1  1024M  0 rom 
[root@localhost ~]# pvs
  PV         VG   Fmt  Attr PSize   PFree
  /dev/sda2  rhel lvm2 a--   49.51g    0 
  /dev/sda3  rhel lvm2 a--   20.00g    0 
  /dev/sdb   rhel lvm2 a--  100.00g    0 
[root@localhost ~]# vgs
  VG   #PV #LV #SN Attr   VSize   VFree
  rhel   3   2   0 wz--n- 169.50g    0 
[root@localhost ~]# lvs
  LV   VG   Attr       LSize   Pool Origin Data%  Move Log Cpy%Sync Convert
  root rhel -wi-ao---- 167.48g                                             
  swap rhel -wi-ao----   2.02g 
[root@localhost ~]# df -hT
文件系统              类型      容量  已用  可用 已用% 挂载点
/dev/mapper/rhel-root xfs       168G   45G  124G   27% /
devtmpfs              devtmpfs  5.9G     0  5.9G    0% /dev
tmpfs                 tmpfs     5.9G  148K  5.9G    1% /dev/shm
tmpfs                 tmpfs     5.9G   18M  5.9G    1% /run
tmpfs                 tmpfs     5.9G     0  5.9G    0% /sys/fs/cgroup
/dev/sda1             xfs       497M  118M  379M   24% /boot

你可能感兴趣的:(Linux配置LVM)