LVM

LVM

当前系统盘的分布:

[root@host ~]# fdisk -l

Disk /dev/vda: 21.5 GB, 21474836480 bytes, 41943040 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x0009b56e

   Device Boot      Start         End      Blocks   Id  System
/dev/vda1   *        2048     1026047      512000   83  Linux
/dev/vda2         1026048    41943039    20458496   8e  Linux LVM

Disk /dev/mapper/centos-root: 18.8 GB, 18756927488 bytes, 36634624 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes


Disk /dev/mapper/centos-swap: 2147 MB, 2147483648 bytes, 4194304 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes

一块系统盘/dev/vda被分成了两个分区/dev/vda1,/dev/vda2,然后查看挂载:

[root@host ~]# df -h
Filesystem               Size  Used Avail Use% Mounted on
/dev/mapper/centos-root   18G  1.6G   16G   9% /
devtmpfs                 1.9G     0  1.9G   0% /dev
tmpfs                    1.9G     0  1.9G   0% /dev/shm
tmpfs                    1.9G  8.3M  1.9G   1% /run
tmpfs                    1.9G     0  1.9G   0% /sys/fs/cgroup
/dev/vda1                497M  120M  378M  25% /boot

可以看到/dev/vda1分区被挂载到/boot下面,作为启动分区。这个分区的大小大概是512M,只用于启动分区。另外的一个分区/dev/vda2可以看到在df中没有显示出来,因为这个分区没有被直接使用,而是被当作LVM的PV来使用,可以查看:

[root@host ~]# pvdisplay
  --- Physical volume ---
  PV Name               /dev/vda2
  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               2MR7wz-fh1t-6nlO-glse-MEBz-8Rjo-Y7gkhI

作为一个PV,它被划到了centos这个VG里面使用,再查看:

[root@host ~]# vgdisplay
  --- 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               h5CW2E-aYjt-AZLN-CTMe-7lZp-e2xk-yuDnLs

再查看这个VG被哪些LV使用了:

[root@host ~]# lvdisplay
  --- Logical volume ---
  LV Path                /dev/centos/swap
  LV Name                swap
  VG Name                centos
  LV UUID                U0ANhF-afAc-pb0U-AYmN-EJH0-Wyj8-H2bvws
  LV Write Access        read/write
  LV Creation host, time localhost, 2015-12-01 21:35:58 +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                sG5AuB-SsYW-ggN5-tl6l-csEg-14F7-6NNVnO
  LV Write Access        read/write
  LV Creation host, time localhost, 2015-12-01 21:35:59 +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

可以看到一个VG被划成了两个LV所占用,分别是设备/dev/centos/swap和/dev/centos/root,再查看df命令里面的/dev/mapper/centos-root,可以发现,

[root@host ~]# ll /dev/centos/
total 0
lrwxrwxrwx 1 root root 7 Oct 10 17:46 root -> ../dm-0
lrwxrwxrwx 1 root root 7 Oct 10 17:46 swap -> ../dm-1

[root@host ~]# ll /dev/mapper/
total 0
lrwxrwxrwx 1 root root       7 Oct 10 17:46 centos-root -> ../dm-0
lrwxrwxrwx 1 root root       7 Oct 10 17:46 centos-swap -> ../dm-1
crw------- 1 root root 10, 236 Oct 10 17:46 control

所有上面的那些*display命令都可以使用简化版本的

[root@host ~]# pvs
  PV         VG     Fmt  Attr PSize  PFree 
  /dev/vda2  centos lvm2 a--  19.51g 40.00m
[root@host ~]# vgs
  VG     #PV #LV #SN Attr   VSize  VFree 
  centos   1   2   0 wz--n- 19.51g 40.00m
[root@host ~]# lvs
  LV   VG     Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  root centos -wi-ao---- 17.47g                                                    
  swap centos -wi-ao----  2.00g            

也就是说无论是/dev/mapper/还是/dev/centos/下面的文件都是直接链接到/dev/dm-上面,前者是管理层次上的一个文件,后者才是lv的操作系统里面的具体的设备(分区)。所以对于fdisk -l命令看到的结果,由于它无法区分/dev/centos/与/dev/vda之间的关系,所以都显示了出来。

[root@host ~]# ll /dev | grep dm
crw-------  1 root root     10,  61 Oct 10 17:46 cpu_dma_latency
brw-rw----  1 root disk    253,   0 Oct 10 17:46 dm-0
brw-rw----  1 root disk    253,   1 Oct 10 17:46 dm-1
crw-------  1 root root      1,  12 Oct 10 17:46 oldmem

