//这属于填坑系列文章,步骤仅凭记忆,仅为个人流水账不具有一般性,仅供参考
前(fei)言(hua)
在经历几次标签页开着开着系统动弹不得之后,终于受不了如此8GB内存限制,决定着手去解决这个问题。虽然内存条价格现在是低,但由于某种原因我只得另找法子来解决,在Linux里,有一个化硬盘空间为内存空间的方法,便是使用Swap文件或是Swap分区。(当然还有像Zram这样的办法,这里不做详细阐述
其实我之前初次装系统时就有分好Swap分区,还是整整8GB,但却是分在了机械硬盘里(后来发现这才是系统异常卡顿的真正元凶,天杀的某CSDN教程,Boot分区也不够了,清理之前的内核是一方面,但也需要扩容,建议根据实际或者不分区(9102年了还分区?(分区还是有用的,至少Boot分一下,救过此系统一命(槽 点 过 多
这次正好根目录也不够用了,就直接把机械硬盘里的Swap分区给合并了。
分区
分区工具的介绍这里就带过吧,网上一大把,我在这只想说点别的有用的东西。
记得分区类型是linux-swap就行了。
我是双系统,所以可以切换到Windows上用DiskGenius,但我没这么做,还是用U盘里Ubuntu Live的GParted在SSD上划走了属于Windows一块地,C盘也更紧张了。。
为什么不用分区文件?因为我想到了一个问题,我的C盘文件系统是NTFS,而Ubuntu读写NTFS都是靠着ntfs-3g那一套中间层,性能损失总有吧?但之后记不清在国外哪个帖子上看到的与文件系统无关,是直接操作的,那都是后话了,如果可以的话你可以去试试,内存文件更自由,Windows自己也是这么做的。
启用Swap分区
假定已经在SSD上分好了Swap分区
查找交换分区
在终端用sudo fdisk -l
查找类型名为Linux swap
的分区名,比如这里是/dev/sda7
设备 起点 末尾 扇区 大小 类型
/dev/sda1 2048 206847 204800 100M EFI 系统
/dev/sda2 206848 239615 32768 16M Microsoft 保留
/dev/sda3 239616 208754687 208515072 99.4G Microsoft 基本数据
/dev/sda4 225531904 226580479 1048576 512M Windows 恢复环境
/dev/sda5 226580480 247971839 21391360 10.2G Windows 恢复环境
/dev/sda6 247971840 250068991 2097152 1G Windows 恢复环境
/dev/sda7 208754688 225531903 16777216 8G Linux swap
分区格式化
sudo mkswap /dev/sda7
成功的话会返回分区的UUID,或者也可通过blkid /dev/sda7
查看,记住,有用
临时挂载
sudo swapon /dev/sda7
通过free -m
查看,若有swap则算成功了
永久挂载
往/etc/fstab
里追加一行
UUID=<刚刚获取的UUID,没有尖括号> none swap sw 0 0
启用ZSWAP
虽然这次将Swap分区迁移到SSD上面,但在发生Swap时,卡总是无法避免的,万恶之源都在于IO的瓶颈。如果减少IO交换的次数,那么情况会不会又有些好转呢?答案是肯定的。
从Linux 3.11内核开始,引入了ZSWAP,可以将需要换出(swap out)的页压缩存放在内存的压缩池里,这样在压缩池没有满的时候,根本不会有额外的IO;直到压缩池满了,则把最老的压缩页解压后写入swap设备。这样既减少了交换次数又在某种程度上扩大了Swap空间,一举两得。
接下来就来开启ZSWAP
- 通过运行以下命令来检查你的系统内核是否已经附带ZSWAP,如果返回
CONFIG_ZSWAP=y
,那么便可继续啦cat /boot/config-
uname -r| grep -i zswap
- root权限编辑grub
sudo gedit /etc/default/grub
- 更改
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash
这一行为GRUB_CMDLINE_LINUX_DEFAULT=“quiet splash zswap.enabled=1 zswap.compressor=lz4”
- 保存,并更新Grub
sudo update-grub
开启lz4压缩算法(相比原来的LZO算法虽然压缩比低些但有卓越的解压缩速率)
sudo su echo lz4 >> /etc/initramfs-tools/modules echo lz4_compress >> /etc/initramfs-tools/modules update-initramfs -u
- 重启电脑
- 检查ZSWAP是否开启
cat /sys/module/zswap/parameters/enabled
如果返回Y
则说明启动成功! - 检查LZ4压缩启动
dmesg | grep -i zswap
最后一行若是[ 0.715381] zswap: loaded using pool lz4/zbud
之类的则成功启动
至此,ZSWAP成功启动!继续愉快地玩耍吧!(还是一样卡(还是有些改善的,除非启动一堆内存大胃王,其他时候还是能感觉到卡顿是平滑的,swap在渐渐地增大
启用休眠
休眠(hibernate(suspend to disk))对于笔记本来说还是很必要的,将内存转存在硬盘上的交换分区便可完全断电后重启仍可以恢复工作。
休眠就一句命令,可以先在终端先测试一下
sudo systemctl hibernate
如果重启一遍不能恢复之前状态就考虑以下步骤(在这卡了一会儿,有必要提一下
- 还是需要上次找到的swap分区对应的UUID
- 用vim或你喜欢的其他编辑器编辑grub
sudo gedit /etc/default/grub
- 添上一行
GRUB_CMDLINE_LINUX="resume=UUID=<替换为swapUUID>"
- 更新grub
sudo update-grub
sudo systemctl hibernate
再试一遍,现在应该能很好工作了
另外可以在电源菜单上添加休眠按钮,自己可以再折腾下
http://ubuntuhandbook.org/index.php/2018/05/add-hibernate-option-ubuntu-18-04/
后(tu)记(cao)
终于到我最喜欢的环节了,写水文多半就是为了吐槽
折腾后正常的开发总算不会卡到窒息了,顺便也获得了休眠(Hibernate)的能力,也近似有了win10快速启动的能力(虽然还是不同(珍爱SSD,远离SWAP
折腾过后我一直都有个疑问,为什么隔壁Windows就是那么流畅?就算Windows是躺在SSD里的。。
后来才发现答案就在任务管理器里,页面文件,压缩算法什么的巨硬早就给你安排上了,C盘下还有8GB的pagefile.sys呢。。手动关闭后,win10也立马傻眼了,chrome运行到一半各种插件标签页崩溃,程序无法启动...
啊,内存条,快来吧。。。
扩展阅读/Reference/See also
- swap-control-gui
国人写的一款GUI界面的swap管理器?但没真正入手过。 - Enable ZSwap to increase performance
- zram vs zswap vs zcache终极指南:何时使用哪一个
- Zswap-ArchWiki
- 启用ZSWAP前后的性能比较
你好,请问fdisk -l显示中文结果是怎么搞的?
By 杀马特 at August 29th, 2020 at 04:59 pm.
@杀马特
并没有特意去汉化,我的个人系统默认语言就是中文,可以试着更改环境语言和安装语言包支持,参照这篇
By FSpark at August 29th, 2020 at 09:51 pm.
ZSWAP应该是牺牲CPU时间来换取IO和空间吧。我这里面临CPU散热问题,但是没有IO问题,好像就用不上。
16G内存必须是底线,不能缺斤短两,加内存必不可少。
By 石樱灯笼 at March 2nd, 2020 at 10:01 pm.
@石樱灯笼
是的,16G已经上了。今后一定要注意了,必须是底线。
By FSpark at March 2nd, 2020 at 10:38 pm.
cat "/boot/config-"$(uname -r) | grep -i zswap
|´・ω・)ノ
我还在内核选项加了 zswap.zpool=z3fold
加了 z3fold 模组
echo z3fold >> /etc/initramfs-tools/modules
得到了 zswap: loaded using pool lz4/z3fold
୧(๑•̀⌄•́๑)૭
我是逛用mpv看破站的文进来的,你这篇文章不错哈,让我知道了有ZSWAP
By 豆芽菜萌萌哒 at October 3rd, 2019 at 02:27 pm.
@豆芽菜萌萌哒
(☆ω☆)待会儿就添上z3fold,能帮助到他人真是太好了(虽然只是折腾流水),一下子就有了动力,这个国庆准备再填几个坑2333
By FSpark at October 3rd, 2019 at 03:09 pm.
看起来海星,先mark再说
By 猫箱内の巴托拉 at September 22nd, 2019 at 12:38 am.
非技术的路过。
By repostone at September 13th, 2019 at 05:14 pm.