Linux常用硬盘分区格式扩容案例详解
1、MBR格式ext4磁盘删除分区再扩容(无损)
使用fdisk -l查看新增加磁盘信息
# fdisk -l

创建磁盘部分忽略,用户自行补上
挂载新磁盘
#mkfs.ext4 /dev/sdb1
#mount /dev/sdb1 /data
创建测试文件
#touch file {1..54}

开始扩展磁盘
# fdisk /dev/sdb
Command (m for help): p

Command (m for help): d
选择分区1
重点删除分区后不能进行保存,不然数据会全部丢失
Command (m for help): p
Command (m for help): n
Partition number (1-4): 1
回车
回车
Command (m for help): w
再次分好区后进行保存不会数据丢失,这就是在分区情况下无损扩容
# lsblk
# e2fsck -f /dev/sdb1
# partprobe /dev/sdb1
# resize2fs /dev/sdb1
#mount /dev/sdb1 /data
# df -Th
查看数据没有丢失,磁盘空间已经扩展到3G

2、MBR格式ext4磁盘删除分区再扩容(有损这里只供测试对比,生产业务的环境不会使用)
# umount /data
# fdisk /dev/sdb
Command (m for help): p
Command (m for help): d
Command (m for help): n
Partition number (1-4): 1
Command (m for help): w
# df -Th
#mount /dev/sdb1 /data
3、MBR格式xfs磁盘分区扩容(无损)
# lsblk
#df -Th
这里先使用上次扩展后的3G做基础容量,后续增加到4G,此处文件系统格式已经是XFS格式

下面开始扩容磁盘
#fdisk /dev/sdb
Command (m for help): p
Command (m for help): d
Selected partition 1
重点删除分区后不能进行保存,不然数据会全部丢失
Command (m for help): p
Command (m for help): n
Partition number (1-4): 1
回车
回车
Command (m for help): w
再次分好区后进行保存不会数据丢失,这就是在分区情况下无损扩容
# partprobe
# lsblk
# xfs_growfs /dev/sdb1
#df -Th

查看/data目录下文件

4、MBR格式xfs磁盘分区扩容(有损这里只供测试对比,生产业务的环境不会使用)
# fdisk /dev/sdb
Command (m for help): n
Select (default p): d
Partition number (1-4, default 1): 1
Command (m for help): w
# partprobe
# mount /dev/sdb1 /data
5、MBR格式ext4磁盘分区LVM扩容
#lsblk
#lvdisplay
# fdisk -l
#fdisk /dev/sdb
Command (m for help): p
Command (m for help): n
e
1
回车
回车
p
n
l
t
回车
回车
转换格式t
选择磁盘分区号1
8e

w
# partprobe
# partx -a /dev/sdb5 /dev/sdb
# pvcreate /dev/sdb5
# vgextend vgdata /dev/sdb5
# lvextend -l +100%FREE /dev/vgdata/lvdata
# resize2fs /dev/vgdata/lvdata

# df -Th查看磁盘扩容情况

