如何添加互换和Amazon EC2实例中运行的Ubuntu 12.04 LTS?(How to ad

2019-07-30 06:38发布

Ubuntu默认12.04 LTS不会产生因某种原因交换。 有没有“正确”的方式,将其添加在安装后?

root@aux3:/root# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/xvda1      8.0G  1.4G  6.3G  18% /
udev            1.9G   12K  1.9G   1% /dev
tmpfs           751M  188K  750M   1% /run
none            5.0M     0  5.0M   0% /run/lock
none            1.9G     0  1.9G   0% /run/shm
/dev/xvdb       394G   79G  296G  21% /mnt

root@aux3:/root# swapon -s
Filename
root@aux3:/root# free -m
             total       used       free     shared    buffers     cached
Mem:          3750       3730         20          0         75       3433
-/+ buffers/cache:        221       3528
Swap:            0          0          0
root@aux3:/root# 

更新:发现通过交换文件的临时解决方案:

(我仍然在寻找“正确”的方式虽然)

dd if=/dev/zero of=/mnt/swap1 bs=1024 count=4M
mkswap /mnt/swap1
chown root.root /mnt/swap1
chmod 600 /mnt/swap1
swapon /mnt/swap1

Answer 1:

因为我花了一天的大部分时间理解这个问题我自己,因为拉起ayurchen的链接需要一个谷歌的缓存中查找,我想我会发布一个稍微更详细的演练,从ayurchen的非常有用的答案绘制。

什么是交换空间,以及为什么使用它?

交换空间是使用Linux(和大多数其他操作系统)从内存中存储的对象时,真实的物理内存开始变得拥挤的磁盘空间。 因为磁盘通常比内存慢,在交换的Linux存储最近最少使用对象第一,并保持尽可能多的,因为它可以在内存中。 它通常建议在大小交换空间等于你的内存,如果可能的话。 请参阅有关交换空间更多的细节在这里 。

我应该在哪里设置呢?

Ubuntu的LTS 12.04 AMI,这也是我开始,没有配置交换空间最初,为您的存储设备可以改变的大小和数量。 但大多数都配有大型的免费临时存储设备自动。 由于S3存储是受限于成本,短暂驱动器是一个交换文件的好地方。 该矿的问题,提到相同的设备名称/dev/xvdb ,但你可以例如在发射过程中进行配置。

我如何设置我的短暂的存储驱动器上的交换空间?

交换空间可以在单个文件中或上的装置的分区进行设置。 一个文件可以通过在盘上的非相邻块来表示,而一个分区是一组预定义的相邻块。 由于磁盘读写速度更快,你不必不停地移动读取头长的距离,我们得到使用分区更好的性能。 (这就是为什么以上使用文件作为临时解决方案折扣的问题。)

Linux附带了许多程序来管理磁盘分区,包括FDISK,了sfdisk,分手了,等等。我们将使用sfdisk ,因为它可以接受来自一个shell脚本,所有必要的参数。 这一点很重要,因为临时存储丢失我们每次“停止”我们的实例。 因此,我们在自动每个实例启动时,时间运行的文件设置一个脚本/etc/rc.local

# Unmount the drive in-case it is already mounted. Umount throws an error if
# it wasn't mounted, so we add || : to continue the script in that case
umount /dev/xvdb || :

# Each line below is a partition (4 maximum master partitions for this partition 
# type). Can can generally use the default arguments, supplying only the amount
# of space we want in blocks (512 came out to ~4gb for me), and the partition
# type (82 for swap, 83 for general linux is default). This will create:
# dev/xvdb1 with 1024 blocks
# dev/xvdb2 with the remainder of the disk
sfdisk /dev/xvdb << EOF
,512,82
;
;
;
EOF

# Now we format the swap partition:
mkswap /dev/xvdb1

# And the remainder. You can choose amoung the various filesystem types, but
# make sure you have the necessary formatter installed. To check, ls /sbin/mk*
mkfs.ext4 /dev/xvdb2

最后,我更愿意在包括安装我的信息/etc/fstab ,这是规定如何自动处理各种可用的设备在Ubuntu的系统文件。 这也是在启动时运行。

/dev/xvdb1      swap    swap    sw,nobootwait      0 0
/dev/xvdb2      /mnt2   ext4    defaults,nobootwait        0 0

该nobootwait选择是确保Ubuntu的不开机挂有“为/ dev的磁盘驱动器/ xvdb(1/2)还没有准备好或不存在。继续等待,或按S键跳过安装或M手动复苏。”

请确保您在创建文件夹/mnt2或任何你计划使用的mkdir安装此。

如何调试我与此遇到的问题?

您可以运行到rc.local脚本sudo /etc/rc.local看它运行找问题。 sudo fdisk -l应该表现出你的新分区运行后。 如果这看起来不错,尝试安装与设备sudo mount /dev/xvdb1 。 这将使用您保存在fstab中的配置。 如果失败,请尝试使用安装参数玩弄和fstab文件进行相应的调整。



Answer 2:

也许你正在寻找这样的: http://inprvt.com/index.php/blogs/entry/how-to-add-swap-space-on-a-linux-based-ec2-server

看到第二个方法。 您需要重新分区您的临时存储装置。 我把东西沿着这些线路到/etc/rc.local:

umount /dev/xvdb # in case it is already mounted
sfdisk /dev/xvdb << EOF
,1024,82
,
;
;
EOF
mkswap /dev/xvdb1 && swapon /dev/xvdb1
mkfs.xfs -f /dev/xvdb2 && mount /dev/xvdb2 /mnt

有两点需要注意:

  • 1024以上是在块大小(82是Linux交换分区类型)。 看来,针对不同的情况下阻止大小可以是不同的(就像设备名称)。 所以实验第一或为你计算基于了sfdisk输出什么是正确的。
  • mkfs.xfs通常需要几秒钟。 对mkfs.ext4可能需要半小时(1TB的卷上)。 YMMV取决于您选择的文件系统。


Answer 3:

发现交换空间的守护进程,负责创建和删除需求的交换文件照顾。 它只是需要一点调整,以节省短暂的驱动器上交换文件。

这在我看来,最优雅的解决方案:

DEBIAN_FRONTEND=noninteractive apt-get -y install swapspace
echo 'swappath="/mnt"' >> /etc/swapspace.conf
service swapspace restart


Answer 4:

我建立了swapspace第一(必须建立一个从源),但后来决定将回落到手动解决方案,因为我更喜欢在生产环境中存储更多的控制

假设我的2实例块设备安装在已配置/etc/fstab作为/.inst0/.inst1

加入这样的事情在/etc/rc.local

setup_swap()
{
  for D in /.inst0 /.inst1; do
    findmnt $D || continue
    cd $D || continue
    test -r swapfile || dd if=/dev/zero of=swapfile bs=1M count=12292
    chmod 600 swapfile
    mkswap swapfile
    swapon swapfile
  done
}

setup_swap

该代码是与EC2实例存储(又名SSD,又名“短暂的”,这是摧毁每次停止实例),并重启友好的完全兼容。

请记住,它需要一段时间来创建和/或启用交换文件,所以给它一点时间 ,一旦你重新启动,看看它是否工作。 :)



Answer 5:

为了能够在启动时交换(创建交换文件按照上面的说明之后),添加以下条目添加到/ etc / fstab中:

/mnt/swap1 swap swap defaults 0 0


文章来源: How to add swap to and Amazon EC2 instance running Ubuntu 12.04 LTS?