因为我花了一天的大部分时间为自己理解这个问题,并且因为提取 ayurchen 的链接需要进行谷歌缓存搜索,所以我想我会发布一个稍微更详细的演练,借鉴 ayurchen 非常有用的答案。
什么是交换空间,为什么要使用它?
交换空间是 Linux(和大多数其他操作系统)在实际物理内存开始变得拥挤时用于从内存中存储对象的磁盘空间。因为磁盘通常比内存慢,Linux 将最近最少使用的对象首先存储在交换中,并尽可能多地保存在内存中。如果可能,通常建议使用与内存大小相等的交换空间。在此处查看有关交换空间的更多详细信息。
我应该在哪里设置?
我也开始使用的 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。