问题环境 系统:Linux-Debian,启动方式:BIOS MBR 最初安装系统的时候只选用了50GB大小作为系统盘,使用半年后储存不够了,需要给系统 增加容量到100GB

root 终端命令行操作

通过执行 fdisk -l 命令来查看系统中的磁盘分区信息。

root@Debian:~# fdisk -l
Disk /dev/sda: 50 GiB, 53687091200 bytes, 132120576 sectors
Disk model: QEMU HARDDISK   
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x34510bc9

Device     Boot     Start       End   Sectors  Size Id Type
/dev/sda1  *         2048 102856703 102854656   49G 83 Linux
/dev/sda2       102858750 104855551   1996802  975M  5 Extended
/dev/sda5       102858752 104855551   1996800  975M 82 Linux swap / Solaris

root@Debian:~# df -h /
文件系统        容量  已用  可用 已用% 挂载点
/dev/sda1      48G  45G  894M  99%  /

可以看到Disklabel type 为dos,MBR分区格式,Type类型分区 /dev/sda1 是系统分区,大小为49GB,Extended扩展分区 975M, swap虚拟内存分区975MB
根据df -h /命令,可以看到总容量48G,已用45G,仅剩余894M可用。

路径类型大小
/dev/sda1Linux49GB
/dev/sda2Extended975MB
dev/sda3swap975MB

添加一块新的硬盘(未进行任何格式化和分区)

查看新添加的磁盘
通过执行 fdisk -l 命令来查看系统中的磁盘分区信息。
可以看到多出了一个磁盘: /dev/sdb: 100 GiB 大小为100GB,这是我新添加的磁盘

root@Debian:~# fdisk -l
Disk /dev/sda: 50 GiB, 53687091200 bytes, 132120576 sectors
Disk model: QEMU HARDDISK   
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x34510bc9

Device     Boot     Start       End   Sectors  Size Id Type
/dev/sda1  *         2048 102856703 102854656   49G 83 Linux
/dev/sda2       102858750 104855551   1996802  975M  5 Extended
/dev/sda5       102858752 104855551   1996800  975M 82 Linux swap / Solaris


Disk /dev/sdb: 100 GiB, 107374182400 bytes, 209715200 sectors
Disk model: QEMU HARDDISK   
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes

1,创建分区格式

# 将磁盘/dev/sdb的分区表类型设置为传统的MBR(MS-DOS)格式
# 注意:这将清除磁盘上所有现有分区
parted /dev/sdb mklabel msdos

# 创建第一个主分区:
# - 文件系统类型为ext4(实际需用mkfs格式化)
# - 从1MiB开始(现代磁盘的优化对齐位置)
# - 分配99GiB的空间(约保留1GiB给后续分区)
parted /dev/sdb mkpart primary ext4 1MiB 99GiB

# 将第一个分区标记为"可启动"(设置boot flag)
# 适用于传统的BIOS/MBR启动方式
parted /dev/sdb set 1 boot on

# 创建扩展分区:
# - 占用剩余磁盘空间(从99GiB到100%)
# 注意:MBR格式最多支持4个主分区,需用扩展分区创建更多逻辑分区
parted /dev/sdb mkpart extended 99GiB 100%

# 在扩展分区内创建逻辑分区:
# - 类型设置为linux-swap(实际需用mkswap初始化)
# - 占据全部剩余空间(从99GiB到磁盘末尾)
parted /dev/sdb mkpart logical linux-swap 99GiB 100%

分区全部创建完成,可以看到如下新建立的分区

root@Debian:~# fdisk /dev/sdb -l
Disk /dev/sda: 100 GiB, 107374182400 bytes, 209715200 sectors
Disk model: QEMU HARDDISK   
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x7a57e592

Device     Boot     Start       End   Sectors  Size Id Type
/dev/sdb1  *         2048 207618047 207616000   99G 83 Linux
/dev/sdb2       207618048 209715199   2097152    1G  f W95 Ext'd (LBA)
/dev/sdb5       207618049 209715199   2097151 1024M 82 Linux swap / Solaris

2,格式化分区

#格式化/dev/sdb1 分区为ext4格式
mkfs.ext4 /dev/sdb1 

#格式化/dev/sdb5 分区为swap格式(虚拟内存)
mkswap /dev/sdb5

3,挂载新分区并写入系统文件

将新磁盘挂载,并写入系统文件,这里需要耗时等待,等待过程 可以再开一个终端执行df -h /dev/sdb命令,查看已经写入了多少储存了。

#创建路径,用于挂载新磁盘的 /dev/sdb1 系统目录
mkdir -p /mnt/newroot

#将新磁盘的 /dev/sdb1 系统目录,挂载到/mnt/newroot目录
mount /dev/sdb1 /mnt/newroot

#使用rsync 将系统文件,写入到/mnt/newroot/,这里排除了部分文件夹
rsync -aAXv --exclude={"/dev/*","/proc/*","/sys/*","/tmp/*","/run/*","/mnt/*","/media/*","/lost+found"} / /mnt/newroot/

4,准备chroot环境

当系统文件写入完成后,挂载分区进入chroot环境

mount --bind /dev /mnt/newroot/dev
mount -t proc proc /mnt/newroot/proc
mount -t sysfs sys /mnt/newroot/sys
mount -t devpts devpts /mnt/newroot/dev/pts

5,更新fstab文件

#进入系统环境
chroot /mnt/newroot /bin/bash

#注释掉不要的分区,或者直接清空挂载配置信息
vim /etc/fstab
echo > /etc/fstab 

#写入系统分区挂载信息
blkid | grep '/dev/sda1' | awk -F'UUID="' '{print $2}' | awk -F'"' '{print "UUID=" $1 " / ext4    errors=remount-ro 0       1"}' >> /etc/fstab

#写入swap分区挂载信息
blkid | grep '/dev/sdb5' | awk -F'UUID="' '{print $2}' | awk -F'"' '{print "UUID=" $1 " swap swap defaults 0 0"}' >> /etc/fstab
vim /etc/fstab  # 手动验证和调整

6,重新安装引导程序

grub-install /dev/sdb
update-grub

7,退出chroot 系统环境并清理

exit
umount -l /mnt/newroot/dev{/pts,}
umount /mnt/newroot/proc
umount /mnt/newroot/sys
umount /mnt/newroot

8,系统关机

poweroff -h

特别说明,关机后,将系统原有的磁盘给拔掉,以新磁盘开机,或者BIOS 启动选项里 以新磁盘启动,然后就能进入100GB的新磁盘系统了

开机后查看

可以看到成功扩容,并移动到了新磁盘

root@Debian:~# fdisk -l
Disk /dev/sda: 100 GiB, 107374182400 bytes, 209715200 sectors
Disk model: QEMU HARDDISK   
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x7a57e592

Device     Boot     Start       End   Sectors  Size Id Type
/dev/sda1  *         2048 207618047 207616000   99G 83 Linux
/dev/sda2       207618048 209715199   2097152    1G  f W95 Ext'd (LBA)
/dev/sda5       207618049 209715199   2097151 1024M 82 Linux swap / Solaris

#查看剩余空间
root@Debian:~# df -h /
文件系统        容量  已用  可用 已用% 挂载点
/dev/sda1      97G  46G   47G 50%  /

其他操作说明 笔记待完善补充...

欢迎 留言评论补充

最后修改:2025 年 05 月 16 日
如果觉得我的文章对你有用,请随意赞赏