![EC2 - 停止/启动后保留实例存储交换卷](https://linux22.com/image/737521/EC2%20-%20%E5%81%9C%E6%AD%A2%2F%E5%90%AF%E5%8A%A8%E5%90%8E%E4%BF%9D%E7%95%99%E5%AE%9E%E4%BE%8B%E5%AD%98%E5%82%A8%E4%BA%A4%E6%8D%A2%E5%8D%B7.png)
我有一个 EC2 实例,想要为其配置交换实例卷。
我可以相对轻松地完成此操作,通过启动附加了实例存储卷的实例,然后运行以下命令......
$ sudo mkswap /dev/xvdb
$ sudo swapon -p 1 /dev/xvdb
然后我可以运行以下命令来验证它是否有效......
$ sudo swapon -s
Filename Type Size Used Priority
/dev/xvdb partition 335515644 0 1
我可以通过在 /etc/fstab 中添加类似这样的行来使其在重启后继续存在
/dev/xvdb swap swap pri=1 0 0
问题是,如果我停止实例,然后重新启动它。交换会消失。我必须使用 mkswap 和 swapon 重新创建它。
配置实例以自动将实例卷附加为交换空间的正确方法是什么?
我尝试将以下内容添加到实例用户数据中......
#!/bin/sh
mkswap /dev/xvdb
swapon -p 1 /dev/xvdb
但这没有任何作用。每次启动实例时我仍然需要手动重新创建交换。
答案1
通过停止后执行的用户数据然后启动,如本文所述AWS 文档
Content-Type: multipart/mixed; boundary="//"
MIME-Version: 1.0
--//
Content-Type: text/cloud-config; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment; filename="cloud-config.txt"
#cloud-config
cloud_final_modules:
- [scripts-user, always]
--//
Content-Type: text/x-shellscript; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment; filename="userdata.txt"
#!/bin/bash
DISK=/dev/nvme1n1
mkswap $DISK
swapon -p 1 $DISK
--//
或者通过 init 配置系统上的 rc.local,附加到 /etc/rc.local:
DISK=/dev/xvdb
mkswap $DISK
swapon -p 1 $DISK