Linux 安装系统失败:mkswap failed / 磁盘残留分区与 RAID 信息清理教程

分类有用的小知识标签
Linux 安装系统失败:mkswap failed / 磁盘残留分区与 RAID 信息清理教程 题图

云核筑梦家,今天记录一次 Linux 系统安装过程中遇到的磁盘分区异常问题。现场表现为系统安装器已经识别到硬盘,但是安装过程中在创建 swap 分区时失败,导致系统无法继续安装。

一、故障现象

在安装 Linux 系统时,安装器报错类似:

SwapError: mkswap failed for '/dev/sda3'

安装界面里可能还会出现:

Installation Destination:No disks selected

或者提示:

Not enough space in file systems for the current software selection.

进入救援模式后查看磁盘,可以看到硬盘已经识别到了:

lsblk

示例输出:

NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINTS
loop0    7:0    0 756.9M  0 loop 
sda      8:0    0 931.5G  0 disk 
├─sda1   8:1    0     1M  0 part 
├─sda2   8:2    0  1000M  0 part 
└─sda3   8:3    0  15.7G  0 part

此时说明硬盘本身可以被系统识别,但是盘上存在安装失败后残留的分区信息,或者有旧的文件系统、swap、LVM、RAID 元数据残留,导致安装器在重新分区或创建 swap 时失败。

二、问题原因

这类问题常见原因有几个:

  1. 上一次系统安装失败,磁盘上残留了半截分区表。

  2. 磁盘之前做过 RAID、LVM、swap 或其他系统盘,残留了旧签名。

  3. 安装器读取到旧的 GPT、PMBR、mdadm、dmraid 等元数据后,自动分区异常。

  4. kickstart 自动安装时写死了目标盘,比如 /dev/sda,但磁盘状态不干净,导致分区流程失败。

本次问题中,/dev/sda 是一块 931.5G 的硬盘,空间本身足够,最终判断不是硬盘容量不足,而是磁盘残留信息导致安装器创建 swap 分区失败。

三、进入救援模式

如果系统还没装好,可以从安装 ISO 进入 Rescue Mode,也就是救援模式。

进入救援模式后,先查看磁盘:

lsblk
fdisk -l
cat /proc/partitions

确认目标安装盘是哪一块。

本次目标盘是:

/dev/sda

注意:后面的清理命令会清空整块磁盘数据,一定要确认目标盘正确,不要清错数据盘。

四、清理磁盘残留分区和签名

确认目标盘是 /dev/sda 后,执行下面命令:

swapoff -a 2>/dev/null

for p in /dev/sda?*; do
  umount "$p" 2>/dev/null
  wipefs -af "$p" 2>/dev/null
done

wipefs -af /dev/sda
dd if=/dev/zero of=/dev/sda bs=1M count=300 conv=fsync status=progress

partprobe /dev/sda 2>/dev/null
lsblk

执行完成后,如果正常,应该只看到整块硬盘本身,不应该再看到 sda1sda2sda3 这些分区。

正常示例:

NAME  MAJ:MIN RM   SIZE RO TYPE MOUNTPOINTS
loop0   7:0    0 756.9M  0 loop 
sda     8:0    0 931.5G  0 disk

这一步会清理磁盘开头的分区表、GPT、PMBR、文件系统签名等信息。

五、进一步清理 RAID / LVM / dmraid 残留

如果怀疑这块盘以前做过 RAID、LVM,或者安装器依旧识别异常,可以继续清理磁盘末尾的元数据。

很多 RAID、LVM 或磁盘阵列残留信息可能会写在磁盘末尾,所以建议把磁盘开头和末尾都清掉。

执行:

swapoff -a 2>/dev/null

for p in /dev/sda?*; do
  umount "$p" 2>/dev/null
done

