登录
首页 >  文章 >  linux

Linux与Windows间休眠模式无缝切换攻略

时间:2025-05-04 08:16:35 448浏览 收藏

在Linux上运行Windows虚拟机时,用户常常需要在两个系统间无缝切换以完成不同任务。本文详细介绍了如何通过设置休眠模式,在Linux和Windows系统间实现快速切换,保留系统运行状态。休眠模式通过将系统状态保存到硬盘的交换分区,允许用户在开机时恢复到关机前的状态,避免了重复开启程序的繁琐过程。文章还提供了具体的配置步骤,包括Linux的交换分区设置、根文件系统和内核参数的调整,以及Windows系统中电源选项的修改,确保用户能够高效地在两大操作系统间转换工作环境。

前言

在 Linux 电脑上运行 Windows 虚拟机时,有些任务依然需要真机支持,比如运行大型独占软件或备份某些社交软件的聊天记录。虽然备份可以在虚拟机中进行,但通过手机热点连接的速度太慢,实在耗不起时间。

很多时候,用户可能刚在 Linux 上工作或刚在 Windows 上玩游戏,突然需要在 Windows 上运行某些程序或切换到 Linux 进行办公。此时,我不希望关闭 Linux 或 Windows 系统,因为任务并不复杂,很快就能完成。此外,电脑布局可能比较多,开机后再逐一打开程序会很耗时。

这时可以选择休眠,休眠会保存系统的运行状态,直到下次开机时恢复。这就是本文的主要内容:如何在 Windows 和 Linux 系统中设置休眠,保存系统状态。

设置休眠电脑系统存在多种挂起方案,其中比较重要的是:

Suspend to RAM, suspend. 挂起,通常是电脑进入的熄屏状态,它将状态保存到 RAM(随机存取内存)。Suspend to disk, hibernate. 休眠,休眠后会关机,它将状态保存到硬盘,实际上是交换空间(swap space),即交换分区(swap partition)。这个状态一般不会自动进行,且由于状态保存到交换分区,电脑开机后可以恢复到关机前的状态。Linux 休眠在安装时会进行分区,一般包括根分区(root)、家分区(home)和交换分区(swap)三个分区。根分区通常占总空间的三分之一,交换分区是电脑内存的一倍到两倍,剩余空间分配给家分区。这里的电脑内存指的是 RAM,通常称为运存。比如我的电脑内存是 8G,那么交换分区可以设置为 8G 或 16G。

有人可能会问,现在还用交换分区做什么?交换分区最初是为了解决内存不足的问题,但现在也可以用于其他用途,比如休眠。一般来说,交换分区应该设为内存的两倍,这样在休眠时,交换分区刚好可以保存运行状态的所有数据,并且还有盈余,体现了宁缺勿滥的原则。

但我遇到了麻烦,我后来给电脑加了一条内存条,内存变成了 16G,而我的交换分区只有 8G。不过不用担心,一般来说问题不大,因为还是有机会的。我一直正常使用也没出现问题。

配置根文件系统Linux 启动涉及到比较复杂的过程,其中大部分需要使用到一个较小的、完整的系统,叫做 initramfs(初始 RAM 文件系统),即根文件系统。如果我们需要在开机时恢复上次关机前的电脑状态,那就需要在这里给根文件系统添加任务。

首先打开 /etc/mkinitcpio.conf,找到 HOOKS 一行,添加 resume 钩子:

$ vim /etc/mkinitcpio.conf
...
# HOOKS=(base udev autodetect modconf kms keyboard keymap block filesystems fsck)
HOOKS=(base udev autodetect modconf kms keyboard keymap block filesystems resume fsck)
...

我将原来的钩子注释掉,然后添加一行,这样避免出错无法还原。resume 需要在 udev 后面,因为这些钩子是按顺序调用的,交换分区需要 udev 检查。如果在调用 udev 之前使用 resume,系统就找不到交换分区了,必须先让 udev 找到交换分区。

我在 resume 放在 fsck(文件检查)之前,udev 之后,不知道有什么深意,但我忘了。不过不重要,只需要记住在 udev 之后即可。

