如果你使用浏览器比较频繁,那么你的浏览器缓存会造成大量的磁盘 IO。想要减少磁盘 IO,保护磁盘的同时加快浏览器速度,可设置缓存使用内存。但是单纯使用内存放置浏览器缓存,会在重启后丢失缓存。所以本文使用脚本在登录登出时将缓存从内存同步回磁盘。

linux 下不同浏览器缓存位置不同:

  • 默认 Microsoft Edge 缓存位置在 ~/.cache/microsoft-edge
  • 默认 Google Chrome 缓存位置在 ~/.cache/google-chrome
  • 默认 Mozilla Firefox 缓存位置在 ~/.cache/mozilla/firefox/XXXXXXXX.default-release/cache2

本文以 Microsoft Edge 浏览器为例。

Firefox 浏览器缓存位置中 XXXXXXXX 为八位因人而异的随机代码,请自行查找你缓存文件的位置。

1. 缓存同步(打包解包)脚本

首先需要安装 tar 的 lzop,根据你的发行版自行安装。

然后在你喜欢的位置建立核心脚本并添加可执行权限:

建议将脚本建立在你的用户主目录下的某个位置,因为本文使用普通用户权限的 systemd 引用脚本。本文其他脚本同样如此。

内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#!/usr/bin/sh

# 在登录后登出前执行此脚本
# 确保你的系统已经安装 tar 和 lzop

case "$1" in
import)
cd /dev/shm
tar --lzop -pxf /home/你的用户名/.cache/edgecache-backup.tar.lzop
;;
dump)
cd /dev/shm
# 删除大于 5MB 的缓存文件
find ./microsoft-edge/ -size +5M -exec rm {} \;
tar --lzop -pcf /home/你的用户名/.cache/edgecache-backup.tar.lzop microsoft-edge/
;;
*)
echo -e "Usage: $(cd `dirname $0`; pwd)/edgecache {import|dump}"
exit 1
;;
esac

exit 0

2. 登录导入脚本

然后在你喜欢的位置建立登录导入脚本,登录时设置缓存路径,及从压缩包导入缓存

内容如下:

1
2
3
4
5
6
7
8
9
10
11
#!/bin/sh

# 将 microsoft edge 缓存路径到内存
/bin/rm ~/.cache/microsoft-edge -R
/bin/mkdir -p /dev/shm/microsoft-edge
/bin/ln -sf /dev/shm/microsoft-edge ~/.cache/microsoft-edge

# 将浏览器缓存同步到内存
echo [`date +"%Y-%m-%d %H:%M"`] On login - Importing caches to ram >> /home/你的用户名/edgecache_sync.log
/你/核心脚本/的位置 import >> /home/你的用户名/edgecache_sync.log
echo [`date +"%Y-%m-%d %H:%M"`] On login - Caches imported to ram >> /home/你的用户名/edgecache_sync.log

3. 登出前导出缓存到硬盘

然后在你喜欢的位置建立登出导出脚本,登出时将缓存同步到磁盘。

内容如下:

1
2
3
4
5
6
7
8
9
#!/bin/sh

# 将浏览器缓存同步到磁盘
echo [`date +"%Y-%m-%d %H:%M"`] On logout - Dumping caches to disk >> /home/你的用户名/edgecache_sync.log
/你/核心脚本/的位置 dump >> /home/你的用户名/edgecache_sync.log
echo [`date +"%Y-%m-%d %H:%M"`] On logout - Caches dumped to disk >> /home/你的用户名/edgecache_sync.log

# 等待 4 秒
ping -c 4 127.1 > /dev/null

4. 让 systemd 在登录和登出时自动执行上述脚本

在 ~/.config/systemd/user/ 目录下创建文件 edgecache.service:

内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[Unit]
Description=Synchronize edge caches to disk
PartOf=graphical-session.target
DefaultDependencies=no
Before=umount.target shutdown.target reboot.target halt.target

[Service]
Type=simple
RemainAfterExit=true
ExecStart=/你/登录导入脚本/的位置
ExecStop=/你/登出导出脚本/的位置

[Install]
WantedBy=graphical-session.target

5. 启用 systemd

1
2
systemctl --user daemon-reload
systemctl --user enable edgecache.service

重启生效。

6. 参考资料

Linux 设置 chrome 缓存至内存,及开关机同步

Arch linux tmpfs

Arch linux Chromium 小贴士

内存盘和硬盘同步

用 systemd 关机前执行指令

使用 systemd 管理普通用户的服务

删除大于固定大小的文件

将 chrome 浏览器缓存放到内存

systemd 启动顺序