Ubuntu 18.04:使用 2 个交换分区或 2 个交换文件或各 1 个进行休眠,我该从哪一个恢复?

Ubuntu 18.04:使用 2 个交换分区或 2 个交换文件或各 1 个进行休眠,我该从哪一个恢复?

我运行的是一个相当简单的 Xubuntu bionic 18.04 安装,安装了一些额外的用户应用程序,但没有我所知道的额外的系统软件。

现在我已经将 RAM 扩展到 16GB,我似乎已经开始使用占用那么多内存甚至更多内存的应用程序了。所以我终于可以定期使用交换了。我没有重新分区磁盘,而是在第二个磁盘上添加了一个交换文件,除了第一个磁盘上的交换分区外,它运行得也很顺畅。这样做的好处是工作分散在两个磁盘上,我可以感受到速度。它看起来/etc/fstab像这样:

LABEL=TSWP              none swap sw,pri=1,nofail
/media/sdata/.swapfile  none swap sw,pri=1,nofail

这会产生典型的 swapon 报告,如下所示:

NAME                   TYPE      SIZE USED PRIO
/dev/sda2              partition  16G 4,8G    1
/media/sdata/.swapfile file       16G 4,7G    1

导致大量交换的应用程序与之配合得很好(很好),并且不会影响其他应用程序的顺利运行。但它通常需要几天或几周才能完成,我想偶尔关闭我的计算机。建议休眠。

现在有了足够的交换空间,休眠本身应该没有问题。但是我应该把内核指向哪里,从哪里恢复?这里(和其他论坛上)有很多答案告诉你如何针对 1 个交换位置执行此操作。但是如果你有 2 个位置怎么办?

  1. 我可以用同一个第二个磁盘上的第二个交换分区替换交换文件,并保持分散交换工作负载的优势,但这并不能解决任何问题:我仍然不知道休眠映像被写入哪个分区,所以我无法告诉内核从哪个交换分区恢复。

  2. 我可以扩大原来的交换分区,并删除交换文件,但这样我就失去了拥有 2 个交换位置的优势。而且重新组织已填满的磁盘也是有风险的。

  3. 我可以区分交换优先级。如果我给交换文件更高的优先级,并且交换/斯瓦彭交换分区,一段时间后,swapon 报告如下所示:

    NAME                   TYPE      SIZE USED PRIO
    /dev/sda2              partition  16G   0B    1
    /media/sdata/.swapfile file       16G 9,3G    2
    

    理论上,只要交换文件足够大,可以处理所有交换,交换分区在休眠时仍是空闲的。但这样不仅让我失去了工作量分散的优势,而且休眠似乎也可能会遵循与交换相同的优先级,选择已使用的交换位置而不是空闲位置。

  4. 我可以添加一个pm-utils脚本交换我将两个交换位置中的一个作为休眠准备,只留下另一个位置可供选择。但这会严重减少我拥有足够的未使用交换空间用于休眠映像的机会,这与我通过添加第二个交换位置所获得的结果相反。

  5. 在同一级别,我可以安装/激活一个交换位置/etc/fstab,并且斯瓦彭另一个是启动脚本。这样能解决任何问题吗?休眠过程是否会查找/ect/fstab实际的活动交换位置?我想不会。

所以我的问题是:无论是 2 个交换分区,还是 2 个交换文件,或者每个交换文件各 1 个,我该如何配置或可靠地预测休眠映像将写入哪个位置?这样我就可以指示内核从该位置恢复,而不是徒劳地寻找另一个位置并丢失我长期运行的作业的状态。

次要问题是:我该如何自己找到明显特殊情况的解决方案。例如,是调用systemctl hibernate,还是反过来,还是另一个代理最终负责休眠。这些中是否有任何可配置的交换位置?我是否可以安装另一个可以这样配置的系统实用程序?pm-hibernatepm-utils

感谢您的关注。

答案1

仅需考虑一些细节...

在最佳情况下,根本不使用交换。交换的使用速度很慢,因为它们所在的设备(通常是硬盘)的速度。“我能感觉到速度“是由于额外的 RAM,不是交换。

如果您有现代 SSD,最好在其上放置一个 /swapfile,并删除正在使用的任何交换分区。需要编辑 /etc/fstab。

如果 /etc/fstab,交换分区最好通过 UUID (UUID=xxx) 而不是标签 (LABEL=TSWP) 或设备 (/dev/sda2) 来引用。交换文件最好放在根目录 (/swapfile) 中,而不是可移动媒体 (/media/sdata/.swapfile) 中,并且不要创建为隐藏文件。

在非休眠情况下,16G RAM 的交换大小可能在 4-8G 范围内。在休眠情况下,交换需要大于物理 RAM,大约为 (1.2-1.5)*RAM。

您应该编辑 /etc/initramfs-tools/conf.d/resume 来指定恢复交换...使用您自己的 UUID...就像这样...

RESUME=UUID=071f8b0e-8e16-4f4d-90ff-a4ae9cc56e2b

然后创建一个新的 /boot/initrd.img* 文件:

sudo update-initramfs -c -k $(uname -r)

对于 16G RAM,设置 vm.swappiness 内核参数是有优势的,这样可以使用更多的 RAM,而使用更少的交换空间。

暂时测试一下:

sudo sysctl vm.swappiness=10# 默认值为 60

要进行永久性更改:

sudo sysctl -w vm.swappiness=10# 将值写入 /etc/sysctl.conf

sudo sysctl -p# 加载 /etc/sysctl.conf

最后,添加 RAM 后,应运行内存测试以确认内存良好,并成功添加到内存插槽。转到https://www.memtest86.com/并下载/运行他们的免费记忆测试来测试你的记忆力。至少完成一次所有 4/4 测试以确认记忆力良好。这可能需要几个小时才能完成。

相关内容