linux磁盘管理(LVM–保姆级教程)

1.LVM原理

LVM 逻辑卷管理通过将底层物理硬盘抽象封装起来,以逻辑卷的形式表现给上层系统,
逻辑卷的大小可以动态调整,而且不会丢失现有的数据,新增的硬盘也不会改变现有上层的逻辑卷

(1)物理磁盘被格式化为PV,空间被分为多个PE
(2)不同的PV加入同个VG,不同的PV的PE全部加入VG的PE池内(卷组)
(3)LV现在就直接可以格式化后被挂载使用
(4)LV的扩展缩减实际上就是增加或减少组成该LV的PE数量,其过程不丢失原来数据

PE为卷组池最小单位,默认4MiB

image

 

2.LVM的创建与扩展删除

创建LVM (逻辑卷是PE的整数倍)

(1)将物理磁盘设备初始化为物理卷

现在我为LINUX系统新增了两块物理硬盘,sdb(20G)  sdc(10G)

************创建
先创建一块磁盘的物理卷 sdb(20G)
[root@localhost ~]# pvcreate /dev/sdb
[root@localhost ~]# pvcreate /dev/sdb /dev/sdc   #创建出多块直接后面跟上就可以了
: -ff 初始硬盘

************查看结果
pvs   #简单查看
pvdisplay   #详细查看

[root@localhost ~]# pvs
  PV         VG     Fmt  Attr PSize   PFree 
  /dev/sda2  centos lvm2 a--  <39.00g  4.00m
  /dev/sdb          lvm2 ---   20.00g 20.00g
有两个物理卷 系统自带和sdb(20G)

(2)创建卷组,并将PV加入卷组池 中

*************创建卷组
[root@localhost ~]# vgcreate linuxbc /dev/sdb    #创建一个卷组池,可以是一块物理卷,也可以是多块物理卷组成
[root@localhost ~]# vgcreate linuxbc /dev/sdb /dev/sdc  #多块数据卷组成一个卷组池(必须是初始化为数据卷且没被其他卷组池使用的硬盘)
*************查看结果
vgs   #简单查看
vgdisplay   #详细查看

 --- Volume group ---
  VG Name               linuxbc   #创建时设置的卷组名称
  System ID             
  Format                lvm2      #版本
  Metadata Areas        1
  Metadata Sequence No  1
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                0
  Open LV               0
  Max PV                0
  Cur PV                1
  Act PV                1
  VG Size               <20.00 GiB  #卷组池大小
  PE Size               4.00 MiB    #PE大小
  Total PE              5119        #PE个数  
  Alloc PE / Size       0 / 0       #使用情况

(3)基于卷组创建逻辑卷

*********创建逻辑卷
[root@localhost ~]# lvcreate -n mylv1 -L 5G linuxbc     #在linuxbc卷组池(总大小为20G,不能超过或者等于)下创建一个大小为5G的mylv1的逻辑卷  一个卷组池可以创建多个逻辑卷


*************查看结果
lvs   #简单查看
lvdisplay   #详细查看

--- Logical volume ---
  LV Path                /dev/centos/root
  LV Name                root
  VG Name                centos
  LV UUID                bHa8AU-wBz5-VOuM-soqI-ZdCe-0qF9-y6Z6GG
  LV Write Access        read/write
  LV Creation host, time localhost, 2022-03-28 13:52:18 +0800
  LV Status              available
  # open                 1
  LV Size                <35.12 GiB
  Current LE             8990
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:0
   
  --- Logical volume ---
  LV Path                /dev/linuxbc/mylv1
  LV Name                mylv1
  VG Name                linuxbc
  LV UUID                Gyin0l-4Sxg-2EHP-rOFq-rXlF-T6JN-Md8rl3
  LV Write Access        read/write
  LV Creation host, time localhost.localdomain, 2022-04-02 16:22:41 +0800
  LV Status              available
  # open                 0
  LV Size                5.00 GiB
  Current LE             1280
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:2

(4)为创建好的逻辑卷创建文件系统

*********格式化创建好的逻辑卷为文件系统
[root@localhost ~]# mkfs.ext4 /dev/linuxbc/mylv1

(5)将格式化好的逻辑卷挂载使用

