假设我有两个不同的 Linux 安装A和乙,都使用相同的交换分区。
据我了解,运行A或者乙不会引起交换问题,因为在给定时间只有其中一个正在使用它。但是,如果我启动A,休眠,然后启动乙, 交换正在被使用两个都(A以被动形式,但数据在那里)。
问题是:休眠后的系统还能存活吗?如果不是的话,内存会被损坏吗?A只是无法恢复,导致正常启动?
注意:我的主要音乐会是检测和使用硬盘驱动器上可用交换分区的实时系统。他们会破坏休眠系统吗?
答案1
问题是:休眠后的系统还能存活吗?
如果系统 B 使用交换空间(您可能会认为它会使用交换空间),那么我真的怀疑系统 A 是否能够成功从休眠状态重新启动,如果这样做,后果可能会很糟糕。
如果没有,内存是否会被损坏或者A将无法恢复?
尽管内核文档确实包含:
* BIG FAT WARNING *********************************************************
*
* If you touch anything on disk between suspend and resume...
* ...kiss your data goodbye.
我认为这适用于实际的文件系统,因为它还[src]/Documentation/power/swsusp.txt
指出:
恢复过程检查恢复设备是否存在,如果找到,则检查休眠映像签名的内容。如果两者都找到,它将恢复休眠映像。
所以,假设该签名位于交换设备的开头,并且假设正常的交换使用也在设备的开头开始,那么正常的交换使用将破坏“休眠映像签名”,并且当系统A启动时,它将找不到这样的签名并且不会从休眠中恢复,它只会启动新鲜的。
但是,尽管这些假设看起来合理,但由于没有实施该系统的人做出任何承诺,所以不可能说它们是完全合理的——我的建议是,你这样做可能是在进行一次严重的赌博。
顺便说一句,如果您正在使用休眠模式并且引导加载程序菜单中还没有这样的选项,那么最好noresume
在内核行中包含一个这样的选项,这样您就可以选择跳过从休眠状态恢复。据我所知,不幸的是,没有这样的内核行参数来禁用交换的使用,例如,当您知道系统 A 使用交换进行休眠时,对于系统 B 来说。
答案2
第一个系统将其内存存储在交换区中,因此,如果您尝试启动也使用相同交换区的第二个系统,则会发生以下两种情况之一:第二个系统将尝试恢复使用第一个系统的数据,这将导致崩溃并烧毁,否则它将擦除第一个系统的内存,使其无法恢复。
作为一般规则,当操作系统处于休眠状态时,切勿启动到另一个操作系统。如果第二个操作系统尝试挂载第一个操作系统已挂载的同一分区,则会损坏文件系统,因为第二个操作系统不知道第一个操作系统可能仍然缓存了哪些数据,而第一个操作系统也不知道第二个操作系统在休眠时更改了什么。