配置完成后,需要重新生成 initramfs,即在命令行上调用 sudo mkinitcpio -P。命令会产生很多输出,但这不重要。

$ sudo mkinitcpio -P

设置内核参数initramfs 配置的是钩子,也就是 resume 后需要处理的东西,我们需要在内核参数(kernel parameters)上告诉系统从哪里恢复上次的状态。

首先确认自己的交换分区是哪个分区,一个简单的办法是使用 sudo fdisk -l

$ sudo fdisk -l
...
Device         Start        End    Sectors   Size Type
/dev/sda1       2048  275800063  275798016 131.5G Microsoft basic data
/dev/sda2  292577280  502292479  209715200   100G Linux filesystem
/dev/sda3  502292480 1953525134 1451232655   692G Linux filesystem
/dev/sda4  275800064  292577279   16777216     8G Linux swap
...

可以看到,有个 Type 写的是 Linux Swap,这就是交换分区,即 /dev/sda4 分区。

也可以使用 cat /etc/fstab 查看:

$ cat /etc/fstab
#      
...
# /dev/sda4 LABEL=ArchLinuxSwap
UUID=92b7f976-98c5-4eef-9fc7-ba037fd8552e       none            swap            defaults        0 0
...

也可以看到注释上写的 /dev/sda4 就是交换分区。

用编辑器打开 /etc/default/grub,找到 GRUB_CMDLINE_LINUX 一行,如果没有就自己添加一行,在这行的末尾引号内添加 resume=你的交换分区。我的是 /dev/sda4 所以写 resume=/dev/sda4,也可以用 UUID 替代,也就是 resume=UUID=92b7f976-98c5-4eef-9fc7-ba037fd8552e

$ vim /etc/default/grub
...
GRUB_CMDLINE_LINUX_DEFAULT="loglevel=3 quiet"
GRUB_CMDLINE_LINUX="nvidia_drm.modeset=1 resume=/dev/sda4"
...

保存退出后,需要重新生成 grub 文件,即在命令行输入:

$ sudo grub-mkconfig -o /boot/grub/grub.cfg

同样也有一堆输出。

尝试 Linux 休眠配置好之后,Linux 休眠可以通过 systemctl 来启动。在命令行上输入:

$ sudo systemctl hibernate

然后电脑就会进行休眠,等到屏幕和键盘灯都灭了就可以开机进入 Windows 进行休眠设置了。

Windows 系统休眠启动 Windows 系统,打开搜索,搜索电源选项,然后选择“选择电源按钮的功能”,将电源按钮的功能改为“休眠”。下面是 Windows7 的演示:

通过休眠在 Linux 和 windows 之间无缝切换搜索电源选项

通过休眠在 Linux 和 windows 之间无缝切换将电源按钮的功能改为“休眠”

Windows10 和 Windows11 的设置方法也类似,只是可以设置的选项可能更多,例如接通电源如何、使用电池如何、睡眠按钮如何、关闭盖子如何,可以根据自己的需求进行设置。

Windows 配置好之后,不要关闭控制面板,直接按电源键进行休眠。休眠后重新启动进入 Linux,看看是不是保留着原本的工作状态,如果是,可以再休眠进入 Windows 看自己的控制面板还在不在。

对于 Windows,如果将电源键改成了休眠,该如何真的关机?可以直接使用快捷键 alt+f4,然后选择关机或者重启即可。

后语一篇文章控制在 2000 字左右差不多了,后面的计划是写在 Linux 上使用 Nvidia 显卡。GNOME 桌面对 Nvidia 显卡的支持更好一点,而且我也没在 KDE 上试过 —— 我更喜欢 GNOME 桌面,所以后面的设置主要针对的是 GNOME 的显示管理器 GDM(GNOME Display Manager)。

以上就是本文的全部内容了,是否有顺利帮助你解决问题?若是能给你带来学习上的帮助,请大家多多支持golang学习网!更多关于文章的相关知识,也可关注golang学习网公众号。

相关阅读
更多>
最新阅读
更多>
课程推荐
更多>