首页 > 系统相关 >Ubuntu22.04 & Win11 双系统hibernate热切换实现

Ubuntu22.04 & Win11 双系统hibernate热切换实现

时间:2024-01-31 16:57:30浏览次数:29  
标签:双系统 hibernate neo Ubuntu22.04 sudo swap var 分区

Ubuntu22.04 & Win11 双系统hibernate热切换实现

目录

[lab.magiconch.com][福音戰士標題生成器]-1695021721029

使用命令 free -m 来查看当前还剩余的内存

neo@NeoNeuxs:~$ free -m
               total        used        free      shared  buff/cache   available
Mem:           31711        4557       23753         193        3400       26519
Swap:           2047           0        2047

可以看到这台电脑,可以用内存是32GB,swap区的大小只有2G,这是不正常的,应该是安装系统的时候没有设置好,swap分区大小会影响电脑的休眠状态,即无法进入休眠状态,因为休眠的时候需要将内存的内容写入到交换分区当中。

修改交换分区或交换文件

swap分为两种分别是交换文件和交换分区,交换文件和交换分区是有所不同的,在较高版本的内核情况下,二者的差异不大,二者的差异往往是由文件系统来决定的,尤其是目前常用的都是EXT4的文件系统,据说二者的性能差异几乎可以忽略不计,这里没有测试,希望有人可以测试一下看看,不同的分区在跑代码的时候有没有区别,当然这个程序要占用内存足够大才可以测试出来。下面我们来讲一下二者的设置:

修改交换分区

如果在安装的过程中没有进行手动设置的话,你的swap类型很有可能是swpafile的形式,可以通过如下方式来查看具体类型:

命令:cat /proc/swaps

neo@NeoNeuxs:/dev$ cat /proc/swaps
Filename				Type		Size		Used		Priority
/swapfile                               file		2097148		0		-2
/dev/nvme0n1p7                          partition	67109884	0		-3

可以看到我有两个交换分区类型,一个是file一个是partition,两个大小不同,优先级不同。

/swapfile 的是系统直接给我创建的,我寻思是一点用都没有啊,默认的2G太小了,甚至无法休眠,也就没法进行系统的热切换了,遂萌生想法修改分区类型和大小。

首先如果要使用交换分区你需要有可用的硬盘空间,我是双系统多个硬盘,LINUX系统的分区无法进行压缩,也就是说无法将系统盘压缩,如下所示:

neo@NeoNeuxs:/dev$ lsblk
NAME        MAJ:MIN RM   SIZE RO TYPE MOUNTPOINTS
nvme1n1     259:0    0 953.9G  0 disk 
├─nvme1n1p1 259:1    0    16M  0 part 
├─nvme1n1p2 259:2    0 503.9G  0 part 
├─nvme1n1p3 259:3    0   513M  0 part 
└─nvme1n1p4 259:4    0 449.5G  0 part /
nvme0n1     259:5    0 953.9G  0 disk 
├─nvme0n1p1 259:6    0   260M  0 part /boot/efi
├─nvme0n1p2 259:7    0    16M  0 part 
├─nvme0n1p3 259:8    0 864.4G  0 part 
├─nvme0n1p4 259:9    0   950M  0 part 
├─nvme0n1p5 259:10   0    24G  0 part 
├─nvme0n1p6 259:11   0   260M  0 part 
└─nvme0n1p7 259:12   0    64G  0 part 

nvme1n1nvme1n1p2503G的分区存储了windos的资料,无法压缩出来可用空间,目前系统的分区nvme1n1p4也无法压缩,通过软件Gparted可以查看当前分区可以分割出来的大小,没办法只能使用另一块硬盘nvme0n1分出来了64G的空间nvme0n1p7来作为交换空间,分割出来没有进行格式化的空间以后,使用Gparted软件格式化成linuxswap分区格式,效果如下:

image-20240131005139221

有了linux-swap格式的分区之后,我们直接挂载即可:

neo@NeoNeuxs:/dev$ sudo swapon /dev/nvme0n1p7

挂载之后就可以看到:

neo@NeoNeuxs:/dev$ free -m
               total        used        free      shared  buff/cache   available
Mem:           31711        7107       21645         236        2958       23924
Swap:          67584           0       67584
neo@NeoNeuxs:/dev$ cat /proc/swaps
Filename				Type		Size		Used		Priority
/swapfile                               file		2097148		0		-2
/dev/nvme0n1p7                          partition	67109884	0		-3

为了实现开机自动挂载还需要修改一下,以下文件:

使用命令:sudo gedit /etc/fstab打开fstab,可以用其他编辑器如vim等。

