![为什么 Linux 中不能使用交换文件来休眠?](https://linux22.com/image/130430/%E4%B8%BA%E4%BB%80%E4%B9%88%20Linux%20%E4%B8%AD%E4%B8%8D%E8%83%BD%E4%BD%BF%E7%94%A8%E4%BA%A4%E6%8D%A2%E6%96%87%E4%BB%B6%E6%9D%A5%E4%BC%91%E7%9C%A0%EF%BC%9F.png)
我尝试使用交换文件暂时休眠我的 Fedora 27 系统,但失败了。以下问题的答案还表明必须使用专用交换分区来休眠系统,并且交换文件将不起作用。
我使用的是 ext3 文件系统,在其中创建了交换文件。是什么阻止它用于冬眠?
答案1
你可以做到这一点,我已经写了一个很大的文档在这个SO回复中uswsusp
,在全球范围内,它通过正确使用和配置 initramfs 和 Grub来工作。
答案2
正如所说这里(链接由@don_crissti提供),系统必须找到交换文件的标头,但为了做到这一点,必须安装包含交换文件的文件系统,并且在从磁盘恢复期间无法安装日志文件系统(如ext3) 。
引用自文档:
为了将交换文件与 swsusp 一起使用,您需要:
1)创建交换文件并使其处于活动状态,例如。
# dd if=/dev/zero of=<swap_file_path> bs=1024 count=<swap_file_size_in_k>
# mkswap <swap_file_path>
# swapon <swap_file_path>
2) 使用一个应用程序,在 FIBMAP ioctl 的帮助下对交换文件进行 bmap,并确定文件交换头的位置,即距
<PAGE_SIZE>
保存交换文件的分区开头的偏移量(以单位为单位)。3)在内核命令行中添加以下参数:
resume=<swap_file_partition> resume_offset=<swap_file_offset>
其中
<swap_file_partition>
是交换文件所在的分区,<swap_file_offset>
是 2) 中应用程序确定的交换头的偏移量(当然,这一步可以由使用确定交换文件头偏移量的同一应用程序自动执行) FIBMAP 读写控制)或者
使用用户态挂起应用程序,该应用程序将在 Documentation/power/userland-swsusp.txt 中描述的 SNAPSHOT_SET_SWAP_AREA ioctl 的帮助下设置分区和偏移量(这是挂起到交换文件的唯一方法,允许从initrd 或 initramfs 映像)。