如果你使用浏览器比较频繁,那么你的浏览器缓存会造成大量的磁盘 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 启动顺序