这是一个非常经典的问题。
从你提供的 lsblk 输出可以看出:
你的物理磁盘
sda已经识别到了 500G。你的根分区
sda1只有 199G。关键问题:在
sda1后面,紧跟着一个扩展分区sda2和一个 Swap(交换)分区sda5。
这就好比你想要扩建你的主卧(sda1),但是主卧隔壁紧挨着储藏室(Swap),而空地(扩容出来的300G)在储藏室的另一边。你必须先把储藏室拆了,才能把主卧扩建过去。
为了扩容 sda1,我们需要先删除阻挡在中间的 Swap 分区,扩容根分区,最后(可选)用“Swap 文件”的方式把交换空间补回来(这种方式更灵活,以后扩容不再受阻)。
以下是详细的操作步骤(请依次执行):
这是一个非常经典的问题。
从你提供的 lsblk 输出可以看出:
你的物理磁盘
sda已经识别到了 500G。你的根分区
sda1只有 199G。关键问题:在
sda1后面,紧跟着一个扩展分区sda2和一个 Swap(交换)分区sda5。
这就好比你想要扩建你的主卧(sda1),但是主卧隔壁紧挨着储藏室(Swap),而空地(扩容出来的300G)在储藏室的另一边。你必须先把储藏室拆了,才能把主卧扩建过去。
为了扩容 sda1,我们需要先删除阻挡在中间的 Swap 分区,扩容根分区,最后(可选)用“Swap 文件”的方式把交换空间补回来(这种方式更灵活,以后扩容不再受阻)。
以下是详细的操作步骤(请依次执行):
⚠️ 风险提示
操作涉及分区表修改,强烈建议在操作前对虚拟机进行快照(Snapshot)或备份数据,以防误操作导致数据丢失。
第一步:关闭 Swap 并修改 fstab
我们需要卸载 Swap 才能删除它。
关闭 Swap:
Bash
swapoff -a修改
/etc/fstab防止重启挂载: 使用编辑器打开文件:Bash
nano /etc/fstab找到包含
swap的那一行(通常包含 UUID=... swap sw ...),在行首加上#号把它注释掉。 按Ctrl+O保存,Enter确认,Ctrl+X退出。
第二步:删除阻挡的分区 (sda2, sda5)
我们需要把 sda1 后面的路清空。
进入 fdisk 交互模式:
Bash
fdisk /dev/sda删除分区(不用担心,删除 Swap 不会丢文件数据):
输入
p查看分区表,确认sda5和sda2的编号。输入
d,然后选择分区号5(删除 sda5)。输入
d,然后选择分区号2(删除 sda2)。再次输入
p,现在你应该只剩下一个sda1了。
第三步:扩容根分区 (sda1)
继续在 fdisk 交互界面中操作:
删除 sda1 记录(**注意:这不会删除数据!**只要起始扇区不变,数据就在):
输入
d,自动选择1(或者手动选1)。此时所有分区都删除了,不要慌,只要不输入
w保存,一切都可以撤销。
重建 sda1:
输入
n(新建分区)。输入
p(主分区)。输入
1(分区号)。First sector (起始扇区):直接按回车!(非常重要,必须使用默认值,即原来的起始位置)。
Last sector (结束扇区):直接按回车!(默认会使用所有剩余空间,即500G)。
如果提示检测到 ext4 签名,询问是否移除签名 (Do you want to remove the signature?),一定要选 No (N)!!! 选 Yes 会丢失数据。
保存更改:
输入
w。系统可能会提示
Device or resource busy,这很正常,因为根目录正在使用。
通知内核更新分区表: 执行以下命令:
Bash
partprobe如果这步报错,建议重启一次机器 (
reboot),重启后继续下一步。
第四步:刷新文件系统
现在分区变大了,但文件系统还不知道。
执行扩容命令:
Bash
resize2fs /dev/sda1
此时,执行 df -h 应该能看到根目录 / 已经接近 500G 了。
第五步:重建 Swap (使用 Swap 文件)
因为 Swap 分区被我们删了,为了系统稳定,建议创建一个 Swap 文件代替分区(这样以后再扩容磁盘就不会被挡住了)。
创建一个 2G 的 Swap 文件(大小随你定):
Bash
dd if=/dev/zero of=/swapfile bs=1M count=2048设置权限:
Bash
chmod 600 /swapfile格式化为 Swap:
Bash
mkswap /swapfile启用 Swap:
Bash
swapon /swapfile重新配置
/etc/fstab: 再次编辑nano /etc/fstab,在文件末尾添加一行:Plaintext
/swapfile none swap sw 0 0(记得把之前注释掉的旧 swap 分区那行彻底删掉)
验证
执行 lsblk,你应该看到 sda1 占据了绝大部分空间,且 Swap 正常工作(通过 free -h 查看)。
启动慢卡顿解决办法如下:
结论: 系统之所以卡顿报错,是因为配置文件里记录了一个“旧的 Swap 分区 UUID (33ec...)”,每次开机它都试图去寻找这个分区来恢复休眠数据,但你的硬盘上实际上根本没有这个分区。
请按以下步骤彻底清除这个错误的配置,启动就会变快了:
第一步:清除 Resume 配置 (最关键)
这个文件告诉内核从哪里“苏醒”。因为它指向了不存在的 UUID,所以卡住了。
清空该文件内容(直接执行下面这行命令):
Bash
echo "" > /etc/initramfs-tools/conf.d/resume(这一步会把错误的 UUID 抹掉)
第二步:检查 fstab (防止挂载报错)
虽然 blkid 没看到 swap,但 fstab 可能会尝试挂载它。
打开文件:
Bash
nano /etc/fstab寻找并注释: 找一行包含
swap或者包含报错 UUID33ecb7f7...的内容。 如果有,在这一行的最前面加一个#号把它注释掉。 (如果文件里只有/dev/sda1这一行,那就不用动,直接退出)保存退出:按
Ctrl+O回车保存,按Ctrl+X退出。
第三步:更新引导 (必须执行)
修改完配置后,必须重新生成引导文件,否则下次重启还是会读旧配置。
Bash
update-initramfs -u
(这一步可能需要几秒钟)
第四步:重启验证
Bash
reboot
重启后,那个 Timed out waiting for device 的错误应该就会消失,系统会迅速进入登录界面。
评论区