除此创建交换分区之外,我们还需要修改kernel的启动参数,让系统在启动时先尝试从交换空间中恢复状态。 具体操作如下:
1. 如果使用交换分区来保存,则只需要为添加kernel的启动参数 resume=交换分区 即可
(1) 查看那块分区是交换分区
swapon
| NAME TYPE SIZE USED PRIO /dev/sda2 partition 8G 280K -2 /swapfile file 5G 0B -3 |
可以看出交换分区为 /dev/sda2
(2) 修改 /etc/default/grub, 为 GRUB_CMDLINE_LINUX_DEFAULT 行添加参数 resume=/dev/sda2
| sudo sed -i '/GRUB_CMDLINE_LINUX_DEFAULT/ s!"$! resume=/dev/sda2"!' /etc/default/grub |
2. 如果是使用交换文件,则需要添加两个参数 resume=交换文件所在磁盘 以及 resume_offset=交换文件在磁盘中的偏移位置:
(1) 查看交换文件所在磁盘
df /swapfile
文件系统 1K-块 已用 可用 已用% 挂载点
/dev/sda3 55253696 27582224 24834972 53% /
说明磁盘为 /dev/sda3
(2) 查看交换文件的偏移位置
| sudo filefrag -v /swapfile|head -5 Filesystem type is: ef53 File size of /swapfile is 5368709120 (1310720 blocks of 4096 bytes) ext: logical_offset: physical_offset: length: expected: flags: 0: 0.. 32767: 4653056.. 4685823: 32768: 1: 32768.. 65535: 4685824.. 4718591: 32768: |
这里可以看出物理偏移位置时4653056
(3) 修改 /etc/default/grub, 为 GRUB_CMDLINE_LINUX_DEFAULT 行添加参数 resume=/dev/sda3 resume_offset=4653056
| sudo sed -i '/GRUB_CMDLINE_LINUX_DEFAULT/ s!"$! resume=/dev/sda3 resume_offset=4653056"!' /etc/default/grub |
3. 重新生成 grub.cfg 文件
sudo grub-mkconfig -o /boot/grub/grub.cfg
(1) 配置initramfs添加 resume hook 修改 /etc/mkinitcpio.conf 文件,在 HOOKS 中添加 resume
| sudo sed -i '/^HOOKS=/ s/)/ resume)/' /etc/mkinitcpio.conf |
其中由两点需要注意:
由于分区的label和UUID都是 udev 分配的,因此 resume 必须放在 udev 之后 由于 systemd hook 已经有了 resume 的功能,因此若已经有了 systemd hook,则无需再添加 udev hook(2) 重新生成initramfs








