Arch/Manjaro默认是没有休眠机制的,需要用户手动启用
这是一个教程,希望你能看得懂

设置Swap

Swap分为Swap分区和Swap文件两种,Swap分区不容易更改,Swap文件可以方便更改大小
我这里用的是Swap文件

  1. 创建Swap文件
    dd if=/dev/zero of=/swapfile bs=1M count=512 status=progress
    bs为单位,count为容量,此样例中意思为“在/路径创建swapfile文件,大小为512个1M(512M)”
    ⚠️Swap的容量需要创建比较大,最好和物理内存相同,至少也要物理内存的2/3,否则会导致休眠失败
  2. 设置权限
    chmod 600 /swapfile
  3. 格式化
    mkswap /swapfile
  4. 启用
    swapon /swapfile
  5. 自动挂载
    编辑文件/etc/fstab
    1
    /swapfile none swap defaults 0 0

设置内核参数

在这个环节中,有两个重要参数:resumeresume_offset
获取方法:
resume:命令行输入findmnt -no UUID -T /swapfile
resume_offset:命令行输入sudo filefrag -v /swapfile | awk '{ if($1=="0:"){print substr($4, 1, length($4)-2)} }'

编辑/etc/default/grub
1
2
3
...
GRUB_CMDLINE_LINUX="resume=UUID=xxx resume_offset=xxx"
...

*xxx代表在上面命令中获取到的值
*如果该行=后面已经有东西,直接在行末添加上文中=后面的内容即可(如果有双引号要添加在双引号内)

配置 initramfs

1.添加resume钩子或systemd钩子 编辑/etc/mkinitcpio.conf,在HOOKS行中添加resume钩子或systemd钩子
例如该行原有内容是:
HOOKS="base udev autodetect modconf block filesystems keyboard fsck"

添加resume后就是:
HOOKS="base udev resume autodetect modconf block filesystems keyboard fsck"

添加systemd后是:
HOOKS="base udev systemd autodetect modconf block filesystems keyboard fsck"

*resume和systemd二选一加入即可

2.重新生成 initramfs 镜像:
mkinitcpio -P

重启电脑

更改内核参数后需要重启电脑生效,接下来就可以试试能否正常使用了

本文大部分参考自Archlinux Wiki,如有错误请即使指出