6、xfs磁盘分区LVM扩容(扩容步骤基本上和EXT4格式相同)
#fdisk /dev/sdb
Command (m for help): p
Command (m for help): n
e
4
回车
回车
p 打印磁盘信息
n 新建磁盘分区
回车
回车
转换格式t
选择磁盘分区号5
8e
w
# partprobe
#fdisk /dev/sdb
Command (m for help): p
Command (m for help): n
e
4
回车
回车
p
n
l
e
回车
回车
转换格式t
选择磁盘分区号5
8e
w
# partprobe
# pvcreate /dev/sdb5
# vgextend vgdata /dev/sdb5
# lvextend -l +100%FREE /dev/vgsoft/lvsoft
# xfs_growfs /dev/vgsoft/lvsoft
# df -Th
7、EXT4裸磁盘不分区扩容
#df -h
#resize2fs /dev/sdb
#df -h
8、XFS裸磁盘不分区扩容
#df -Th
#lsblk
# xfs_growfs /dev/sdb
#df -Th
9、ext4裸磁盘LVM扩容
# df -Th
#lsblk
#lvdisplay
# pvresize /dev/sdb
# lvextend -L +2G /dev/vgdata/lvdata1
# lvextend -l +100%FREE /dev/vgdata/lvdata2
# lsblk
# resize2fs /dev/vgdata/lvdata1
# resize2fs /dev/vgdata/lvdata2
# df -Th
10、xfs裸磁盘LVM扩容
# df -Th
#lsblk
#lvdisplay
# pvresize /dev/sdb
# lvextend -L +500M /dev/vgsoft/lvsoft
# lvextend -l +100%FREE /dev/vgsoft/lvsoft
# xfs_growfs /dev/vgsoft/lvsoft
# xfs_growfs /dev/vgsoft/lvdata
# lsblk
# df -Th
11、直接使用mkfs.xfs 或 mkfs.ext4删除分区后重新改成裸磁盘或者LVM
无法挂载情况处理
#vim /etc/fstab删除所有关联的磁盘分区
#systemctl daemon-reload
12、使用growpart和resize2fs工具完成Linux系统盘分区扩容及文件系统扩展的
高版本内核
yum install cloud-utils-growpart
如果云主机无法访问外网,下载相应的包上传到服务器安装
阿里云开源镜像站资源目录
yum install xfsprogs
检查实例的内核版本,例如运行uname -a命令查看内核版本。
内核版本大于3.6.0,该情况请参见高内核版本的操作步骤。
内核版本小于3.6.0,该情况请参见低内核版本的操作步骤。
df -h命令查看云盘分区大小
命令调用growpart为需要扩容的云盘和对应的第几个分区扩容
[root@ecshost ~]# growpart /dev/vda 1
运行resize2fs <PartitionName>命令调用resize2fs扩容文件系统
[root@ecshost ~]# resize2fs /dev/vda1
命令总结:
#yum install -y cloud-utils-growpart
#yum install -y xfsprogs
#growpart /dev/vda 1 命令表示扩容系统盘的第1个分区
#resize2fs /dev/vda1
低版本内核:
此处以CentOS 6操作系统为例演示分区扩展的步骤
安装dracut-modules-growroot工具
[root@ecshost ~]# yum install -y dracut-modules-growroot
覆盖已有的initramfs文件
[root@ecshost ~]# dracut -f
运行fdisk -l命令查看现有云盘大小。
以下示例返回云盘(/dev/vda1)容量是100GiB。
# fdisk -l
Disk /dev/vda: 107.4 GB, 107374182400 bytes
255 heads, 63 sectors/track, 13054 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x0003a7b4
Device Boot Start End Blocks Id System
/dev/vda1 * 1 2611 20970496 83 Linux
运行df -h命令查看云盘分区大小。
以下示例返回分区(/dev/vda1)容量是20GiB。
[root@ecshost ~]# df -h
Filesystem Size Used Avail Use% Mounted on
tmpfs 7.8G 0 7.8G 0% /dev/shm
/dev/vda1 20G 1.1G 18G 6% /
运行growpart <DeviceName> <PartionNumber>命令调用growpart为需要扩容的云盘和对应的第几个分区扩容。
EXT3/4 示例命令表示为系统盘的第一个分区(/dev/vda1)扩容。
[root@ecshost ~]# growpart /dev/vda 1
当挂载了文件系统需要卸载,建议先使用lsblk -af ,fdisk -l查看原来挂载
#umount -lf /dev/sda1
#e2fsck -f /dev/sda1 重点:实际测试只需要执行了dracut -f然后从这个命令开始直接扩容即可
#resize2fs /dev/sda1
命令总结:(分区可使用)
#yum install -y dracut-modules-growroot
#dracut -f
#umount -lf /dev/sdb1
#growpart /dev/vdb 1
#e2fsck -f /dev/sdb1
#resize2fs /dev/sdb1
或
xfs文件系统:运行#xfs_growfs /data
13、当使用分区方式创建LVM卷进行扩容方法
命令总结:
growpart /dev/sdb 1
pvresize /dev/sdb1
lvextend -r -l +100%FREE /dev/vgtest/lvtest
resize2fs /dev/vgtest/lvtest
特别注意:
-r 参数将是fsadm 在扩展LV后自动调整文件系统大小
实例:
# growpart /dev/sdb 1
CHANGED: partition=1 start=2048 old: size=23066591 end=23068639 new: size=31455199 end=31457247
# pvresize /dev/sdb1
Physical volume "/dev/sdb1" changed
1 physical volume(s) resized or updated / 0 physical volume(s) not resized
# pvs
PV VG Fmt Attr PSize PFree
/dev/sda2 centos lvm2 a-- <99.00g 0
/dev/sdb1 vgtest lvm2 a-- <15.00g 4.00g
#
# vgs
VG #PV #LV #SN Attr VSize VFree
centos 1 2 0 wz--n- <99.00g 0
vgtest 1 1 0 wz--n- <15.00g 4.00g
# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
root centos -wi-ao---- <97.09g
swap centos -wi-a----- 1.91g
lvtest vgtest -wi-ao---- <11.00g
# df -Th
Filesystem Type Size Used Avail Use% Mounted on
devtmpfs devtmpfs 976M 0 976M 0% /dev
tmpfs tmpfs 992M 0 992M 0% /dev/shm
tmpfs tmpfs 992M 1.2M 991M 1% /run
tmpfs tmpfs 992M 0 992M 0% /sys/fs/cgroup
/dev/mapper/centos-root xfs 98G 7.8G 90G 9% /
/dev/sda1 xfs 1014M 260M 755M 26% /boot
/dev/mapper/vgtest-lvtest ext4 11G 41M 11G 1% /data
tmpfs tmpfs 199M 0 199M 0% /run/user/0
#
[root@harbor ~]# lvextend -r -l +100%FREE /dev/vgtest/lvtest
Size of logical volume vgtest/lvtest changed from <11.00 GiB (2815 extents) to <15.00 GiB (3839 extents).
Logical volume vgtest/lvtest successfully resized.
# resize2fs /dev/vgtest/lvtest
resize2fs 1.42.9 (28-Dec-2013)
Filesystem at /dev/vgtest/lvtest is mounted on /data; on-line resizing required
old_desc_blocks = 2, new_desc_blocks = 2
The filesystem on /dev/vgtest/lvtest is now 3931136 blocks long.
# df -Th
Filesystem Type Size Used Avail Use% Mounted on
devtmpfs devtmpfs 976M 0 976M 0% /dev
tmpfs tmpfs 992M 0 992M 0% /dev/shm
tmpfs tmpfs 992M 1.2M 991M 1% /run
tmpfs tmpfs 992M 0 992M 0% /sys/fs/cgroup
/dev/mapper/centos-root xfs 98G 7.8G 90G 9% /
/dev/sda1 xfs 1014M 260M 755M 26% /boot
/dev/mapper/vgtest-lvtest ext4 15G 41M 14G 1% /data
tmpfs tmpfs 199M 0 199M 0% /run/user/0
知识补充1
创建物理卷报错Can't open /dev/sdb5 exclusively. Mounted filesystem的问题解决过程记录
dmsetup linux 命令 在线中文手册
dmsetup 是一个底层的逻辑卷管理, dm 应该是 Device Mapper的简称
# dmsetup status
servera_01_vg-servera_01_lv: 0 499712 linear
servera_01_vg-servera_01_lv: 499712 319488 linear
使用 dmsetup remove xxx 移除掉就可以创建PV了:
# dmsetup remove /dev/sdc1
# dmsetup remove /dev/sdc2
重新创建物理卷成功
# pvcreate /dev/sdc1
Physical volume "/dev/sdc2" successfully created.
# pvcreate /dev/sdc2
Physical volume "/dev/sdc2" successfully created.
知识补充2:
wipefs
wipefs是linux自带的程序,用来擦除文件系统的签名,不会清空文件系统或设备中的任何其他数据。默认情况下, wipefs 不会擦除非整个磁盘设备上的嵌套分区表
作用
用来擦除磁盘签名(遇到无法格式化的磁盘可以使用)
当确定磁盘不在需要,需要重新分区分配使用,有时候出现无法擦除分区表,使用一下命令进行擦除
wipefs -a /dev/sda
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!