启用交换后,LUbuntu 上不会进行交换

v_m*_*mil 3 lubuntu swap ram

我的平板电脑配备 4 GiB RAM 和 SSD 128 GiB,运行 LUbuntu 18.04。

当内存使用量达到大约时。3.9G,系统挂起。只有鼠标指针移动有滞后。按 Ctrl+Alt+Fx 没有反应。

swapon据报告为 8 GiB:

$ sudo swapon --show
NAME      TYPE      SIZE USED PRIO
/dev/sda2 partition   8G   0B   -2
$ sudo sysctl vm.swappiness 
vm.swappiness = 60
$ uname -r
4.15.0-55-generic
Run Code Online (Sandbox Code Playgroud)

为什么内存实际上没有交换?如何启用交换?

Raf*_*ffa 5

根据个人经验,在较新版本的 Ubuntu 中,交换文件可能比交换分区更好地利用。您可以尝试创建一个交换文件并禁用交换分区,然后看看它如何为您工作。为此,请按照下列步骤操作:

  1. 创建交换文件(8 Gib):

    sudo fallocate -l 8G /swapfile
    
    Run Code Online (Sandbox Code Playgroud)
  2. 授予文件正确的权限以限制不必要的访问:

    sudo chmod 600 /swapfile
    
    Run Code Online (Sandbox Code Playgroud)
  3. 准备文件作为交换区域:

    sudo mkswap /swapfile
    
    Run Code Online (Sandbox Code Playgroud)
  4. 激活交换文件:

    sudo swapon /swapfile
    
    Run Code Online (Sandbox Code Playgroud)
  5. 停用交换分区:

    sudo swapoff /dev/sda2
    
    Run Code Online (Sandbox Code Playgroud)

现在测试您的系统交换的行为。


注意:(除了创建/swapfile),对交换卷所做的这些更改是临时的,将在重新启动后清除。如果您希望永久更改,


fallocate或者dd

感谢@heynnema在下面的评论部分提出这个问题:

不,不要使用fallocate创建 /swapfile,使用dd. 在 AU 上搜索有关此内容的信息。

fallocate我认为担心的是创建文件漏洞的可能性,这些文件漏洞基本上是包含空字符的文件的一部分,并且不存储在磁盘上的任何数据块中。如果存在的话,这反过来会导致交换文件无法使用。

为了解决这个问题,让我们看看fallocate创建文件漏洞的可能性及其后果。

事实证明:

  • fallocate通常不会创建漏洞,除非它是在预先存在的文件上操作并且--punch-hole指定了该选项。请阅读Ubuntu 手册页 - Fallocate

  • fallocate --length 8GiB swapfile建议在 Ubuntu 手册页上创建交换文件,请阅读Ubuntu 手册页 - mkswap

  • 毕竟,如果创建的文件中包含漏洞,sudo swapon则会抛出错误skipping - it appears to have holes.,在这种我还没有遇到或听说过的罕见情况下,解决方案很简单。只需使用dd上面步骤 1 中创建的文件即可继续。请按如下方式进行:

    sudo dd if=/dev/zero of=/swapfile bs=1024 count=8388608
    
    Run Code Online (Sandbox Code Playgroud)

    或者像@v_mil那样:

    sudo dd if=/dev/zero of=/swapfile bs=1048576 count=8192
    
    Run Code Online (Sandbox Code Playgroud)

简而言之,这种担忧还不足以令人担心而放弃使用所获得的速度fallocate