menu E4b9a6's blog
rss_feed
E4b9a6's blog
有善始者实繁,能克终者盖寡。

Manjaro创建交换分区

作者:E4b9a6, 创建:2021-06-15, 字数:1832, 已阅:170, 最后更新:2024-03-10

这篇文章更新于 226 天前,文中部分信息可能失效,请自行甄别无效内容。

设置Manjaro的休眠分为三步,第一步是创建swapfile交换区,第二步是修改引导内核,第三步则是修改HOOKS钩子

  1. 创建swap文件(如已有swap分区也可以使用)
  2. 修改引导内核
  3. 修改内核中的HOOKS钩子

TIP 整个过程无需重启

首先我们需要创建swapfile文件区(如果是swap分区,请参考本文结合资料引用处的ArchWiki进行设置)

Bash
# 查看swap分区信息(没有设置则没有输出)
swapon --show

# 创建大小为0的文件
sudo truncate -s 0 /swapfile

# 使用fallocate 创建指定大小的文件(单位M或者G)
# 1. 如果文件系统不是F2FS,使用下面的命令即可
sudo fallocate -l 32G /swapfile
# 2. 如果文件系统是F2FS,使用下面的命令
dd if=/dev/zero of=/swapfile bs=1G count=32 status=progress

# 授权并格式化
sudo chmod 600 /swapfile
sudo mkswap /swapfile

# 启用swap
sudo swapon /swapfile

# 查看swap分区信息(如有输出则说明成功)
swapon --show


# 添加开机自动挂载swapfile文件
sudo vim /etc/fstab
/swapfile none swap defaults 0 0

swap文件设置完成,接下来我们要改动grub和内核Hook来完成休眠设置

获取swapfile文件所在分区UUIDswapfile文件的偏移量

TEXT
# 查询所有分区的UUID,记下swapfile文件所在分区的UUID
sudo lsblk -f
# 查询swapfile文件的偏移量,第一行(显示0行)的physical_offset即为偏移量,记下这个偏移量
sudo filefrag -v /swapfile

利用上述记下的swapfile所在分区UUID以及swapfile文件偏移量来设置内核参数并生成grub引导

TEXT
sudo vim /etc/default/grub

# 假设原来的GRUB_CMDLINE_LINUX_DEFAULT值为
GRUB_CMDLINE_LINUX_DEFAULT=”quiet intel_pstate=enable”
# 修改后的值内容(其实就是追加到GRUB_CMDLINE_LINUX_DEFAULT值后面)
GRUB_CMDLINE_LINUX_DEFAULT=“quiet intel_pstate=enable resume=UUID=[swapfile文件所在分区的UUID]resume_offset=[swapfile文件的偏移量]" 

 sudo update-grub

第三步配置initramfs的resume钩子并重新生成 initramfs 镜像

TEXT
sudo vim /etc/mkinitcpio.conf

# 假设原来HOOKS的值如下
HOOKS="base udev autodetect modconf block filesystems keyboard fsck"
# 修改后的值如下(假如使用lvm分区,则要注意将resume放到lvm后面
HOOKS="base udev resume autodetect modconf block filesystems keyboard fsck"

# 重新生成initramfs镜像(51是我的Linux内核版本号,可以使用uname -a查看)
mkinitcpio -p linux51

此时休眠就可以正常使用了,使用 systemctl hibernate 进行休眠测试

资料参考

休眠设置 - Arch Wiki

swap - Arch wiki


[[replyMessage== null?"发表评论":"发表评论 @ " + replyMessage.m_author]]

account_circle
email
web_asset
textsms

评论列表([[messageResponse.total]])

还没有可以显示的留言...
gravatar
[[messageItem.m_author]] [[messageItem.m_author]]
[[messageItem.create_time]]
[[getEnviron(messageItem.m_environ)]]
[[subMessage.m_author]] [[subMessage.m_author]] @ [[subMessage.parent_message.m_author]] [[subMessage.parent_message.m_author]]
[[subMessage.create_time]]
[[getEnviron(messageItem.m_environ)]]