linux 给lvm磁盘扩容

linux 给lvm磁盘扩容

早上到公司发现磁盘满了,挂载点是一个lvm
跟领导确认后决定先扩容再清理,原先是1T,决定扩容到2T
image

LVM(逻辑卷管理)是一种用于Linux系统的磁盘分区技术,它允许管理员进行动态分区和动态调整磁盘大小。以下是在Linux系统中使用LVM扩容的步骤:

扩容步骤

确认可用空间

在扩容之前,需要确认有足够未分配的硬盘空间可供使用。可以使用以下命令查看可用空间:

sudo df -h

创建新的物理卷

如果需要添加一个新的物理卷来扩容,则需要将新的硬盘或分区初始化为物理卷。假设要将新硬盘/dev/sdb作为物理卷,请执行以下命令:

//pvcreate 是 Linux 系统中 LVM(Logical Volume Manager)的一个命令,用于创建物理卷(Physical Volume)。物理卷是由一块或多块物理硬盘组成的逻辑卷,可以用于创建逻辑卷组(Volume Group)。逻辑卷组是一个或多个物理卷的集合,它们形成了一个虚拟的存储池,可以分配给逻辑卷(Logical Volume)使用
在使用 pvcreate 命令时,需要指定要创建物理卷的设备或分区。例如,以下命令将在 /dev/sdb1 分区上创建一个新的物理卷
//执行该命令后,/dev/sdb1 分区将被格式化并标记为物理卷,可以将其添加到逻辑卷组中。
创建物理卷后,可以使用 vgcreate 命令创建逻辑卷组,然后使用 lvcreate 命令创建逻辑卷。逻辑卷可以用于创建文件系统、挂载点和存储卷,从而扩展和管理系统的存储空间。
总之,pvcreate 的作用是将一个或多个物理硬盘上的空间划分为物理卷,以便创建逻辑卷组和逻辑卷,从而实现灵活的存储管理和扩展。
sudo pvcreate /dev/sdb
#sudo pvcreate /dev/sdb1

将物理卷添加到现有的卷组中

如果已经拥有一个卷组,则可以将新的物理卷添加到该卷组中。假设现有卷组名为zsysvg,请执行以下命令:

sudo vgextend zsysvg /dev/sdb1

扩展逻辑卷

因为我们之前的磁盘有剩余,所以上面的步骤我跳过,直接从这里开始的

//首先通过磁盘满的目录找到lvm的挂载名称,lsblk命令
//下面截图我们可以看到,这个目录对应的是zsysvg-lv_docker_base
//这个zsysvg是卷组的名字,lv_docker_base是逻辑卷的名字,记好这层关系哈

lsblk

image

//上面我们提到了卷组,也创建了卷组,那zsysvg怎么看?在哪里找到
//pvs可以简略的看到物理卷和卷组的对应关系,下图我们可以看到一共10T,空闲6.87T,再分配1T的话足够用了,因为6.87大于1
pvs
//vgdisplay可以看到更详细的
vgdisplay

image

//然后我们再开始找逻辑卷,同理
//直接输入lvs命令可以简略看到lvm逻辑卷的名称
lvs
//lvdisplay可以看到更详细的
lvdisplay

一旦卷组扩展了,可以将可用的空间分配给需要扩展的逻辑卷。假设需要将逻辑卷lv_docker_base扩展到2T,请执行以下命令:

sudo lvextend -r -L 2000G /dev/zsysvg/lv_docker_base

//上面这种方法,可能会遇到一个情况,就是你的vg加了100G,但是给lv加100G的时候可能因为算法问题,导致磁盘不够100G
//所以从洋哥那学到一个方法不损耗磁盘资源
lvextend -l +100%FREE /dev/vgdata/lv1   //将空闲100%加进去
resize2fs /dev/vgdata/lv1    //加完后不会立刻生效,需要重新加载下让磁盘生效

其中,-r选项将自动调整文件系统大小以适应新的逻辑卷大小。

查看文件系统是否已扩展
可以使用以下命令查看文件系统是否已扩展:

sudo df -h

此时应该可以看到逻辑卷已经扩展到2T。
image

以上是在Linux系统中使用LVM扩容的基本步骤。需要根据实际情况进行调整和修改。

重新挂载lvm

如果我们有一台机器,只重装了系统盘,数据盘的lvm数据还在,我们怎么重新把这个数据加载进去使用呢?
如果你不想删除 zsysvg 卷组上的数据,也可以将 /data 目录挂载到 zsysvg 卷组上的逻辑卷上。这样做需要进行以下步骤:

查看 zsysvg 卷组中的逻辑卷:运行以下命令,查看 zsysvg 卷组中的逻辑卷:

sudo lvdisplay zsysvg

--- Logical volume ---
LV Path /dev/zsysvg/lv_data
LV Name lv_data
VG Name zsysvg
LV UUID PcNbTu-1EOM-906p-e3HI-3c92-1OQ3-IOFogI
LV Write Access read/write
LV Creation host, time ai-v100-00, 2023-04-17 11:52:24 +0800
LV Status NOT available
LV Size 1.00 TiB
Current LE 262144
//注意,我们用lvdisplay后,可以看到zsysvg卷组中有lv_data这个逻辑卷,lv status是NOT available
//LV Status 显示为 NOT available,这意味着这两个逻辑卷当前没有被激活,无法使用。这可能是因为逻辑卷没有被挂载,或者文件系统已经损坏等原因导致的。你可以使用 lvchange 命令将逻辑卷激活,例如:
sudo lvchange -ay /dev/zsysvg/lv_data
//这将激活 lv_data 逻辑卷,使其可用。你可以尝试挂载逻辑卷并访问其中的数据。

挂载逻辑卷:运行以下命令将逻辑卷挂载到 /data 目录:

//一旦逻辑卷的状态显示为 available,你就可以将其挂载到文件系统上,从而使用其中的数据。假设你要将 lv_data 逻辑卷挂载到 /data 目录上,可以按照以下步骤操作:
sudo mkdir /data
sudo mount /dev/zsysvg/lv_data /data
//设置自动挂载

vim /etc/fstab
/dev/zsysvg/lv_data /data ext4 defaults 0 0

这将在 /etc/fstab 文件中添加一行,表示在启动时将 /dev/zsysvg/lv_data 逻辑卷挂载到 /data 目录上,并使用 ext4 文件系统。注意,如果你有多个逻辑卷,你需要根据需要选择正确的逻辑卷来挂载。

给根目录某个目录扩容

除了lvm,万一我们都是普通磁盘咋整?没整lvm这些?
背景:最开始有一块sda的磁盘,100G,mysql数据存储到这/data这个目录下了。现在/data目录快满了。怎么办?新申请了一块磁盘 sdb

# 首先格式化磁盘,这里老生常谈,运维的小伙伴一眼就懂了,简单粗暴分1个区吧我这里
fdisk /dev/sdb
n
p
1
w
# 接下来你是不是想直接 mount /dev/sdb1 /data 了? 
# 注意,千万不要,因为会覆盖 /data 目录的数据,导致数据全部丢失

systemctl stop mysqld
#挂载个临时目录
mount /dev/sdb1 /datatmp
#原始数据放进去
mv /data/* /datatmp/
# 不接触挂在会提示磁盘繁忙
umount /datatmp
rm -rf /data
mv /datatmp /data
chmod 755 -R /data
chown mysql:mysql -R /data
systemctl start mysqld

打完收工

posted @ 2023-04-11 10:44  liwenchao1995  阅读(700)  评论(0编辑  收藏  举报