ubuntu-12.04 - 如何将交换添加到运行Ubuntu 12.04 LTS的Amazon EC2实例?

标签 ubuntu-12.04

默认情况下,Ubuntu 12.04 LTS出于某种原因不会创建交换。
安装后是否有“适当”的方式添加它?

root @ aux3:/root#df -h
已使用的文件系统大小可用百分比已安装在
/dev/xvda1 8.0G 1.4G 6.3G 18%/
udev 1.9G 12K 1.9G 1%/dev
tmpfs 751M 188K 750M 1%/运行
无5.0M 0 5.0M 0%/运行/锁定
无1.9G 0 1.9G 0%/运行/shm
/dev/xvdb 394G 79G 296G 21%/mnt

root @ aux3:/root#交换-s
文件名
root @ aux3:/root#免费-m
已使用的可用共享缓冲区总数
内存:3750 3730 20 0 75 3433
-/+缓冲区/缓存:221 3528
掉期: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
交换/mnt/swap1

最佳答案

因为我一天中的大部分时间都为自己理解了这个问题,并且因为拉出ayurchen的链接需要进行Google缓存搜索,所以我认为我会发布一些更详细的演练,以ayurchen的非常有帮助的答案为依据。

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

交换空间是Linux(和大多数其他操作系统)用于在实际物理内存开始变得拥挤时从内存中存储对象的磁盘空间。因为磁盘通常比内存慢,所以Linux首先在交换中存储最近使用最少的对象,并在内存中保留尽可能多的对象。如果可能的话,通常建议交换空间的大小等于您的内存。查看有关交换空间here的更多详细信息。

我应该在哪里设置?

我也开始使用的Ubuntu 12.04 LTS AMI最初没有配置交换空间,因为存储设备的大小和数量可能会有所不同。但大多数自动提供了一个大型免费临时存储设备。由于S3存储受成本限制,因此临时驱动器是交换文件的好地方。我的设备具有与问题/dev/xvdb中提到的设备名称相同的名称,但是您可以在实例启动期间对其进行配置。

如何在临时存储驱动器上设置交换空间?

交换空间可以在单个文件或设备分区中设置。文件可以用磁盘上的非相邻块表示,而分区是一组预定义的相邻块。由于磁盘读写速度更快,因此您不必长时间保持读取头的移动,因此使用分区可以获得更好的性能。 (这就是为什么上面的问题使用文件作为临时解决方案来打折的原因。)

Linux附带了许多程序来管理磁盘分区,包括fdisk,sfdisk,parted等。我们将使用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。

关于ubuntu-12.04 - 如何将交换添加到运行Ubuntu 12.04 LTS的Amazon EC2实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11350985/

相关文章:

linux - 如何让 Sublime Text 2 包管理器使用我的代理?

linux - 如何卸载从源代码安装的 gcc?

android - 错误 libGL.so : cannot open shared object file using Android emulator

mysql - 从mysql执行系统命令

java - 无法使用java从linux系统读取文件

linux - Node 服务器错误时 "node index.js"(EADDRINUSE)

Redis 磁盘大小巧合?

python - pip geoip在ubuntu gcc中安装错误

php - PHP 5.6.8 中缺少 JSON_PRESERVE_ZERO_FRACTION

ubuntu-12.04 - "texi2dvi"未找到命令