如下图所示,最后一行是系统默认的缓存文件我们按照一样的格式,将我们的盘添加进去:

image-20240131015521411

修改最后一行:

image-20240131015636137

修改以后保存一下试一试。

经过hibernate测试之后发现了问题,就是重启之后会影响对应硬盘的符号,这个问题很致命,盘符号变更之后系统无法正确识别对应的缓冲区,应使用UUID来识别对应的缓冲分区,修改之后如下:

UUID=4047d76b-15e4-4513-8b79-f0f5d0c32b47  none         swap    sw        0       0
image-20240131155432221

获取对应硬盘的UUID

我们同样可以通过命令:

sudo lsblk -o name,mountpoint,size,uuid

效果如下:

image-20240131161313853

快速获取对应的硬盘的UUID,方法如下 grep后边的参数表明了要获取对应的swap分区的UUID:

blkid | grep swap
/dev/nvme1n1p7: LABEL="swaper" UUID="4047d76b-15e4-4513-8b79-f0f5d0c32b47" TYPE="swap" PARTLABEL="swaper" PARTUUID="c98d4618-281c-438f-8602-b3e34381f4fa"

修改交换文件

我们来修改一下交换文件:

1、关闭交换文件:

neo@NeoNeuxs:~$ sudo swapoff -a
neo@NeoNeuxs:~$ free -m
               total        used        free      shared  buff/cache   available
Mem:           31711        4692       23615         188        3402       26388
Swap:              0           0           0

2、创建swap分区文件:

neo@NeoNeuxs:/var$ sudo dd if=/dev/zero of=/var/swapfile bs=1M count=32768
	32768+0 records in
32768+0 records out
34359738368 bytes (34 GB, 32 GiB) copied, 15.1301 s, 2.3 GB/s

of代表输出文件(output file),这里指定的是/var/swapfile,本质上就是使用dd命令,复制一个特殊文件/dev/zerovar/swapfile/dev/zero全是0,即创建的是一个全是0的文件。

3、创建swap文件

使用命令:

sudo mkswap /var/swapfile

结果如下:

neo@NeoNeuxs:/var$ sudo mkswap /var/swapfile

mkswap: /var/swapfile: insecure permissions 0644, fix with: chmod 0600 /var/swapfile
Setting up swapspace version 1, size = 32 GiB (34359734272 bytes)
no label, UUID=ecf57d17-b84f-4002-9553-a995f6ab5839

4、修改权限并启用swap文件

neo@NeoNeuxs:/var$ sudo chmod 0600 /var/swapfile
neo@NeoNeuxs:/var$ sudo swapon /var/swapfile
neo@NeoNeuxs:/var$ free -m
               total        used        free      shared  buff/cache   available
Mem:           31711        4979         498         211       26233       26059
Swap:          32767           0       32767

使用交换文件按道理也能实现系统的热切换,但我没有具体实验,理论上应那该是可以的,设置的时候应该是相同的,设置为第3步的UUID即可,如果不行的话需要参考分区的热切换。

如何使Ubuntu进入hibernate?

实现双系统切换可以参考:

herbinate实现:https://askubuntu.com/questions/1240123/how-to-enable-the-hibernate-option-in-ubuntu-20-04

对于前几步为了保证教程的完整,我复制了过来,作为参考:

  1. Install pm-utils and hibernate:

    sudo apt install pm-utils hibernate
    
  2. Then:

    cat /sys/power/state
    
  3. You should see:

    freeze mem disk
    
  4. Then run one of the following lines:

    grep swap /etc/fstab
    blkid | grep swap
    
  5. 获取对应的SWAP分区的UUID,保存下来。

  6. 修改grub的配置文件:

    sudo nano /etc/default/grub	
    
  7. 修改对应行内容如下:

    GRUB_CMDLINE_LINUX_DEFAULT="quiet splash resume=UUID=<YOUR_COPIED_UUID>"
    
  8. 更新grub设置:

    sudo update-grub
    
  9. 启动hibernate模式

    sudo systemctl hibernate
    

需要注意的是,热切换系统需要grub引导的支持,如果直接通过Refind等引导Ubuntu直接启动是无法正常热切换的,也就是说需要进入到grub引导的驱动的界面引导Ubuntu启动。

参考文章

swap分区:https://www.baeldung.com/linux/swap-file-partition

swap分区实操:https://phoenixnap.com/kb/swap-partition

herbinate实现:https://askubuntu.com/questions/1240123/how-to-enable-the-hibernate-option-in-ubuntu-20-04

