为什么 Linux 中不能使用交换文件来休眠?

为什么 Linux 中不能使用交换文件来休眠?

我尝试使用交换文件暂时休眠我的 Fedora 27 系统,但失败了。以下问题的答案还表明必须使用专用交换分区来休眠系统,并且交换文件将不起作用。

为什么 Linux 使用交换分区而不是文件?

我使用的是 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 映像)。

相关内容