远程重新分配/boot与/分区空间的可行性咨询及问题求助
兄弟,太懂你这种远程老托管服务器卡分区空间的糟心了!先给你理理现状,再给你几个从低风险到高风险的解决方案——毕竟是远程机,容错率低,优先选稳的路子。
先把你给出的系统信息整理清楚,方便定位问题:
当前分区与占用情况
$ df -h /boot / Filesystem Size Used Avail Use% Mounted on /dev/sda1 88M 56M 26M 69% /boot /dev/sda3 72G 58G 10G 86% /
/boot目录文件明细
$ sudo du -sh /boot/* 187K /boot/config-4.4.0-170-generic 6.7M /boot/grub 36M /boot/initrd.img-4.4.0-170-generic 12K /boot/lost+found 179K /boot/memtest86+.bin 181K /boot/memtest86+.elf 181K /boot/memtest86+_multiboot.bin 3.8M /boot/System.map-4.4.0-170-generic 6.9M /boot/vmlinuz-4.4.0-170-generic
apt操作报错现状
$ sudo apt --purge autoremove Reading package lists... Done Building dependency tree Reading state information... Done 0 upgraded, 0 newly installed, 0 to remove and 63 not upgraded. 2 not fully installed or removed. After this operation, 0 B of additional disk space will be used. Setting up initramfs-tools (0.122ubuntu8.16) ... update-initramfs: deferring update (trigger activated) # 后续会因/boot临时空间不足导致生成initrd失败
核心问题:/boot剩余的26M空间不足以支撑update-initramfs生成新镜像的临时文件需求,哪怕当前文件总占用没满也会失败。接下来上解决方案:
方案一:临时救急——挤/boot冗余空间(快速见效)
先清理冗余文件,凑出临时空间让initramfs完成配置:
- 删掉多余的memtest86+文件,留一个即可(比如只保留
memtest86+.bin):
sudo rm /boot/memtest86+.elf /boot/memtest86+_multiboot.bin
能释放约360K空间,聊胜于无。
- 强制让initramfs在根分区生成临时文件,绕过/boot的空间限制:
sudo update-initramfs -c -k 4.4.0-170-generic -d /tmp
-d /tmp会把临时文件放到根分区的/tmp目录(有10G空闲完全够用),生成完成后自动复制到/boot。
完成后重新修复apt配置:
sudo dpkg --configure -a
方案二:永久解决——合并/boot到根分区(低风险,无分区调整)
这个方案彻底废掉独立的/boot分区,把引导文件直接放到根分区,从根源上避免分区空间不足的问题,最适合远程操作:
- 先把/boot的所有内容备份到根分区的安全目录:
sudo mkdir /root/boot_full_backup sudo cp -a /boot/* /root/boot_full_backup/
- 卸载/boot分区(如果提示“目标忙”,先切换到无图形多用户模式再试):
sudo systemctl isolate multi-user.target sudo umount /boot
如果还是忙,用lsof /boot查看占用进程,杀掉后再卸载。
- 把备份的引导文件移回根分区的/boot目录:
sudo rm -rf /boot/* sudo cp -a /root/boot_full_backup/* /boot/
修改
/etc/fstab,注释掉原来挂载/boot的那一行(类似UUID=xxx /boot ext2 defaults 0 2的内容),避免重启后尝试挂载无效分区。更新grub配置并重新安装到MBR:
sudo update-grub sudo grub-install /dev/sda
- 验证配置后重启(重启前确保托管商有远程控制台,万一出问题能通过控制台修复):
sudo reboot
重启后用df -h /boot确认,/boot已经是根分区的一部分,不再是独立挂载的分区。
方案三:永久解决——调整/boot分区大小(高风险,需rescue模式)
如果一定要保留独立的/boot分区,只能调整分区大小,但远程机必须通过托管商的rescue系统操作,在线调整分区100%会炸:
联系托管商,申请进入rescue模式(大部分服务商的控制面板都能直接启动到live rescue系统)。
进入rescue系统后,识别磁盘分区:
fdisk -l
找到/dev/sda1(原/boot)和/dev/sda3(原根分区)。
- 缩小根分区,腾出空间给/boot:
# 先检查根分区文件系统完整性 sudo e2fsck -f /dev/sda3 # 缩小根分区文件系统(比如缩到71.9G,腾出100M) sudo resize2fs /dev/sda3 71.9G # 用fdisk删除原sda3分区,再重新创建一个更小的sda3(起始扇区必须和原来一致) sudo fdisk /dev/sda
在fdisk交互界面执行:
d:删除sda3分区n:创建新的主分区,起始扇区和原sda3完全相同,结束扇区设为+71.9Gw:保存分区表并退出
- 扩大/boot分区:
# 先检查/boot分区文件系统完整性 sudo e2fsck -f /dev/sda1 # 用fdisk删除原sda1分区,重新创建一个更大的sda1(起始扇区和原sda1一致,结束扇区到新sda3的起始扇区之前) sudo fdisk /dev/sda
fdisk交互步骤:
d:删除sda1分区n:创建新的主分区,起始扇区和原sda1相同,结束扇区设为新sda3的起始扇区-1w:保存分区表
- 扩大/boot的文件系统到新分区大小:
sudo resize2fs /dev/sda1
- 挂载分区验证空间,确认无误后重启系统:
sudo mount /dev/sda3 /mnt sudo mount /dev/sda1 /mnt/boot df -h /mnt/boot sudo reboot
远程操作必看提醒
- 所有操作前一定要备份重要数据!如果托管商有快照功能,先打系统快照再动手。
- 优先选方案二,不用动分区表,风险最低,只要grub配置没写错,重启后肯定能正常启动。
- 方案三操作分区表时一旦出错,会导致整个系统失联,必须提前确认自己能熟练操作fdisk和resize2fs,且托管商的rescue系统能正常访问磁盘。
备注:内容来源于stack exchange,提问作者Phrogz