标签:双系统,hibernate,neo,Ubuntu22.04,sudo,swap,var,分区
From: https://www.cnblogs.com/NeoNexus/p/17999581

相关文章

  • Ubuntu22.04 上使用 C 语言实现简易聊天室程序
    Linux程序设计课程作业,在此记录下我的实现过程和思路,如有错误或不足,欢迎指正!代码:https://github.com/Tangsmallrong/Linux_network_program/1.需求设计并实现一个简单的聊天室程序,实现如下功能:用户界面:实现基于终端的字符界面,支持用户管理,包括用户名和密码的注册与登录。......
  • ubuntu22.04 mysql服务每天自动shutdown问题
    1.问题描述MYSQL每天自动关闭,查看/var/log/mysql/error.log.1.gz,内容如下:2019-06-12T06:33:13.582973+08:000[Note]Shuttingdownplugin‘CONNECTION_CONTROL_FAILED_LOGIN_ATTEMPTS’2019-06-12T06:33:13.583022+08:000[Note]Shuttingdownplugin‘CONNECTION_CON......
  • WSL2+Ubuntu22.04+Vscode 虚拟环境安装
    1.WSL2+Ubuntu22.04+Vscode虚拟环境安装详细攻略WIN11+WSL2+Ubuntu22.04+CUDA+MINICONDA3+Pytorch安装踩坑总结,手把手教学,看不会你打我1.1先决配置1.2安装命令官网https://learn.microsoft.com/zh-cn/windows/wsl/basic-commandswsl--install--no-distributio......
  • WSL2+Ubuntu22.04+Vscode 虚拟环境安装
    1.WSL2+Ubuntu22.04+Vscode虚拟环境安装详细攻略WIN11+WSL2+Ubuntu22.04+CUDA+MINICONDA3+Pytorch安装踩坑总结,手把手教学,看不会你打我1.1先决配置1.2安装命令官网https://learn.microsoft.com/zh-cn/windows/wsl/basic-commandswsl--install--no-distributio......
  • 阿里云rds云数据恢复至自建数据库 (linux 服务器版本ubuntu22.04)
    一、准备1.安装mysql5.7注意:需要跟rds云数据库版本对应2.安装PerconaXtraBackup工具,将解压后的备份文件恢复到自建数据库的数据目录中3.下载需要还原的物理备份文件我的是.qp类型wget-c'https://****.bak.rds.aliyuncs.com/****_xb.qp?****'-Oins2......
  • UEFI引导双系统安装archlinux后安装windows8.1,os-prober无法探测,生成grub.cfg没有wind
    1.os-prober无法探测可能是os-prober未启用启用os-prober:sudovim/etc/default/grub添加:GRUB_DISABLE_OS_PROBER=false之后:sudogrub-mkconfig-o/boot/grub/grub.cfg会显示类似这样:Warning:os-proberwillbeexecutedtodetect otherbootablepartitions.It......
  • ubuntu22.04回退系统内核
    开机之后突然发现nvidia-smi检查不到驱动了,发现因为内核自动更新导致的,这里介绍一下内核回退的方法。第一步:查看当前内核版本uname-a我的当前内核版本是:6.5.0-14-generic第二步:查看系统现存的内存版本grepmenuentry/boot/grub/grub.cfg我的系统存在两个内核版本:6.5.0-14-......
  • Ubuntu22.04安装Mysql
    1、下载mysql1.1使用仓库安装工具下载wgethttps://dev.mysql.com/get/mysql-apt-config_0.8.29-1_all.deb安装使用sudodpkg-i./mysql-apt-config_0.8.29-1_all.deb1.2安装mysql更新仓库sudoaptupgradesudoaptupdate安装mysqlsudoapt-getinstall......
  • 使用Ventoy制作Win to Go和Fedora to Go双系统
    这是一次简短的记录整体的思路实际上是通过虚拟机制作安装好系统的虚拟磁盘文件,然后加载到Ventoy中,从Ventoy启动Ventoy官方网站在实现的过程中,首先需要对存储介质(U盘等等,我是用的是固态硬盘盒)进行初始化并安装Ventoy随后使用虚拟机来安装系统,装在物理机的硬盘上就可以了,......
  • 浪潮CE3000F飞腾PC安装UOS/银河麒麟双系统的过程
    浪潮CE3000F飞腾PC安装UOS/银河麒麟双系统的过程背景为了进行兼容性验证,部门采购过一批浪费CE3000F的PC机器.前期系统安装的是UOS,但是有同事借走机器后重装了银河麒麟V10SP1结果安装人忘记了银河麒麟的密码,UOS又进不去系统.所以没办法只能全新安装一次.第一步下载......