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

使用命令 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分区格式,效果如下:

有了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等。

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

修改最后一行:

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

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

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

获取对应硬盘的UUID

我们同样可以通过命令:

sudo lsblk -o name,mountpoint,size,uuid

效果如下:

快速获取对应的硬盘的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

Ubuntu22.04 & Win11 双系统hibernate热切换实现的更多相关文章

  1. Solution: Win 10 和 Ubuntu 16.04 LTS双系统, Win 10 不能从grub启动

    今年2月份在一台装了Windows的机器上装了Unbuntu 14.04 LTS (双系统, dual-boot, 现已升级到 16.04 LTS). 然而开机时要从grub启动 Windows (选 ...

  2. win10 + Ubuntu 20.04 LTS 双系统 引导界面美化

    版权声明:本文为CSDN博主「ZChen1996」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明. 原文链接:https://blog.csdn.net/ZChen1 ...

  3. Ubuntu 16.04 + Win10双系统 启动Ubuntu进入命令行 无界面

    Ubuntu 16.04 + Win10双系统,启动Ubuntu时候报错,并入命令行(无界面). 原因:可能是双系统兼容性问题 解决办法: 重启系统,进入Win10 然后在Win10中重启电脑. 重启 ...

  4. ubuntu10.04+win7双系统,重装win7后,恢复grub引导菜单以及命令行引导linux

    我在我的小Y上安装了ubuntu10.04和win7旗舰版的双系统,采用的是grub引导.今天win7不知道哪儿出了问题,windows update更新一直报错,(当然360也是打不上滴)网上查了很 ...

  5. <转>Win7系统下利用U盘安装Ubuntu_12.04实现双系统教程

    目前网上流传的关于Linux 系统的安装教程可是说是五彩缤纷,之前想采用硬盘安装方式,由于配置问题未能正确安装,现研究了下U盘安装,根据互联网上的一些资料及自己的总结,在Windows7 系统下采用U ...

  6. Ubuntu 16.04 win7 双系统时间问题

    在安装了win7的电脑上又装了一个Ubuntu 16.04,这Ubuntu的启动速度慢就选不说了,切加win7之后发现时间也不对啊. 所以记一个随笔记录一下自己修改双系统的日期. 当然,网上也搜过,说 ...

  7. 深度学习1--ubuntu14.04+win10双系统

    相当多的内容参考的百度经验https://jingyan.baidu.com/article/eb9f7b6d79a7b4869364e885.html?qq-pf-to=pcqq.group 还可以 ...

  8. SSD+HDD 安装ubuntu16.04+win7双系统

    本人电脑是联想天逸100  前段时间把光驱拆了加了一个128G的SSD 顺便把SSD装上了win7  机械硬盘500G放资料和一般软件之类的   后来想要用到ubuntu  就在官网下载ubuntu1 ...

  9. win7系统下安装Ubuntu18.04组成双系统

    最近在闲鱼上花了350大洋淘到了一台tinkpad sl510,这大概是一台发布于2009年的一台电脑了吧,处理器是酷睿二t440,2Gddr3的显卡,让我有点意外的是这台电脑的硬盘是7200转的32 ...

  10. Win10+Ubuntu18.04安装双系统

    一:相关资料 (一)Win10+Ubuntu18.04 亲测UEFI启动模式双硬盘+双系统成功安装经验(文章) (二)如何安装Linux与windows双系统?(视频) 推荐先看视频,之后按照文章进行 ...

随机推荐

  1. (转)Github+jsDelivr+PicGo 打造稳定快速、高效免费图床

    转载自:https://www.itrhx.com/2019/08/01/A27-image-hosting/ 写在开头,之前我是使用Gitee作为图床和Picgo搭配使用的 (图片不允许超过1MB) ...

  2. 【每日一题】33. 简单瞎搞题 (滚动数组 + bitset 优化DP)

    补题链接:Here 这个问题的难点在于如何统计出所有和可能出现的情况,并且不能重复. 很容易想到用桶去存储每一个数,即某个和能够组合出来则为1,否则为0 不妨令 \(dp[i][j]\) 表示为第 \ ...

  3. vivo 商城前端架构升级—前后端分离篇

    本文主要以 vivo 商城项目的前后端分离经验,总结前后端分离思路,整理前后端分离方案,以及分离过程中遇到的问题及解决方案. 一.前言 vivo官方商城在2015年创建网上商城,开辟网络销售渠道,几年 ...

  4. vivo 应用商店推荐系统探索与实践

    介绍 vivo 应用商店推荐系统如何高效支撑个性化的推荐需求. 一.前言 商店的应用数据主要来源于运营排期.CPD.游戏.算法等渠道,成立推荐项目之后也没有变化,发生变化的是由推荐系统负责和数据源进行 ...

  5. java中除法结果不对。

    今天遇一个非常简单地计算,计算结果居然是不对0,查了一些前辈们的资料动手实验了一下,实验结果和代码分享给大家.需要计算的公式:(7/10)*0.8 结果居然不是0.56 而是 0,最后找到原因(7/1 ...

  6. 元素偏移量offset系列

    1.1 offset概述 offset翻译过来,就是偏移量,我们使用offset系列相关属性,可以动态的得到该元素的位置(偏移).大小等. 获取元素距离带有定位父元素的位置. 获得元素自身的大小(宽度 ...

  7. sql语句内变量的使用

    0.原始表格如下: 1.定义变量,并在sql语句内查询: set @user_name = "成龙";SELECT * FROM `tb_user` where userName ...

  8. 【TouchGFX】使用CubeMX创建touchgfx项目 -- 初始篇

    1.系统构成,黑色块表示组件非必须 2.环境准备 CubeMX:6.0.1 touchgfx:4.15.0 rt-thread:2020-8-14 commit Keil:5.30 board:stm ...

  9. 百度网盘(百度云)SVIP超级会员共享账号每日更新(2024.01.23)

    一.百度网盘SVIP超级会员共享账号 可能很多人不懂这个共享账号是什么意思,小编在这里给大家做一下解答. 我们多知道百度网盘很大的用处就是类似U盘,不同的人把文件上传到百度网盘,别人可以直接下载,避免 ...

  10. [转帖]perf学习-linux自带性能分析工具

    目前在做性能分析的事情,之前没怎么接触perf,找了几篇文章梳理了一下,按照问题的形式记录在这里. 方便自己查看.   什么是perf? linux性能调优工具,32内核以上自带的工具,软件性能分析. ...