我已经阅读了不少关于此的帖子,但我仍然不确定正确的方法,假设:
我有一个由 Azure 创建并在其上运行的默认 Ubuntu 14.04 LTS VM,它没有配备交换
我想使用现有的虚拟机存储创建交换,而不是使用额外的存储创建新的磁盘
我读过的帖子:
- https://azure.microsoft.com/en-us/documentation/articles/virtual-machines-how-to-inject-custom-data/
- https://wiki.ubuntu.com/AzureSwapPartitions
- https://bugs.launchpad.net/ubuntu/+source/cloud-init/+bug/1374166
讨论了许多解决方案,但我似乎找不到一个能够在服务器重启后仍然存在的解决方案(可能是因为 cloud-init 对图像分区有自己的想法),有人可以给我一些最佳实践的建议吗?
答案1
假设您已安装 Linux Agent。您所要做的就是在 /etc/waagent.conf 下启用交换。以下是相关行:
ResourceDisk.Format=y # Format if unformatted. If 'n', resour$
ResourceDisk.Filesystem=ext4 # Typically ext3 or ext4. FreeBSD image$
ResourceDisk.MountPoint=/mnt/resource #
ResourceDisk.EnableSwap=y # Create and use swapfile on resource d$
ResourceDisk.SwapSizeMB=2048 # Size of the swapfile.
它将自动使用资源磁盘(每个虚拟机都自带)来创建交换。无需为其创建磁盘。
更新:您还需要执行以下步骤来创建交换文件:
umount /mnt
service walinuxagent restart
答案2
布鲁诺的回答是一个很好的起点,但它只有在我重新启动并在启动后再给它一分钟后才起作用。
a. 启用交换/etc/waagent.conf
,相关行:
ResourceDisk.Format=y # Format if unformatted. If 'n', resour$
ResourceDisk.Filesystem=ext4 # Typically ext3 or ext4. FreeBSD image$
ResourceDisk.MountPoint=/mnt/resource #
ResourceDisk.EnableSwap=y # Create and use swapfile on resource d$
ResourceDisk.SwapSizeMB=2048 # Size of the swapfile.
b. 以 root 身份执行以下操作,包括重新启动计算机:
umount /mnt
service walinuxagent restart
reboot
c. 启动后,仍需要一些时间才能真正启用交换。您可以使用 进行检查swapon -s
。
答案3
我认为正确的做法是让 cloud-init 和 waagent 能够“友好”地协同工作(从Cloud-Init Azure 文档)是将这些值设置为
# disabling provisioning turns off all 'Provisioning.*' function
Provisioning.Enabled=n
# this is currently not handled by cloud-init, so let walinuxagent do it.
ResourceDisk.Format=y
ResourceDisk.MountPoint=/mnt
我尝试更改挂载点,但似乎没有正常工作,因此文档中关于这些值的信息可能是准确的
然后您可以根据需要自定义交换选项
# Create and use swapfile on resource disk.
ResourceDisk.EnableSwap=y
# Size of the swapfile.
ResourceDisk.SwapSizeMB=8192
基本重启后,新的交换就正常了
sudo service walinuxagent restart
free -m
total used free shared buffers cached
Mem: 3944 882 3061 44 29 163
-/+ buffers/cache: 689 3255
Swap: 8192 0 8192