在传统的MBR(Master Boot Record)分区表中,一个硬盘最多可以有四个主分区(Primary Partitions)。如果需要更多分区,则必须将其中一个主分区设置为扩展分区(Extended Partition),在这个扩展分区内可以创建多个逻辑分区(Logical Partitions)。
具体来说:
在MBR(Master Boot Record)分区表中,将一个主分区设置为扩展分区,并在其中创建多个逻辑分区,可以通过分区工具如fdisk
或者parted
来实现。以下是使用fdisk
进行这些操作的通用步骤:
fdisk
命令:通过fdisk
命令开启分区编辑:sudo fdisk /dev/sdx # 开始对sdx磁盘进行分区操
d
命令来删除分区,并根据提示选择要删除的分区号。n
来创建一个新分区,选择e
创建扩展分区。按照提示操作,指定分区的起始和终止位置。n
创建新的分区,在有扩展分区的情况下,这将会创建逻辑分区。按照提示操作,指定每个逻辑分区的大小。w
命令来写入更改并退出fdisk
。如果你正在操作系统使用的分区,分区更改可能需要重启才能生效。以下是这些步骤的示例:
sudo fdisk /dev/sdx # 开始对sdx磁盘进行分区操作
> d # 删除一个现有的主分区(按照提示选择分区号)
> n # 创建新分区
> e # 选择创建扩展分区
> (选择分区号) # 选择扩展分区的号码,通常是不占用的最小可用数字
> (default) # 选择分区的起点,默认回车即可
> (指定终点或者大小) # 根据你磁盘的大小来决定扩展分区的范围
> n # 创建新的逻辑分区
> (选择分区号) # 分区号将自动为新的逻辑分区分配
> (default) # 选择起点
> +大小G # 指定逻辑分区大小,例如 +5G 为5GB
> w # 写入分区表并退出fdisk
使用fdisk
操作分区时要格外小心,因为错误的操作可能会导致数据丢失。在进行任何操作之前,务必备份重要数据。对于那些支持图形界面的系统,还可以使用图形化工具如gparted
等执行分区操作,这更直观且可能更容易操作。务必记住,在某些场景下,如正在运行的系统驱动器或者需要特殊处理的硬件,可能需要特殊的步骤或须在单独的维护环境(如使用可启动的维护盘)中进行分区更改。
准备一台硬盘10G的centos7.9操作系统版本,安装操作系统的时候,一定要是Linux LVM,不管是“根目录”还是“数据盘”,都要是LVM,方便日后磁盘扩容。LVM扩容的实验在这里做了很多次了,经验很丰富了,也一直使用于生产环境的机器磁盘扩容。
个人经验硬盘挂的越少越好,如果没有特别去要求,一个硬盘/dev/xvda给根目录,或者两个硬盘/dev/xvda(给根目录)和/dev/xvdb(给数据盘),后面如果空间不足了,对现有的硬盘扩展增大容量,不要新增硬盘,因为如果一个虚拟机挂的硬盘越多后面对虚拟机迁移就会不好,我遇到一个虚拟机挂4个硬盘(/dev/xvda、/dev/xvdb、/dev/xvdc、/dev/xvdd),在线迁移几次都会失败,还没试过关机迁移,因为在跑业务。
df命令用于显示文件系统的磁盘空间使用情况。常用选项-T表示以易读的格式显示,-h表示使用人类可读的格式。
[root@localhost ~]# df -Th
lsblk用于列出系统中所有可用的块设备(如硬盘、分区、LVM、RAID、光驱等)。它以树状图的方式显示设备之间的关系,而不显示它们的文件系统详细信息,这使得lsblk在快速查看系统的存储层次结构时非常有用。
[root@localhost ~]# lsblk
[root@localhost ~]# fdisk -l
可以看到多了一个硬盘xvdb,Disk /dev/xvdb: 10.7 GB,就是刚刚增加的。
[root@localhost ~]# fdisk -l
lsblk(列出块设备的列表)则是一个显示所有可用块设备及其分区信息的命令。它会列出设备名称、挂载点、分区大小等信息。
[root@localhost ~]# lsblk
上面的步骤是添加了一块硬盘/dev/xvdb,接下来是进行扩容,这里有两个方法进行扩容。
方法一:无需创建新分区扩容
方法二:创建新的分区/dev/xvdb1扩容
[root@localhost ~]# pvdisplay
[root@localhost ~]# pvcreate /dev/xvdb
[root@localhost ~]# pvdisplay
[root@localhost ~]# lvdisplay | grep "VG Name" | awk '{print $3}' #查看物理卷(PV)名称
[root@localhost ~]# lvdisplay | grep "LV Path" | awk '{print $3}' #查看物理卷(LV)名称
[root@localhost ~]# vgextend centos /dev/xvdb #扩展VG
lvextend 命令是在使用逻辑卷管理器(LVM)的 Linux 系统中用于增加逻辑卷大小的命令。你写的命令是专门用来将卷组中所有剩余的空闲空间分配给逻辑卷的命令。
命令解释如下:
lvextend:用于扩展逻辑卷大小的命令。
-l +100%FREE:这里的-l 选项指定要添加到逻辑卷的逻辑扩展(extents)的数量。使用 +100%FREE 表示你要将逻辑卷增加卷组中所有剩余的空闲扩展空间。
/dev/mapper/VGDATA-vol01:这是你要扩展的逻辑卷的路径。它的格式是 /dev/mapper/卷组名称-逻辑卷名称。
[root@localhost ~]# lvextend -l +100%FREE /dev/centos/root
[root@localhost ~]# df -Th | grep mapper | awk '{print $2}' #查看系统类型
[root@localhost ~]# xfs_growfs /dev/centos/root #XFS文件系统
[root@localhost ~]# resize2fs /dev/centos/root #resize2fs用于ext2, ext3, 或ext4文件系统
[root@localhost ~]# df -lh
[root@localhost ~]# lsblk
[root@localhost ~]# fdisk /dev/xvdb
依次输入:n、p、1、p、t、L、8e、p、w
n:新建分区 (Add a new partition)
p:新建主分区 (Create a primary partition)
1:指定分区号为 1 (Set the partition number to 1)
输入两次 p 时,初次没有给出其含义,它通常不是用作输入命令。 如果是错误输入,第二次的 p 将展示当前分区表 (Print the partition table)
t:改变分区类型 (Change the partition’s system id)
L:列出所有已知的分区类型 (List known partition types)
8e:将分区类型设置为 Linux LVM (Set the partition type to Linux LVM)
再次:展示当前分区表,展示进行的修改 (Print the partition table to show the changes made)
w:将更改保存到磁盘然后退出 fdisk (Write the changes and exit fdisk)
这里需要注意一下,在依次输入 n、p、1之后,再输入p查看了下分区格式,显示出的/dev/xvdb1那一栏是83,这是默认的分区格式,但我们需要将这个分区后面交给lvm来管理,就需要修改分区格式,输入 t 、L、8e,修改完分区格式之后,我们再输入p看一下,/dev/xvdb1从83变成8e(Linux LVM)了,输入w保存。
[root@localhost ~]# fdisk -l
[root@localhost ~]# lsblk
[root@localhost ~]# vgdisplay
[root@localhost ~]# pvcreate /dev/xvdb1 #创建物理卷
[root@localhost ~]# vgscan #可以查到本机物理卷名称为“centos”,
[root@localhost ~]# vgextend centos /dev/xvdb1 #使用新增物理卷扩展到centos,vgextend 卷组名 物理卷路径
[root@localhost ~]# vgdisplay #查看vg
[root@localhost ~]# lvextend -r -L +9.99G /dev/centos/root #把新增加10G硬盘开展到逻辑卷,这里是填9.99G,因为填10G可能会报错。
[root@localhost ~]# Lvdisplay #查看逻辑卷状态
[root@localhost ~]# df -lh #查看扩容后的磁盘大小
lvextend 命令是在使用逻辑卷管理器(LVM)的 Linux 系统中用于增加逻辑卷大小的命令。你写的命令是专门用来将卷组中所有剩余的空闲空间分配给逻辑卷的命令。
命令解释如下:
lvextend:用于扩展逻辑卷大小的命令。
-l +100%FREE:这里的-l 选项指定要添加到逻辑卷的逻辑扩展(extents)的数量。使用 +100%FREE 表示你要将逻辑卷增加卷组中所有剩余的空闲扩展空间。
/dev/mapper/VGDATA-vol01:这是你要扩展的逻辑卷的路径。它的格式是 /dev/mapper/卷组名称-逻辑卷名称。
[root@localhost ~]# lvextend -l +100%FREE /dev/centos/root
[root@localhost ~]# df -Th | grep mapper | awk '{print $2}' #查看系统类型
[root@localhost ~]# xfs_growfs /dev/centos/root #XFS文件系统
[root@localhost ~]# resize2fs /dev/centos/root #resize2fs用于ext2, ext3, 或ext4文件系统
[root@localhost ~]# df -lh
[root@localhost ~]# lsblk
我思来想去,这种操作也比较频繁,加上人工操作也可能会出错,后来我就把上面的步骤写成了一个脚本,执行脚本可自动扩容,无论你扩容多少次多少G,这个脚本都适用,这个是我日常工作使用的脚本,已经验证过了。
用于自动检测、初始化新磁盘,并将其添加到现有的逻辑卷管理(LVM)配置中,然后根据磁盘的文件系统类型进行逻辑卷的扩展。
[root@localhost ~]# cat lvm_create_v2.sh
#!/bin/bash
#auther chentongsan,update time 2023-12-25
#Description: 适用于系统根分区扩容,可用于多次扩容,第一次、第二次、第三次……..适合用于centos 6、centos 7、centos 8版本
#在不重启机器的情况下,扫描总线,识别新增添加的磁盘,下面三行使用的平台是VMware的虚拟化平台的虚拟机。
#echo "- - -" > /sys/class/scsi_host/host0/scan
#echo "- - -" > /sys/class/scsi_host/host1/scan
#echo "- - -" > /sys/class/scsi_host/host2/scan
#1073741824是数字2的30次方,它等于1 GiB(Gibibyte)
DIVISOR=1073741824
#检测新加磁盘的盘符、扩展VG及磁盘大小
DISK_NAME=`fdisk -l | grep "Disk /dev/xv" | awk -F '[ :]+' '{print $2}'`
for disk in ${DISK_NAME[*]};do
df_disk=`df -h | grep $disk | wc -l`
if [[ $df_disk -eq 0 ]];then
pvs_disk=`pvs | grep $disk | wc -l`
if [[ $pvs_disk -eq 0 ]];then
new_disk_size=`fdisk -l | grep "$disk" | awk -F '[ ,:]+' '{print $5}'`
new_disk_size_G=$(($new_disk_size/$DIVISOR))
echo -e "\033[32m检测到新磁盘:$disk 容量为:${new_disk_size_G}G\033[0m"
echo -e "\033[32m开始创建lvm逻辑卷\033[0m"
#创建PV、扩展VG
pvcreate $disk
VG_NAME=`lvdisplay | grep "VG Name" | awk '{print $3}'`
LV_PATH=`lvdisplay | grep "LV Path" | awk '{print $3}'`
vgextend $VG_NAME $disk
lvresize -l +100%FREE $LV_PATH
Filesystem_Type=`df -Th | grep mapper | awk '{print $2}'`
if [ "$Filesystem_Type" == “xfs” ];then
xfs_growfs $LV_PATH
else
resize2fs $LV_PATH
fi
echo "$LV_PATH / ext4 defaults 0 0" >> /etc/fstab
fi
fi
done
echo -e "\033[32m根分区扩容完成,请检查确认!\033[0m"
[root@localhost ~]#
注意:这个脚本只能适用于新增加一块磁盘。
[root@localhost ~]# df -lh
[root@localhost ~]# fdisk -l
[root@localhost ~]# lsblk
[root@localhost ~]# sh lvm_create_v2.sh
[root@localhost ~]# df -lh
[root@localhost ~]# lsblk
注意:执行任何管理级操作时,用户都应当对可能的结果和风险有充分的认识,首先做好数据备份,在虚拟化平台在操作之前先做好快照或者其他备数据份(这里也需要注意一下:先把磁盘扩容好了,再启动服务,以免出错了恢复快照数据不一致)。如果您没有足够的经验来处理可能出现的复杂情况,最好在开始之前咨询有经验的系统管理员,或者先做下实验。此外,在维护关键系统时,最好安排在非工作时间进行,这样如果出现任何问题,对日常运营的影响会降到最低。
历史文章:
1、LVM究竟有多强大?原理和企业实战案例全解析