*********挂载使用文件系统
[root@localhost ~]# mount /dev/linuxbc/mylv1 /data/
*********查看 
[root@localhost ~]# df -h /data/
文件系统                   容量  已用  可用 已用% 挂载点
/dev/mapper/linuxbc-mylv1  4.8G   20M  4.6G    1% /data

**********查看
细心点会发现一个问题 文件系统的目录和我们创建出来的逻辑卷不一致     /dev/mapper/linuxbc-mylv1
这是因为系统为了方便为文件做了目录映射
查看目录就知道了
[root@localhost linuxbc]# ls -l
总用量 0
lrwxrwxrwx. 1 root root 7 4月   2 16:30 mylv1 -> ../dm-2  #实际位置
[root@localhost linuxbc]# cd /dev/mapper/
[root@localhost mapper]# ls
centos-root  centos-swap  control  linuxbc-mylv1
 
不应管他~

(6)删除

***在删除操作中是有顺序要求的,不能直接删除存在逻辑卷的卷组池,也不能直接删除存在卷组池的,物理卷***
(1)先将逻辑卷卸载
[root@localhost ~]# umount -v /data 
umount: /data (/dev/mapper/linuxbc-mylv1) 已卸载
(2)删除逻辑卷
[root@localhost ~]# lvremove /dev/linuxbc/mylv1 
Do you really want to remove active logical volume linuxbc/mylv1? [y/n]: y
  Logical volume "mylv1" successfully removed
(3)根据需求需要才删,删除卷组池
[root@localhost ~]# vgremove linuxbc 
  Volume group "linuxbc" successfully removed
(4)根据需求删除,删除物理卷
[root@localhost ~]# pvremove /dev/sdb
  Labels on physical volume "/dev/sdb" successfully wiped.

1~4 越到后面删除的范围越广泛,生产环境注意合理使用删除命令

3.LVM的拉升与缩小

1.拉伸一个逻辑卷 (当卷组池有额外空闲的空间)

创建好的逻辑卷相当于传统磁盘里面划分好的分区,可以格式化后进行挂载使用,
以后当我的逻辑卷空间不足时便可以在卷组池中为他划分更多的PE,
当卷组池不够时可以使用更多的硬盘组合该卷组池,
实现了服务运行状态下进行分区扩展
优点:逻辑卷的拉伸可以在线执行,不需要卸载逻辑卷
1.保证VG(卷组池)有足够的空闲空间

[root@localhost data]# vgdisplay
2.扩展逻辑卷

[root@localhost data]# lvs       ####查看逻辑卷  mylv1 linuxbc
  LV    VG      Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  root  centos  -wi-ao---- <35.12g                                                    
  swap  centos  -wi-ao----  <3.88g                                                    
  mylv1 linuxbc -wi-ao----   5.00g         
                                             
[root@localhost data]# lsblk     ####查看挂在情况(/data)
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda               8:0    0   40G  0 disk 
├─sda1            8:1    0    1G  0 part /boot
└─sda2            8:2    0   39G  0 part 
  ├─centos-root 253:0    0 35.1G  0 lvm  /
  └─centos-swap 253:1    0  3.9G  0 lvm  [SWAP]
sdb               8:16   0   20G  0 disk 
└─linuxbc-mylv1 253:2    0    5G  0 lvm  /data
sdc               8:32   0   10G  0 disk 
sr0              11:0    1 1024M  0 rom  
 
[root@localhost data]# df -h /data/    ####查看挂载情况
文件系统                   容量  已用  可用 已用% 挂载点
/dev/mapper/linuxbc-mylv1  4.8G   20M  4.6G    1% /data
 
[root@localhost data]# ls -l           ####目录下有数据       
总用量 20
-rw-r--r--. 1 root root    23 4月   2 16:55 aa.txt
drwx------. 2 root root 16384 4月   2 16:30 lost+found
[root@localhost data]# 
 
**********现在直接在线拉伸,看看数据是否会丢失
[root@localhost data]# lvs             ####查看发现原来mylv1逻辑卷只有5G
  LV    VG      Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  root  centos  -wi-ao---- <35.12g                                                    
  swap  centos  -wi-ao----  <3.88g                                                    
  mylv1 linuxbc -wi-ao----  <5.01g                                                    