/dev/vda1被挂载在/boot上面,作为启动分区
/dev/mapper/root分区被挂在根目录上,作为根分区(即磁盘/dev/vda的第二个分区虚拟化出的一块磁盘再分出的第一个区)
/dev/mapper/swap分区不用挂载,直接作为交换分区(即磁盘/dev/vda的第二个分区虚拟化出的一块磁盘再分出的第二个区

LVM扩容

新挂载了一块磁盘之后,可以看到:

Disk /dev/vdb: 128.8 GB, 128849018880 bytes, 251658240 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes

使用命令将这个磁盘设置为PV,设置完成之后,这块PV暂时还没有人使用,不属于任何VG

[root@host ~]# pvcreate /dev/vdb
  Physical volume "/dev/vdb" successfully created
[root@host ~]# pvs
  PV         VG     Fmt  Attr PSize   PFree  
  /dev/vda2  centos lvm2 a--   19.51g  40.00m
  /dev/vdb          lvm2 ---  120.00g 120.00g

再使用vgextend将将的PV加入到VG中,

[root@host ~]# vgextend centos /dev/vdb
  Volume group "centos" successfully extended
[root@host ~]# pvs
  PV         VG     Fmt  Attr PSize   PFree  
  /dev/vda2  centos lvm2 a--   19.51g  40.00m
  /dev/vdb   centos lvm2 a--  120.00g 120.00g
[root@host ~]# vgs
  VG     #PV #LV #SN Attr   VSize   VFree  
  centos   2   2   0 wz--n- 139.50g 120.04g

最后再扩容原来的root的LV。lvextend中的扩容参数也可以使用+版本,这样就不用计算总大小。

[root@host ~]# lvextend -L 120G centos/root
  Size of logical volume centos/root changed from 17.47 GiB (4472 extents) to 120.00 GiB (30720 extents).
  Logical volume root successfully resized
[root@host ~]# lvs
  LV   VG     Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  root centos -wi-ao---- 120.00g                                                    
  swap centos -wi-ao----   2.00g                           

但此时发现df -h查看时,根目录仍然是原来的大小,因为lvextend并不识别任何文件系统,只负责将分区后面添加了可用的blocks。此时需要根据不同的文件系统使用文件系统的工具resize2fs或者xfs_growfs。对于普通的文件系统分区,可以直接使用resize2fs,但如果是xfs分区,需要使用xfs_growfs,否则会提示无法识别super block。完成之后再查看df可以发现已经完成了。

[root@host ~]# xfs_growfs /dev/centos/root 
meta-data=/dev/mapper/centos-root isize=256    agcount=4, agsize=1144832 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=0        finobt=0
data     =                       bsize=4096   blocks=4579328, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=0
log      =internal               bsize=4096   blocks=2560, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
data blocks changed from 4579328 to 31457280

下面是所有设置完成之后的状态

[root@host ~]# pvs
  PV         VG     Fmt  Attr PSize   PFree 
  /dev/vda2  centos lvm2 a--   19.51g     0 
  /dev/vdb   centos lvm2 a--  120.00g 17.50g
[root@host ~]# vgs
  VG     #PV #LV #SN Attr   VSize   VFree 
  centos   2   2   0 wz--n- 139.50g 17.50g
[root@host ~]# lvs
  LV   VG     Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  root centos -wi-ao---- 120.00g                                                    
  swap centos -wi-ao----   2.00g                                                    
[root@host ~]# df -h
Filesystem               Size  Used Avail Use% Mounted on
/dev/mapper/centos-root  120G  1.6G  119G   2% /
devtmpfs                 1.9G     0  1.9G   0% /dev
tmpfs                    1.9G     0  1.9G   0% /dev/shm
tmpfs                    1.9G  8.3M  1.9G   1% /run
tmpfs                    1.9G     0  1.9G   0% /sys/fs/cgroup
/dev/vda1                497M  120M  378M  25% /boot

镜像启动的虚拟机系统盘扩容

制作虚拟机镜像的时候,会指定根磁盘的大小,比如20G,那样的话,使用制作出来的镜像文件来启动新的虚拟机的话,根盘也会占据这么大。这样看来,镜像文件里面包含了磁盘的分区表信息(注意是磁盘,原镜像里面所有的分区信息都会带着,包含创建的LVM信息),也就说,这个镜像文件原封不动地展开到了新的根磁盘里面。这样的话,如果新分配的根磁盘的大小大于原来的创建时的大小,那么,多余的大小不会被使用。 如下图所示,虽然给根磁盘分配了80多G的空间,但根镜像只使用了其中的20G。如果想要利用这些多余的空间,除了可以把它们创建一个新的分区之外,如果需要更大的根磁盘空间,需要利用LVM的特性来扩容。

Disk /dev/vda: 85.9 GB, 85899345920 bytes, 167772160 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x0009b56e

   Device Boot      Start         End      Blocks   Id  System
/dev/vda1   *        2048     1026047      512000   83  Linux
/dev/vda2         1026048    41943039    20458496   8e  Linux LVM
如下使用的情况
[root@host ~]# df -h
Filesystem               Size  Used Avail Use% Mounted on
/dev/mapper/centos-root   18G  789M   17G   5% /
devtmpfs                 7.8G     0  7.8G   0% /dev
tmpfs                    7.8G     0  7.8G   0% /dev/shm
tmpfs                    7.8G  8.3M  7.8G   1% /run
tmpfs                    7.8G     0  7.8G   0% /sys/fs/cgroup
/dev/vda1                497M  120M  378M  25% /boot

这个时候需要利用fdisk工具来对磁盘进行新分区的建立,而且必须建立成8e格式的分区

fdisk /dev/vda

进入交互式的界面,可以选择m来查看帮助,使用p来打印当前的分区表
使用n创建新分区,但在创建新分区的时候,无法指定分区的Id号,需要在创建完成之后输入t进行分区Id的修改,然后输入8e即可以转成Linux LVM类型的分区。
最后输入w即可将分区表写入到磁盘。(有时候会提示设备忙,写入失败,需要重新启动。这时候重新启动即生效)。

Disk /dev/vda: 85.9 GB, 85899345920 bytes, 167772160 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x0009b56e

   Device Boot      Start         End      Blocks   Id  System
/dev/vda1   *        2048     1026047      512000   83  Linux
/dev/vda2         1026048    41943039    20458496   8e  Linux LVM
/dev/vda3        41943040   167772159    62914560   8e  Linux LVM

由上面的操作可以看到,如果原来制作镜像的时候,使用的分区方式不是使用LVM类型的话,那么在使用大容量根磁盘的时候,就可能没有办法无损对根磁盘进行扩容(但有可能有其它的工具可以无损扩容,但必然会花费大量的时间来修改文件系统)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值