7、LVM逻辑卷详解
一、原理
许多Linux使用者安装操作系统时都会遇到这样的困境:如何精确评估和分配各个硬盘分区的容量,如果当初评估不准确,一旦系统分区不够用时可能不得不备份、删除相关数据,甚至被迫重新规划分区并重装操作系统,以满足应用系统的需要。
LVM是Linux环境中对磁盘分区进行管理的一种机制,是建立在硬盘和分区之上、文件系统之下的一个逻辑层,可提高磁盘分区管理的灵活性。RHEL5默认安装的分区格式就是LVM逻辑卷的格式,需要注意的是/boot分区不能基于LVM创建,必须独立出来。
1)LVM原理
要想理解好LVM的原理,我们必须首先要掌握4个基本的逻辑卷概念。
- PE (Physical Extend) 物理拓展
- PV (Physical Volume) 物理卷
- VG (Volume Group) 卷组
- LV (Logical Volume) 逻辑卷
使用LVM对磁盘进行动态管理以后,我们是以逻辑卷的方式呈现给上层的服务的。所以我们所有的操作目的,其实就是去创建一个LV(Logical Volume),逻辑卷就是用来取代我们之前的分区,我们通过对逻辑卷进行格式化,然后进行挂载操作就可以使用了。那么LVM的工作原理是什么呢?所谓无图无真相,咱们下面通过图来对逻辑卷的原理进行解释!!
1、将我们的物理硬盘格式化成PV(Physical Volume)
我们看到,这里有两块硬盘,一块是sda,另一块是sdb,在LVM磁盘管理里,我首先要将这两块硬盘格式化为我们的PV(Physical Volume),也就是我们的物理卷,其实格式化物理卷的过程中LVM是将底层的硬盘划分为了一个一个的PE(Physical Extend),我们的LVM磁盘管理中PE的默认大小是4M大小,其实PE就是我们逻辑卷管理的最基本单位。比如说我有一个400M的硬盘,那么在将其格式化成PV的时候,其实际就是将这块物理硬盘划分成了100个的PE,因为PE默认的大小就是4M。这个就是我们的第一步操作。
2、创建一个VG(Volume Group)
在将硬盘格式化成PV以后,我们第二步操作就是创建一个卷组,也就是VG(Volume Group),卷组在这里我们可以将其抽象化成一个空间池,VG的作用就是用来装PE的,我们可以把一个或者多个PV加到VG当中,因为在第一步操作时就已经将该硬盘划分成了多个PE,所以将多个PV加到VG里面后,VG里面就存放了许许多多来自不同PV中的PE,我们通过上面的图片就可以看到,我们格式化了两块硬盘,每个硬盘分别格式化成了3个PE,然后将两块硬盘的PE都加到了我们的VG当中,那么我们的VG当中就包含了6个PE,这6个PE就是两个硬盘的PE之和。通常创建一个卷组的时候我们会为其取一个名字,也就是该VG的名字。
3、基于VG创建要使用的LV
【注意】PV以及VG创建好以后我们是不能够直接使用的,因为PV、VG是我们逻辑卷底层的东西,我们其实最后使用的是在VG基础上创建的LV(Logical Volume),所以第三步操作就是基于VG来创建我们最终要使用的LV。
当我们创建好我们的LV(Logical Volume)以后,这个时候我们创建LV其实就是从VG中拿出我们指定数量的PE,还是拿上图来说,我们看到我们此时的VG里面已经拥有了6个PE,这时候我们创建了我们的第一个逻辑卷,它的大小是4个PE的大小,也就是16M(因为一个PE的默认大小是4M),而这4个PE有三个是来自于第一块硬盘,而另外一个PE则是来自第二块硬盘。当我们创建第二个逻辑卷时,它的大小就最多只有两个PE的大小了,因为其中的4个PE已经分配给了我们的第一个逻辑卷。
所以创建逻辑卷其实就是我们从VG中拿出我们指定数量的PE,VG中的PE可以来自不同的PV,我们可以创建的逻辑卷的大小取决于VG当中PE存在的数量,并且我们创建的逻辑卷其大小一定是PE的整数倍(即逻辑卷的大小一定要是4M的整数倍)。
4、将我们创建好的LV进行文件系统的格式化,然后挂载使用
在创建好LV以后,这个时候我们就能够对其进行文件系统的格式化了,我们最终使用的就是我们刚创建好的LV,其就相当于传统的文件管理的分区,我们首先要对其进行文件系统的格式化操作,然后通过mount命令对其进行挂载,这个时候我们就能够像使用平常的分区一样来使用我们的逻辑卷了。
我们在创建好LV以后,我们会在 /dev 目录下看到我们的LV信息,例如 /dev/vgname/lvname, 我们每创建一个VG,其会在/dev目录下创建一个以该VG名字命名的文件夹,在该VG的基础上创建好LV以后,我们会在这个VG目录下多出一个以LV名字命名的逻辑卷。
下面我们来对整个LVM的工作原理进行一个总结:
- 物理磁盘被格式化为PV,空间被划分为一个个的PE
- 不同的PV加入到同一个VG中,不同PV的PE全部进入到了VG的PE池内
- LV基于PE创建,大小为PE的整数倍,组成LV的PE可能来自不同的物理磁盘
- LV直接可以格式化后挂载使用
- LV的扩充缩减实际上就是增加或减少组成该LV的PE数量,其过程不会丢失原始数据
我们看到,我们这里如果要对LV进行扩充,直接加进来一块sdc硬盘,然后将其格式化成PE,然后将该PV加入到了VG当中,这个时候我们就可以通过增加LV中PE的数量来动态的对LV进行扩充了,只要我们的LV的大小不要超过我们VG空余空间的大小就行!
二、创建LVM逻辑卷
熟悉了LVM的工作原理,首先是要将我们的物理硬盘格式化成PV,然后将多个PV加入到创建好的VG中,最后通过VG创建我们的LV。
三、拉伸一个逻辑卷
我们知道相比于传统磁盘管理方式的各种问题,使用LVM逻辑卷来管理我们的磁盘,我们可以对其进行动态的管理。在传统的磁盘管理方式中,我们如果出现分区大小不足的情况下,我们此时只能通过加入一块物理硬盘,然后对其进行分区,因为加入的硬盘作为独立的文件系统存在,所以对原有分区并没有影响,如果此时我们需要扩大分区,就只能先将之前的分区先卸载掉,然后将所有的信息转移到新的分区下,最后再将新的分区挂载上去,如果是在生产环境下,这样是不可想象的,正因为如此,我们才出现了LVM的磁盘管理方式,可以动态的对我们的磁盘进行管理。
我们首先来看下动态拉伸一个逻辑卷的示意图:
我们从上图可以看到,我们在对逻辑卷进行拉伸时,其实际就是向逻辑卷中增加PE的数量,而PE的数量是由VG中剩余PE的数量所决定的。
【注意:】逻辑卷的拉伸操作可以在线进行,不需要卸载掉我们的逻辑卷
这样的好处就是当我们的逻辑卷的大小不够用时,我们不需要对其进行卸载,就可以动态的增加我们的逻辑卷的大小,并不会对我们的系统产生任何影响。例如如果我们的服务器上运行着一个重要的服务或者数据库,并要求我们7*24小时不间断保持在线,那么这样的动态增加逻辑卷的大小就非常的有必要了。
四、实战演练
拉伸逻辑卷的步骤:
因为我们的逻辑卷的拉伸操作是可以在线进行的,所以这里我们先将逻辑卷挂载上,并在使用情况下动态的拉伸我们的逻辑卷
1)磁盘主分区分区
第一步:添加磁盘
实验环境:centos7.4 IP:192.168.80.120 新增磁盘:2T
第二步、识别磁盘
!!!重启虚拟机才能看见新增磁盘
#扫描 SCSI总线并添加 SCSI 设备
for host in $(ls /sys/class/scsi_host) ; do echo "- - -" > /sys/class/scsi_host/$host/scan; done
#重新扫描 SCSI 总线
for scsi_device in $(ls /sys/class/scsi_device/); do echo 1 > /sys/class/scsi_device/$scsi_device/device/rescan; done#查看已添加的磁盘,能够看到sdb说明添加成功
lsblk
第三步、主分区分区
# yum install util-linux-ng
[root@localhost ~]# fdisk /dev/sdb
d delete a partition #删除分区l list known partition types #显示已知的分区类型m print this menu #显示帮助菜单n add a new partition #添加分区 p print the partition table #查看分区表q quit without saving changes #不保存退胡t change a partition's system id #该表分区的系统idw write table to disk and exit #保存分区并退出命令(输入 m 获取帮助):
命令(输入 m 获取帮助)n #添加一个分区
Partition type:p primary (0 primary, 0 extended, 4 free) #主分区e extended #扩展分区
Select (default p):
Using default response p
分区号 (1-4,默认 1): #1-4个主分区 #选择分区起点柱面 (默认为2G,如果选择2048就是2048到多少,如果选择其它数字,例如+200,然后分区区+200G,意思就是200G-400G分一个区
起始 扇区 (2048-104857599,默认为 2048): #默认开始最合适
将使用默认值 2048#!!!#设置分区大小20G,+表示往起点后添加,-表示往起点前添加分区
Last 扇区, +扇区 or +size{K,M,G} (2048-104857599,默认为 104857599):+20G
分区 1 已设置为 Linux 类型,大小设为 20 GiB#修改磁盘格式
命令(输入 m 获取帮助):t
已选择分区 1
Hex 代码(输入 L 列出所有代码):L
。。。8 AIX 4e QNX4.x 第2部分 8e Linux LVM df BootIt 9 AIX 可启动 4f QNX4.x 第3部分 93 Amoeba e1 DOS 访问
。。。
#输入8e将格式转化为LVM
Hex 代码(输入 L 列出所有代码):8e
已将分区“Linux”的类型更改为“Linux LVM”
命令(输入 m 获取帮助):p设备 Boot Start End Blocks Id System
/dev/sdb1 2048 41945087 20971520 8e Linux LVM#创建第二个分区
命令(输入 m 获取帮助):n
Partition type:p primary (1 primary, 0 extended, 3 free)e extended
Select (default p): p
分区号 (2-4,默认 2):
起始 扇区 (62916608-104857599,默认为 62916608):
将使用默认值 62916608
Last 扇区, +扇区 or +size{K,M,G} (62916608-104857599,默认为 104857599):
将使用默认值 104857599
分区 2 已设置为 Linux 类型,大小设为 20 GiB#输入8e转化磁盘格式为LVM
命令(输入 m 获取帮助):t
Hex 代码(输入 L 列出所有代码):L
Hex 代码(输入 L 列出所有代码):8e
已将分区“Linux”的类型更改为“Linux LVM”
命令(输入 m 获取帮助):p设备 Boot Start End Blocks Id System
/dev/sdb1 2048 62916607 31457280 8e Linux LVM
/dev/sdb2 62916608 104857599 20970496 8e Linux LVM#保存退出
命令(输入 m 获取帮助):w
第三步:分扩展分区
1、分200G扩展分区
2、输入l开始逻辑分区
3、主分区和逻辑分区完毕按w保存
2)创建逻辑卷
将新创建的两个分区/dev/sdb1 /dev/sdb2转化成物理卷,主要是添加LVM属性信息并划分PE存储单元.
[root@localhost ~]# pvcreate /dev/sdb1 /dev/sdb2Physical volume "/dev/sdb1" successfully created.Physical volume "/dev/sdb2" successfully created.[root@localhost ~]# pvsPV VG Fmt Attr PSize PFree /dev/sda2 centos lvm2 a-- <49.54g 4.00m/dev/sdb1 lvm2 --- 30.00g 30.00g/dev/sdb2 lvm2 --- <20.00g <20.00g[root@localhost ~]# pvdisplay
3)创建卷组
创建卷组 vgdata ,并将刚才创建好的两个物理卷加入该卷组.可以看出默认PE大小为4MB,PE是卷组的最小存储单元.可以通过 –s参数修改大小。
[root@localhost ~]# vgcreate vgdata /dev/sdb1 /dev/sdb2Volume group "vgdata" successfully created[root@localhost ~]# vgsVG #PV #LV #SN Attr VSize VFree centos 1 3 0 wz--n- <49.54g 4.00mvgdate 2 0 0 wz--n- 49.99g 49.99g
[root@localhost ~]# vgdisplay
4)创建逻辑卷
从物理卷vgdata上面分割20G给新的逻辑卷vgdata1
[root@localhost ~]# lvcreate -L 20G -n vgdata1 vgdata Logical volume "vgdata1" created.[root@localhost ~]# lvsLV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convertdata centos -wi-ao---- 9.03g root centos -wi-ao---- 40.00g swap centos -wi-ao---- 512.00m vgdata1 vgdata -wi-a----- 20.00g [root@localhost ~]# lvdisplay
5)格式化
使用mkfs.ext4命令在逻辑卷lvdata1上创建ext4文件系统.
[root@localhost ~]# mkfs.ext4 /dev/vgdata/vgdata1
6)挂载
将创建好的文件系统/data1挂载到/data1上.(创建好之后,会在/dev/vgdata/生成一个软连接名字为”卷组-逻辑卷”)
[root@localhost ~]# mount --helpmount [-lhV]mount -a [选项]mount [选项] [--source] <源> | [--target] <目录>mount [选项] <源> <目录>mount <操作> <挂载点> [<目标>]
选项:-a, --all 挂载 fstab 中的所有文件系统-c, --no-canonicalize 不对路径规范化-f, --fake 空运行;跳过 mount(2) 系统调用-F, --fork 对每个设备禁用 fork(和 -a 选项一起使用)-T, --fstab <路径> /etc/fstab 的替代文件-h, --help 显示此帮助并退出-i, --internal-only 不调用 mount.<类型> 助手程序-l, --show-labels 列出所有带有指定标签的挂载-n, --no-mtab 不写 /etc/mtab-o, --options <列表> 挂载选项列表,以英文逗号分隔-O, --test-opts <列表> 限制文件系统集合(和 -a 选项一起使用)-r, --read-only 以只读方式挂载文件系统(同 -o ro)-t, --types <列表> 限制文件系统类型集合--source <源> 指明源(路径、标签、uuid)--target <目标> 指明挂载点-v, --verbose 打印当前进行的操作-V, --version 显示版本信息并退出-w, --rw, --read-write 以读写方式挂载文件系统(默认)#创建挂载目录
[root@localhost ~]# mkdir -p /data-test1
#挂载
[root@localhost ~]# mount /dev/vgdata/vgdata1 /data-test1/
#查看挂载目录详情
[root@localhost ~]# mount |grep data-test1
/dev/mapper/vgdata-vgdata1 on /data-test1 type ext4 (rw,relatime,data=ordered)
#查看是否生成卷组-逻辑卷
[root@localhost ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 50G 0 disk
├─sda1 8:1 0 474M 0 part /boot
└─sda2 8:2 0 49.5G 0 part ├─centos-root 253:0 0 40G 0 lvm /├─centos-swap 253:1 0 512M 0 lvm [SWAP]└─centos-data 253:2 0 9G 0 lvm /data
sdb 8:16 0 50G 0 disk
├─sdb1 8:17 0 30G 0 part
│ └─vgdata-vgdata1 253:3 0 20G 0 lvm /data-test1
└─sdb2 8:18 0 20G 0 part
sr0 11:0 1 4.2G 0 rom
7)永久挂载
[root@localhost ~]# umount --help
用法:umount [-hV]umount -a [选项]umount [选项] <源> | <目录>选项:-a, --all 卸载所有文件系统-A, --all-targets 卸载当前名字空间内指定设备对应的所有挂臷点-c, --no-canonicalize 不对路径规范化-d, --detach-loop 若挂臷了回环设备,也释放该回环设备--fake 空运行;跳过 umount(2) 系统调用-f, --force 强制卸载(遇到不响应的 NFS 系统时)-i, --internal-only 不调用 umount.<类型> 辅助程序-n, --no-mtab 不写 /etc/mtab-l, --lazy 立即断开文件系统,所有清理以后执行-O, --test-opts <列表> 限制文件系统集合(和 -a 选项一起使用)-R, --recursive 递归卸载目录及其子对象-r, --read-only 若卸载失败,尝试以只读方式重新挂臷-t, --types <列表> 限制文件系统集合-v, --verbose 打印当前进行的操作-h, --help 显示此帮助并退出-V, --version 输出版本信息并退出#永久挂载
# vim /etc/fstab 设置系统自动挂载硬盘,加入一行:
cat >>/etc/fstab<<EOF
/dev/vgdata/vgdata1 /data-test1 ext4 defaults 0 0
#设备(UUID或路径指定) 挂载点 文件系统类型 defaults 转储标志 fsck顺序
EOFcat >>/etc/fstab<<EOF
UUID="63adf2e5-ffce-4021-863c-e6b0f2cbf895" /data-test1 ext4 defaults 0 0
EOF
【挂载参数详解】
- 第一列可以是实际分区名,也可以是实际UUID。
- 第二列为挂载目录
- 第三列为此分区的文件系统类型
#Linux可以使用ext2、ext3等类型,此字段须与分区格式化时使用的类型相同。也可以使用 auto 这一特殊的语法,使系统自动侦测目标分区的分区类型。auto通常用于可移动设备的挂载
- 第四列是挂载的选项,用于设置挂载的参数。
- 第五列是dump备份设置
#当其值设置为1时,将允许dump备份程序备份;设置为0时,忽略备份操作;
- 第六列是fsck磁盘检查设置。
#其值是一个顺序。当其值为0时,永远不检查;而 / 根目录分区永远都为1。其它分区从2开始,数字越小越先检查,如果两个分区的数字相同,则同时检查。
8)查看UUID
#第一个字段最好用UUID,因为路径中块设备标识符可能会发生变化。
sudo blkid 路径#查看最新挂载磁盘UUID
[root@localhost ~]# sudo blkid /dev/vgdata/vgdata1
/dev/vgdata/vgdata1: UUID="63adf2e5-ffce-4021-863c-e6b0f2cbf895" TYPE="ext4"
UUID查看方法如下:
- 第二个字段要先手动创建挂载点目录,不会自动创建。
- 第三个字段为文件系统类型,由之前的mkfs确定。
- 第四个字段为挂载时应该应用于设备以便自定义行为的选项列表。defaults为常用选项,其他记录在mount man page中。
- 第五个为转储标志,与dump命令结合生成备份。
- 第六个为fsck顺序字段,确定了文件系统未完全卸载时是否启动时运行fsck以及检查多个磁盘时检查的顺序。
#不开机使得配置生效
mount -a
- 此命令会挂载/etc/fstab中新文件系统,如该文件存在错误,会无法启动计算机
- 所以重启前必须输入此命令,如果报错应在重启前改正错误。
9)测试重启是否生效
为了查看/etc/fstab是否设置正确,可以先卸载逻辑卷data1,然后使用mount –a 使内核重新读取/etc/fstab,看是否能够自动挂载.
#查看
上一次登录:日 11月 22 15:51:46 CST 2020pts/0 上
[root@localhost ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sdb 8:16 0 50G 0 disk
├─sdb1 8:17 0 30G 0 part
│ └─vgdata-vgdata1 253:3 0 20G 0 lvm /data-test1
└─sdb2 8:18 0 20G 0 part
sr0 11:0 1 4.2G 0 rom #卸载
[root@localhost ~]# umount /jia-test/
#查看是否卸载
#查看
上一次登录:日 11月 22 15:51:46 CST 2020pts/0 上
[root@localhost ~]# lsblk
sdb 8:16 0 50G 0 disk
├─sdb1 8:17 0 30G 0 part
│ └─vgdata-vgdata1 253:3 0 20G 0 lvm #卸载挂载
└─sdb2 8:18 0 20G 0 part
sr0 11:0 1 4.2G 0 rom
#让/etc/fstab生效
[root@localhost ~]# mount -a#查看是否自动挂载
[root@localhost ~]# mount |grep vgdata
/dev/mapper/vgdata-vgdata1 on /data-test1 type ext4 (rw,relatime,data=ordered)#闲着没事,检测一下硬盘坏道吧
badblocks -v /dev/sdb1 > result.txt
五、挂载目录授权
【拓展】
- mount -t:用来指定挂载的分区类型。
- mount -o:用来指定挂载的分区有哪些特性,即上面/etc/fstab
#分区
[root@localhost ~]# fdisk /dev/sdb #创建物理卷
[root@localhost ~]# pvcreate /dev/sdb1Physical volume "/dev/sdb1" successfully created.
[root@localhost ~]# pvsPV VG Fmt Attr PSize PFree /dev/sdb1 lvm2 --- <40.00g <40.00g#创建卷组
[root@localhost ~]# vgcreate vgdata /dev/sdb1Volume group "vgdata" successfully created
[root@localhost ~]# vgsVG #PV #LV #SN Attr VSize VFree vgdata 1 0 0 wz--n- <40.00g <40.00g#创建逻辑卷
[root@localhost ~]# lvcreate -L 20G -n vgdata1 vgdata Logical volume "vgdata1" created.
[root@localhost ~]# lvsLV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convertvgdata1 vgdata -wi-a----- 20.00g
#格式化
[root@localhost ~]# mkfs.ext4 /dev/vgdata/vgdata1
#创建挂载目录
[root@localhost ~]# mkdir -p /data-test1#授予只读权限
[root@localhost ~]# mount -o ro,sync /dev/vgdata/vgdata1 /data-test1/ #由于-o选项指定了ro参数,所以该分区是只读的#查看是否授予
[root@localhost ~]# mount |grep vgdata1
/dev/mapper/vgdata-vgdata1 on /data-test1 type ext4 (ro,relatime,sync,seclabel,data=ordered)#创建目录提示不能创建,只能读
[root@localhost ~]# mkdir /data-test1/jia1
mkdir: cannot create directory ‘/data-test1/jia1’: Read-only file system #由于-o选项指定了ro参数,所以该分区是只读的#卸载挂载
[root@localhost ~]# umount /data-test1#重新挂载
[root@localhost ~]# mount /dev/vgdata/vgdata1 /data-test1/#创建目录
[root@localhost ~]# mkdir /data-test1/jia1#查看目录
[root@localhost ~]# ls /data-test1/
jia1 lost+found
六、逻辑卷lvdata1扩展
给逻辑卷增加空间并不会影响以前空间的使用,所以无需卸载文件系统,直接通过命令lvextend –L +10G/dev/vgdata/data1或者lvextend –l 2.5G /dev/vgdata/lvdata1 给lvdata1增加10GM空间(lvdata1目前是2G空间)设置完成之后,记得使用resize2fs命令来同步文件系统。
#查看
[root@localhost ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sdb 8:16 0 50G 0 disk
├─sdb1 8:17 0 30G 0 part
│ └─vgdata-vgdata1 253:3 0 20G 0 lvm /jia-test #20G
└─sdb2 8:18 0 20G 0 part
sr0 11:0 1 4.2G 0 rom #给lvdata1扩容10G
lvextend -L +10G /dev/vgdata/vgdata1
resize2fs /dev/vgdata/vgdata1#查看,确认是否扩展成功
[root@localhost ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sdb 8:16 0 50G 0 disk
├─sdb1 8:17 0 30G 0 part
│ └─vgdata-vgdata1 253:3 0 30G 0 lvm /jia-test
└─sdb2 8:18 0 20G 0 part └─vgdata-vgdata1 253:3 0 30G 0 lvm /jia-test #30G
sr0 11:0 1 4.2G 0 rom
七、扩大卷组
当卷组不够用的情况下,如何扩大卷组?
重新从第二块硬盘上创建一个分区sdc1,具体操作步骤省略。并将创建好的逻辑卷加入到已经存在的卷组vgdata中。通过pvs命令查看是否成功。
#添加20G硬盘
#识别
#扫描 SCSI总线并添加 SCSI 设备
for host in $(ls /sys/class/scsi_host) ; do echo "- - -" > /sys/class/scsi_host/$host/scan; done
#重新扫描 SCSI 总线
for scsi_device in $(ls /sys/class/scsi_device/); do echo 1 > /sys/class/scsi_device/$scsi_device/device/rescan; done
#查看已添加的磁盘,能够看到sdb说明添加成功
lsblk
#分区
[root@localhost ~]# fdisk /dev/sdc
命令(输入 m 获取帮助):n
Partition type:p primary (0 primary, 0 extended, 4 free)e extended
Select (default p): p
分区号 (1-4,默认 1):
起始 扇区 (2048-41943039,默认为 2048):
将使用默认值 2048
Last 扇区, +扇区 or +size{K,M,G} (2048-41943039,默认为 41943039):
将使用默认值 41943039
分区 1 已设置为 Linux 类型,大小设为 20 GiB命令(输入 m 获取帮助):t
已选择分区 1
Hex 代码(输入 L 列出所有代码):l
Hex 代码(输入 L 列出所有代码):8e
已将分区“Linux”的类型更改为“Linux LVM”
命令(输入 m 获取帮助):p设备 Boot Start End Blocks Id System
/dev/sdc1 2048 41943039 20970496 8e Linux LVM
命令(输入 m 获取帮助):w[root@localhost ~]# lsblk
sdb 8:16 0 50G 0 disk
├─sdb1 8:17 0 30G 0 part
│ └─vgdata-vgdata1 253:3 0 30G 0 lvm /jia-test
└─sdb2 8:18 0 20G 0 part └─vgdata-vgdata1 253:3 0 30G 0 lvm /jia-test
sdc 8:32 0 20G 0 disk
└─sdc1 8:33 0 20G 0 part
sr0 11:0 1 4.2G 0 rom #创建逻辑卷pvcreate /dev/sdc1
#创建好的逻辑卷加入到已经存在的卷组vgdata中
[root@localhost ~]# vgextend vgdata /dev/sdc1Volume group "vgdata" successfully extended#使用vgs查看是否加入成功
[root@localhost ~]# vgsVG #PV #LV #SN Attr VSize VFree centos 1 3 0 wz--n- <49.54g 4.00mvgdata 3 1 0 wz--n- <69.99g <39.99g #由40G变成了60G
八、减少逻辑卷空间(xfs不支持)
当硬盘空间不够用的情况下,如果减少逻辑卷的空间释放给其他逻辑卷使用?
- 减少逻辑卷空间,步骤如下
- 先卸载逻辑卷data1
- 然后通过e2fsck命令检测逻辑卷上空余的空间。
- 使用resize2fs将文件系统减少到10G。
- 再使用lvreduce命令将逻辑卷减少到10G。
注意:文件系统大小和逻辑卷大小一定要保持一致才行。如果逻辑卷大于文件系统,由于部分区域未格式化成文件系统会造成空间的浪费。如果逻辑卷小于文件系统,哪数据就出问题了。
完成之后,就可以通过mount命令挂载重新使用了。
#卸载挂载逻辑卷
umount /data-test1/#通过e2fsck命令检测逻辑卷上空余的空间
[root@localhost ~]# e2fsck -f /dev/vgdata/vgdata1
e2fsck 1.42.9 (28-Dec-2013)
第一步: 检查inode,块,和大小
第二步: 检查目录结构
第3步: 检查目录连接性
Pass 4: Checking reference counts
第5步: 检查簇概要信息
/dev/vgdata/vgdata1: 11/1966080 files (0.0% non-contiguous), 167442/7864320 blocks#使用resize2fs将文件系统减少到10G
[root@localhost ~]# resize2fs /dev/vgdata/vgdata1 10G
resize2fs 1.42.9 (28-Dec-2013)
Resizing the filesystem on /dev/vgdata/vgdata1 to 2621440 (4k) blocks.
The filesystem on /dev/vgdata/vgdata1 is now 2621440 blocks long.#再使用lvreduce命令将逻辑卷减少到10G
[root@localhost ~]# lvreduce -L 10G /dev/vgdata/vgdata1 WARNING: Reducing active logical volume to 10.00 GiB.THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce vgdata/vgdata1? [y/n]: yesSize of logical volume vgdata/vgdata1 changed from 30.00 GiB (7680 extents) to 10.00 GiB (2560 extents).Logical volume vgdata/vgdata1 successfully resized.#通过 mount重新挂载使用
[root@localhost ~]# mount /dev/vgdata/vgdata1 /jia-test/
[root@localhost ~]# lsblk |grep jia-test
│ └─vgdata-vgdata1 253:3 0 10G 0 lvm /jia-test #只剩下10G
九、磁盘故障处理(未完成)
如果某一块磁盘或者分区故障了如何将数据快速转移到相同的卷组其他的空间去?
- 通过pvmove命令转移空间数据。
- 通过vgreduce命令将即将坏的磁盘或者分区从卷组vgdata里面移除除去。
- 通过pvremove命令将即将坏的磁盘或者分区从系统中删除掉。
- 手工拆除硬盘或者通过一些工具修复分区。
#扫描 SCSI总线并添加 SCSI 设备
for host in $(ls /sys/class/scsi_host) ; do echo "- - -" > /sys/class/scsi_host/$host/scan; done
#重新扫描 SCSI 总线
for scsi_device in $(ls /sys/class/scsi_device/); do echo 1 > /sys/class/scsi_device/$scsi_device/device/rescan; done#查看已添加的磁盘,能够看到sdb说明添加成功
lsblk#分区
[root@localhost ~]# fdisk /dev/sdb
#创建物理卷
[root@localhost ~]# pvcreate /dev/sdc1Physical volume "/dev/sdb1" successfully created.
[root@localhost ~]# pvsPV VG Fmt Attr PSize PFree /dev/sdb1 lvm2 --- <40.00g <40.00g#创建卷组
[root@localhost ~]# vgcreate vgdata2 /dev/sdc1Volume group "vgdata" successfully created
[root@localhost ~]# vgsVG #PV #LV #SN Attr VSize VFree vgdata 1 0 0 wz--n- <40.00g <40.00g#创建逻辑卷
[root@localhost ~]# lvcreate -L 20G -n vgdata vgdata1Logical volume "vgdata1" created.
[root@localhost ~]# lvsLV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convertvgdata1 vgdata -wi-a----- 20.00g
#格式化
[root@localhost ~]# mkfs.ext4 /dev/vgdata/vgdata1
#创建挂载目录
十、删除整个逻辑卷
- 先通过umount命令卸载掉逻辑卷lvdata1
- 修改/etc/fstab里面逻辑卷的挂载信息,否则系统有可能启动不起来。
- 通过lvremove 删除逻辑卷lvdata1
- 通过vgremove 删除卷组vgdata
- 通过pvremove 将物理卷转化成普通分区。
#取消挂载
[root@localhost ~]# umount /dev/vgdata/vgdata1 #修改/etc/fstab里面逻辑卷的挂载信息,将其注释掉,或者删除。
[root@localhost ~]# vim /etc/fstab
#UUID="63adf2e5-ffce-4021-863c-e6b0f2cbf895" /data-test1 ext4 defaults 0 0
[root@localhost ~]# mount -a#通过lvremove 删除逻辑卷lvdata1
[root@localhost ~]# lvremove /dev/vgdata/vgdata1
Do you really want to remove active logical volume vgdata/vgdata1? [y/n]: yLogical volume "vgdata1" successfully removed#通过vgremove 删除卷组vgdata
[root@localhost ~]# vgremove vgdataVolume group "vgdata" successfully removed#通过pvremove 将物理卷转化成普通分区
[root@localhost ~]# pvremove /dev/sdb1 /dev/sdb2 /dev/sdc1 Labels on physical volume "/dev/sdb1" successfully wiped.Labels on physical volume "/dev/sdb2" successfully wiped.Labels on physical volume "/dev/sdc1" successfully wiped.#查看发现已经删除
[root@localhost ~]# vgsVG #PV #LV #SN Attr VSize VFreecentos 1 3 0 wz--n- <49.54g 4.00m
[root@localhost ~]# pvsPV VG Fmt Attr PSize PFree/dev/sda2 centos lvm2 a-- <49.54g 4.00m
[root@localhost ~]# lvsLV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convertdata centos -wi-ao---- 9.03g root centos -wi-ao---- 40.00g swap centos -wi-ao---- 512.00m
删除完了,别忘了修改分区的id标识。修改成普通Linux分区即可。
#修改分区的id标识。修改成普通Linux分区即可
[root@localhost ~]# fdisk /dev/sdb
命令(输入 m 获取帮助):p设备 Boot Start End Blocks Id System
/dev/sdb1 2048 62916607 31457280 8e Linux LVM
/dev/sdb2 62916608 104857599 20970496 8e Linux LVM命令(输入 m 获取帮助):t
分区号 (1,2,默认 2):1
Hex 代码(输入 L 列出所有代码):83
已将分区“Linux LVM”的类型更改为“Linux”命令(输入 m 获取帮助):t
分区号 (1,2,默认 2):2
Hex 代码(输入 L 列出所有代码):83
已将分区“Linux LVM”的类型更改为“Linux”命令(输入 m 获取帮助):p设备 Boot Start End Blocks Id System
/dev/sdb1 2048 62916607 31457280 83 Linux
/dev/sdb2 62916608 104857599 20970496 83 Linux
命令(输入 m 获取帮助):w
总结:LVM逻辑卷是Linux里面一个很棒的空间使用机制,因为分区在没有格式化的情况下是没有办法加大或者放小的。通过LVM可以将你的磁盘空间做到灵活自如。
十一、参考网址
【LVM】
Linux lvm 逻辑卷篇 - zhangfd - 博客园
LVM(逻辑卷管理)_lvm逻辑卷-CSDN博客
Linux系统的磁盘分区、格式化、挂载、卸载与清空磁盘数据-CSDN博客
【实验重点参考】Linux LVM逻辑卷配置过程详解(创建,增加,减少,删除,卸载)_51CTO博客_linux删除lvm卷