[root@localhost data]# lvextend -L +5G /dev/linuxbc/mylv1     #####扩展+5G
  Size of logical volume linuxbc/mylv1 changed from <5.01 GiB (1282 extents) to <10.01 GiB (2562 extents).
  Logical volume linuxbc/mylv1 successfully resized.
[root@localhost data]# lvs            #####再次查看mylv1  为10G
  LV    VG      Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  root  centos  -wi-ao---- <35.12g                                                    
  swap  centos  -wi-ao----  <3.88g                                                    
  mylv1 linuxbc -wi-ao---- <10.01g                                                    
[root@localhost data]# ls
aa.txt  lost+found
[root@localhost data]# cat aa.txt      #####查看文件还是存在,证明在线扩展数据没有丢失
wedfijqbfdecuqbrvcqvbc
[root@localhost data]#
3.查看更新后的文件系统

[root@localhost data]# df -h /data/       ######发现逻辑卷扩展了但是文件系统还未更新
文件系统                   容量  已用  可用 已用% 挂载点
/dev/mapper/linuxbc-mylv1  4.8G   20M  4.6G    1% /data


[root@localhost data]# resize2fs /dev/linuxbc/mylv1     ##########更新文件系统大小
resize2fs 1.42.9 (28-Dec-2013)
Filesystem at /dev/linuxbc/mylv1 is mounted on /data; on-line resizing required
old_desc_blocks = 1, new_desc_blocks = 2
The filesystem on /dev/linuxbc/mylv1 is now 2623488 blocks long.

[root@localhost data]# df -h /data/                    ########## 容量10G,现在正常了,到现在额外扩展的空间才可以使用
文件系统                   容量  已用  可用 已用% 挂载点
/dev/mapper/linuxbc-mylv1  9.8G   23M  9.3G    1% /data
[root@localhost data]#
报错:找不到有效的文件系统超级块.
[root@vip data]# resize2fs /dev/centos/root 
resize2fs 1.42.9 (28-Dec-2013)
resize2fs: Bad magic number in super-block 当尝试打开 /dev/centos/root 时
找不到有效的文件系统超级块.
[root@vip data]# resize2fs /dev/centos/root 
resize2fs 1.42.9 (28-Dec-2013)
resize2fs: Bad magic number in super-block 当尝试打开 /dev/centos/root 时
找不到有效的文件系统超级块.


解决:
查看:
[root@vip data]# cat /etc/fstab | grep centos
/dev/mapper/centos-root /                       xfs     defaults        0 0
/dev/mapper/centos-swap swap                    swap    defaults        0 0

挂载:

[root@vip data]# mount /dev/centos/root /
mount: /dev/mapper/centos-root 已经挂载或 / 忙
       /dev/mapper/centos-root 已经挂载到 / 上
       /dev/mapper/centos-root 已经挂载到 /var/lib/docker/containers 上
       /dev/mapper/centos-root 已经挂载到 /var/lib/docker/overlay2 上
[root@vip data]# df -h
文件系统                 容量  已用  可用 已用% 挂载点
devtmpfs                 1.4G     0  1.4G    0% /dev
tmpfs                    1.4G     0  1.4G    0% /dev/shm
tmpfs                    1.4G   11M  1.4G    1% /run
tmpfs                    1.4G     0  1.4G    0% /sys/fs/cgroup
/dev/mapper/centos-root   17G   15G  2.5G   86% /                              #容量17G使用86%
/dev/sda1               1014M  239M  776M   24% /boot
tmpfs                    283M   12K  283M    1% /run/user/42
tmpfs                    283M     0  283M    0% /run/user/0