for md in /dev/md* /dev/md/*; do
  [ -e "$md" ] && mdadm --stop "$md" 2>/dev/null
done

mdadm --zero-superblock --force /dev/sda 2>/dev/null
dmraid -r -E /dev/sda 2>/dev/null

wipefs -af /dev/sda

dd if=/dev/zero of=/dev/sda bs=1M count=300 conv=fsync status=progress

sectors=$(blockdev --getsz /dev/sda)
dd if=/dev/zero of=/dev/sda bs=512 seek=$((sectors-614400)) count=614400 conv=fsync status=progress

partprobe /dev/sda 2>/dev/null
sync

说明:

wipefs -af /dev/sda

用于清除系统能识别到的文件系统、swap、RAID、LVM 等签名。

dd if=/dev/zero of=/dev/sda bs=1M count=300

用于清理磁盘开头 300M。

dd if=/dev/zero of=/dev/sda bs=512 seek=$((sectors-614400)) count=614400

用于清理磁盘末尾 300M,避免 RAID 或 LVM 元数据残留。

六、检查是否清理干净

清理完成后,执行:

lsblk
wipefs -n /dev/sda
blkid /dev/sda
cat /proc/mdstat

正常情况下,lsblk 应该只看到一整块裸盘:

NAME  MAJ:MIN RM   SIZE RO TYPE MOUNTPOINTS
loop0   7:0    0 756.9M  0 loop 
sda     8:0    0 931.5G  0 disk

wipefs -n /dev/sda 没有任何输出,说明没有检测到文件系统或 RAID 签名。

blkid /dev/sda 没有任何输出,说明没有 UUID、文件系统、swap 等残留。

cat /proc/mdstat 显示:

Personalities : 
unused devices: <none>

说明当前没有软件 RAID 阵列在运行。

到这里,系统层面的分区表、swap、LVM、mdadm RAID、dmraid 残留基本已经清理干净。

七、重新安装系统

确认磁盘干净后,执行:

reboot

重启后重新进入正常系统安装流程即可。

如果使用 kickstart 自动安装,建议分区配置里加上清盘参数,例如:

ignoredisk --only-use=sda
zerombr
clearpart --all --initlabel --drives=sda
bootloader --location=mbr --boot-drive=sda

part biosboot --fstype=biosboot --size=1 --ondisk=sda
part /boot --fstype=xfs --size=1024 --ondisk=sda
part swap --fstype=swap --size=4096 --ondisk=sda
part / --fstype=xfs --grow --size=20480 --ondisk=sda

如果是 UEFI 启动,可以使用 EFI 分区,例如:

ignoredisk --only-use=sda
zerombr
clearpart --all --initlabel --drives=sda
bootloader --boot-drive=sda

part /boot/efi --fstype=efi --size=600 --ondisk=sda
part /boot --fstype=xfs --size=1024 --ondisk=sda
part swap --fstype=swap --size=4096 --ondisk=sda
part / --fstype=xfs --grow --size=20480 --ondisk=sda

实际用 BIOS 还是 UEFI,需要根据服务器启动模式决定。

八、如果还是无法安装

如果清理完成后,系统安装器仍然提示 RAID、Foreign、磁盘异常,或者依旧无法创建分区,那就不是 Linux 系统层面能完全处理的问题了。

这时需要检查 RAID 卡或服务器管理后台:

  1. 进入 RAID 卡 BIOS,查看是否有 Foreign Config。

  2. 清除 RAID 卡里的 Foreign 配置。

  3. 如果是阵列卡管理的磁盘,需要重新创建 VD。

  4. 在 iDRAC、iMana、iLO 或 BMC 里检查硬盘状态是否 Online。

  5. 检查硬盘、盘架、背板、阵列卡是否有故障告警。

九、总结

这次问题的核心不是硬盘容量不够,而是磁盘上残留了安装失败后的分区、swap 或 RAID/LVM 相关元数据,导致安装器在创建 /dev/sda3 swap 分区时失败。

最终处理思路就是:

确认目标盘
停止占用
清理分区签名
清理磁盘开头
清理磁盘末尾
确认 wipefs / blkid 无输出
重新安装系统

只要 lsblk 里目标盘下面没有残留分区,wipefs -nblkid 都没有输出,基本就可以作为一块干净盘重新安装系统。

本文为原创实践记录,首发于 小航博客,转载请注明出处与链接。

评论

发表评论

评论经审核后显示。请勿提交广告或与主题无关的内容。