You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Yocto自定义系统中swap分区在/proc/swaps显示`(deleted)`的原因?

排查Yocto系统Swap显示(deleted)且未被使用的问题

我之前在Yocto构建的自定义Linux系统上碰到过几乎一模一样的swap异常问题,给你梳理下排查思路和常见原因:

首先得明确:启动时第二次swapon报错“Device or resource busy”是正常现象——因为分区已经被第一次命令激活了,问题的核心是为啥启动完成后swap会变成(deleted)状态,而且无法被系统使用。

1. /etc/fstab配置错误或冲突

Yocto生成的系统很容易出现“多方式激活swap”的冲突,或者fstab本身配置有误:

  • 先检查/etc/fstab里的swap条目,我当时就是在这里踩了坑:把swap分区的UUID写错了,或者用了临时文件路径(比如/swapfile)但这个文件在启动后期被清理了,内核找不到原设备,就会标记swap为(deleted)。
    执行命令查看fstab:
    cat /etc/fstab
    
  • 另外,如果fstab里的swap条目设置了noauto,但你又在启动脚本里手动执行了swapon,后续systemd可能会因为无法重新挂载这个swap,把它标记为失效状态。

2. 自定义启动脚本误操作了swap

很多Yocto项目会添加自定义的初始化脚本(比如rc.local或者recipe里的启动脚本),如果脚本里有不当操作,会触发swap的失效标记:

  • 比如有没有脚本执行了swapoff但没重新激活?或者对存储设备做了分区扫描、remount操作,导致内核丢失了swap分区的关联?
    可以通过系统日志定位:
    dmesg | grep -i swap
    journalctl -u swap.target
    
    如果日志里出现“swap partition has been deleted”之类的提示,就能找到是哪个脚本触发的问题。

3. Systemd配置异常

Yocto默认用systemd管理服务,要是swap.target的配置或依赖出问题,也会导致swap异常:

  • 先检查swap相关的systemd服务状态:
    systemctl status dev-<your-swap-partition>.swap  # 比如dev-mmcblk0p3.swap
    
  • 有些自定义的Yocto recipe可能会禁用swap.target,或者修改了它的启动顺序,导致swap虽然被手动激活,但后续被systemd判定为无效。
  • 另外,要是系统启用了tmp.mount这类临时文件系统服务,会不会和swap分区的挂载逻辑冲突?

4. 存储设备硬件/IO问题

如果swap分区所在的存储设备(比如eMMC、SD卡)有读写错误,内核会自动失效swap分区,标记为(deleted):

  • 查看存储相关的dmesg日志:
    dmesg | grep -i mmc  # 根据你的存储设备类型调整,比如sata、nvme等
    
    要是有分区表异常、IO错误的信息,就得检查存储设备的健康状态,或者重新格式化swap分区。

快速验证方法

可以手动重新激活swap,判断是配置问题还是硬件问题:

swapoff /dev/your-swap-partition  # 先关闭(如果还能识别的话)
mkswap /dev/your-swap-partition   # 重新格式化(swap分区无数据,放心操作)
swapon /dev/your-swap-partition

之后用swapon --show和cat /proc/swaps查看状态,如果这次能正常显示且系统开始使用swap,说明是启动过程中的配置问题,而非硬件故障。


内容的提问来源于stack exchange,提问作者gromain

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 10:46:20