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

Azure Oracle Linux 8.4经cloud-init配置后重启swapfile未生成问题

异常原因

  1. 挂载依赖配置错误:你当前挂载参数中的x-systemd.requires=cloud-init.service配置逻辑反向,要求临时磁盘挂载必须先等待cloud-init服务启动,导致第二次启动时cloud-init执行swap检查逻辑时,临时磁盘尚未挂载,读取的是系统盘/mnt/resource目录所在分区的剩余空间,并非临时磁盘的实际可用空间,因此计算出swap建议大小为0。
  2. cloud-init模块执行频率默认限制:cc_mounts模块的swap创建逻辑默认仅在实例首次初始化时执行一次,后续重启(含解除分配后重启)默认不会重复触发swap创建流程,检测到原有swap条目不存在对应文件后会直接删除fstab中的swap配置。

解决方案

以下两种方案二选一即可:

方案1:修改cloud-init配置实现自动重建

调整挂载依赖并添加开机执行逻辑,完整cloud-init配置如下:

#cloud-config
datasource_list: [ Azure ]
# 调整挂载依赖,要求临时磁盘在cloud-init启动前完成挂载
mounts:
- [ ephemeral0, /mnt/resource, auto, "defaults,nofail,x-systemd.required-by=cloud-init.service" ]
mount_default_fields: [ None, None, "auto", "defaults,nofail", "0", "2" ]
# 配置每次开机都检查重建swap
bootcmd:
  - |
    if [ ! -f /mnt/resource/swap.img ]; then
      fallocate -l 4G /mnt/resource/swap.img
      chmod 600 /mnt/resource/swap.img
      mkswap /mnt/resource/swap.img
    fi
    swapon /mnt/resource/swap.img
swap:
  filename: /mnt/resource/swap.img
  size: "auto"
  max_size: 17179869184

方案2:通过systemd服务实现(稳定性更高,不依赖cloud-init逻辑)

  1. 创建/etc/systemd/system/swap-rebuild.service文件:
[Unit]
Description=Rebuild swap file on Azure ephemeral disk
After=mnt-resource.mount
Requires=mnt-resource.mount

[Service]
Type=oneshot
ExecStart=/bin/bash -c 'if [ ! -f /mnt/resource/swap.img ]; then fallocate -l 4G /mnt/resource/swap.img && chmod 600 /mnt/resource/swap.img && mkswap /mnt/resource/swap.img; fi && swapon /mnt/resource/swap.img'
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target
  1. 执行以下命令启用服务:
systemctl daemon-reload
systemctl enable swap-rebuild.service

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 00:54:03