#执行xfs_growfs命令进行扩磁盘空间               
[root@vip data]# xfs_growfs /dev/centos/root 
meta-data=/dev/mapper/centos-root isize=512    agcount=4, agsize=1113856 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0 spinodes=0
data     =                       bsize=4096   blocks=4455424, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
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 4455424 to 6814720

 
[root@vip data]# df -h
文件系统                 容量  已用  可用 已用% 挂载点
devtmpfs                 1.4G     0  1.4G    0% /dev
tmpfs                    1.4G     0  1.4G    0% /dev/shm
tmpfs                    1.4G   11M  1.4G    1% /run
tmpfs                    1.4G     0  1.4G    0% /sys/fs/cgroup
/dev/mapper/centos-root   26G   15G   12G   56% /                     #完成扩容
/dev/sda1               1014M  239M  776M   24% /boot
tmpfs                    283M   12K  283M    1% /run/user/42
tmpfs                    283M     0  283M    0% /run/user/0

2.拉伸一个卷组 (当卷组池没有额外空闲的空间时,为卷组池新增硬盘)

1.新增硬盘,加入卷组池

我们之前创建的sdc(10G) 空闲硬盘可以使用了
[root@localhost data]# fdisk -l          ####查看

磁盘 /dev/sdb:21.5 GB, 21474836480 字节,41943040 个扇区          #新增的/dev/sdb:20 GB
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节


磁盘 /dev/sda:42.9 GB, 42949672960 字节,83886080 个扇区          #系统硬盘
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x0009accb

   设备 Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048     2099199     1048576   83  Linux
/dev/sda2         2099200    83886079    40893440   8e  Linux LVM

磁盘 /dev/sdc:10.7 GB, 10737418240 字节,20971520 个扇区         #新增的/dev/sdc:10 GB
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节

2.加入卷组池

[root@localhost data]# pvcreate /dev/sdc     #### 将新的硬盘初始化成物理卷
  Physical volume "/dev/sdc" successfully created.
[root@localhost data]# pvs                   #### 查看物理卷,有一块sdc(10G)为分配
  PV         VG      Fmt  Attr PSize   PFree 
  /dev/sda2  centos  lvm2 a--  <39.00g  4.00m
  /dev/sdb   linuxbc lvm2 a--  <20.00g <9.99g         #### 现在"linuxbc"卷组池总大小为20G
  /dev/sdc           lvm2 ---   10.00g 10.00g  

[root@localhost data]# vgextend linuxbc /dev/sdc     #### 将sdc(10G)加入"linuxbc" 卷组池
  Volume group "linuxbc" successfully extended  
[root@localhost data]# vgs                           #### 查看卷组池
  VG      #PV #LV #SN Attr   VSize   VFree 
  centos    1   2   0 wz--n- <39.00g  4.00m
  linuxbc   2   1   0 wz--n-  29.99g 19.98g          #### "linuxbc"卷组池总大小由原来的20G变为了30G,#PV数量为2

3.缩小一个逻辑卷 (必须是离线状态,并按照顺序操作)

缩小一个逻辑卷(危险操作,需谨慎处理,按照步骤,先备份,测试)

1.卸载已经挂载的逻辑卷

[root@localhost /]# df -h /data/       
文件系统                   容量  已用  可用 已用% 挂载点
/dev/mapper/linuxbc-mylv1  9.8G   23M  9.3G    1% /data
[root@localhost /]# umount -v /data                                ####文件系统   
umount: /data (/dev/mapper/linuxbc-mylv1) 已卸载
[root@localhost /]# lvs                                            ####当前mylv1逻辑卷大小为10G
LV    VG      Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
root  centos  -wi-ao---- <35.12g
swap  centos  -wi-ao----  <3.88g
mylv1 linuxbc -wi-a----- <10.01g

2.缩小文件系统

[root@localhost /]# e2fsck -f /dev/linuxbc/mylv1                 ####磁盘检查
e2fsck 1.42.9 (28-Dec-2013)
第一步: 检查inode,块,和大小
第二步: 检查目录结构
第3步: 检查目录连接性
Pass 4: Checking reference counts
第5步: 检查簇概要信息
/dev/linuxbc/mylv1: 12/663552 files (0.0% non-contiguous), 80178/2623488 blocks
[root@localhost /]# resize2fs /dev/linuxbc/mylv1 5G              ####将mylv1文件系统大小设置为 5G  ("注意:此处的5G不是减少5G,而是为他定义新的空间大小为5G")
resize2fs 1.42.9 (28-Dec-2013)
Resizing the filesystem on /dev/linuxbc/mylv1 to 1310720 (4k) blocks.
The filesystem on /dev/linuxbc/mylv1 is now 1310720 blocks long.

3.缩小LV,并查看结果

####缩小LV     (之前将mylv1文件系统大小设置为 5G,那么会多出5G空间,这5G是我们可以减少的,为了避免剩下的空间不足5G,导致逻辑卷损坏,文件丢失我们只抽走4G,留下容错空间)
注意注意注意
[root@localhost /]# lvreduce -L -4G /dev/linuxbc/mylv1      ####预留容错空间      
WARNING: Reducing active logical volume to <6.01 GiB.
THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce linuxbc/mylv1? [y/n]: y        #y
Size of logical volume linuxbc/mylv1 changed from <10.01 GiB (2562 extents) to <6.01 GiB (1538 extents).
Logical volume linuxbc/mylv1 successfully resized.
[root@localhost /]# lvdisplay                               ####查看逻辑卷大小
--- Logical volume ---
LV Path                /dev/linuxbc/mylv1
LV Name                mylv1
VG Name                linuxbc
LV UUID                Gyin0l-4Sxg-2EHP-rOFq-rXlF-T6JN-Md8rl3
LV Write Access        read/write
LV Creation host, time localhost.localdomain, 2022-04-02 16:22:41 +0800
LV Status              available
open                 0
LV Size                <6.01 GiB                           ####变为了6G
Current LE             1538
Segments               1
Allocation             inherit
Read ahead sectors     auto
currently set to     8192
Block device           253:2

4.挂载

[root@localhost /]# mount /dev/linuxbc/mylv1 /data/         ####重新挂载逻辑卷
[root@localhost /]# ls /data/
aa.txt  lost+found
[root@localhost /]# cat /data/aa.txt                        ####查看数据还在
wedfijqbfdecuqbrvcqvbc
[root@localhost /]# df -h /data/                            ####空间为5G是正常的,我们有1G容错空间没启用,生产环境可以不用留那么大
文件系统                   容量  已用  可用 已用% 挂载点
/dev/mapper/linuxbc-mylv1  4.8G   20M  4.6G    1% /data

4.缩小卷组 (抽出多余空间的硬盘)

注意:在缩小前查看,VG(卷组池)的空闲空间,空闲空间必须大于抽出的磁盘空间,才能将硬盘成功抽离
[root@localhost /]# vgs          #### 查看空间  剩余空间VFree:23.98G  大于我们要抽离的sdc(10G)  可以抽离
  VG      #PV #LV #SN Attr   VSize   VFree 
  centos    1   2   0 wz--n- <39.00g  4.00m
  linuxbc   2   1   0 wz--n-  29.99g 23.98g        #### 卷组池由两个PV组成

[root@localhost /]# vgreduce linuxbc /dev/sdc      #### 抽离sdc硬盘    ***一定要仔细别搞错***
  Removed "/dev/sdc" from volume group "linuxbc"
[root@localhost /]# vgs                           
  VG      #PV #LV #SN Attr   VSize   VFree  
  centos    1   2   0 wz--n- <39.00g   4.00m
  linuxbc   1   1   0 wz--n- <20.00g <13.99g       #### 查看卷组池  空闲空间VFree少了10G  PV变为了一个
[root@localhost /]# pvs                            #### 查看物理卷已经变为空闲,可以删除物理卷
  PV         VG      Fmt  Attr PSize   PFree  
  /dev/sda2  centos  lvm2 a--  <39.00g   4.00m
  /dev/sdb   linuxbc lvm2 a--  <20.00g <13.99g
  /dev/sdc           lvm2 ---   10.00g  10.00g
[root@localhost /]# pvremove /dev/sdc              #### 删除物理卷
  Labels on physical volume "/dev/sdc" successfully wiped.
[root@localhost /]# pvs                
  PV         VG      Fmt  Attr PSize   PFree  
  /dev/sda2  centos  lvm2 a--  <39.00g   4.00m
  /dev/sdb   linuxbc lvm2 a--  <20.00g <13.99g

[root@localhost /]# ls /data/                      #### 数据存在
aa.txt  lost+found
© 版权声明
THE END
喜欢就支持一下吧
点赞16 分享
评论 共1条
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片