惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

The Hacker News
The Hacker News
F
Full Disclosure
Cloudbric
Cloudbric
Blog — PlanetScale
Blog — PlanetScale
W
WeLiveSecurity
N
News and Events Feed by Topic
T
Troy Hunt's Blog
V2EX - 技术
V2EX - 技术
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
B
Blog
GbyAI
GbyAI
C
Check Point Blog
B
Blog RSS Feed
Application and Cybersecurity Blog
Application and Cybersecurity Blog
Recorded Future
Recorded Future
The Last Watchdog
The Last Watchdog
N
News and Events Feed by Topic
T
The Blog of Author Tim Ferriss
O
OpenAI News
V
V2EX
人人都是产品经理
人人都是产品经理
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
IT之家
IT之家
WordPress大学
WordPress大学
www.infosecurity-magazine.com
www.infosecurity-magazine.com
S
Security @ Cisco Blogs
C
Cisco Blogs
Security Latest
Security Latest
S
Security Affairs
V
Visual Studio Blog
C
Cybersecurity and Infrastructure Security Agency CISA
Hacker News - Newest:
Hacker News - Newest: "LLM"
博客园 - 司徒正美
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
Microsoft Azure Blog
Microsoft Azure Blog
Last Week in AI
Last Week in AI
AWS News Blog
AWS News Blog
雷峰网
雷峰网
Apple Machine Learning Research
Apple Machine Learning Research
PCI Perspectives
PCI Perspectives
博客园_首页
U
Unit 42
Google DeepMind News
Google DeepMind News
Hugging Face - Blog
Hugging Face - Blog
Project Zero
Project Zero
Cisco Talos Blog
Cisco Talos Blog
The Register - Security
The Register - Security
N
Netflix TechBlog - Medium
L
LINUX DO - 热门话题
H
Hacker News: Front Page

mephisto.cc

修复rime-ice无法弹出候选框的问题 开机滚动字体显示优化 个人网站安全防护 树莓派上部署Vaultwarden 使用goaccess实时分析Caddy日志 个人网站监控 Hugo全站AVIF记 Linux下尝试使用Godot开发小游戏 Arch linux dae 透明代理 Airflow接管galler-dl下载任务 如何使用gallery-dl批量下载图像 Arch核显下如何愉快玩Dota2和CS2 Arch/labwc 环境网络相关设置 Rime添加dota2词库 Arch 重装记录 Supertuxkart iOS版终于发布了 打造自己的流媒体音乐服务 剪切板管理工具clipcat推荐 MangoHud性能监控 微信小程序开发记 Rofi试用 解决Arch下VSCode无法输入中文的问题 独立窗口管理器下无法录屏问题处理 上海市二手房成交数据监控 OpenLDAP监控 Arch linux如何顺畅连接蓝牙设备 使用Git和Ansible管理配置文件 Arch Linux SSL VPN 客户端配置 简单获取celery任务实时结果 Arch linux下iNode客户端的安装和使用方法 券商费率调整记 迷你主机组装记 Labwc更换定制皮肤 树莓派跑分流代理 实用自动代理配置示例 九年老鼠标复活记 Openvpn示例 Mac下如何旋转webp图片 如何隐藏Vscode中Markdown PDF插件的头部内容 解决Linux下网络配置无法变更保存的问题 labwc环境启用wlogout Ubuntu下新官方微信尝鲜 简单检测用户是否开启广告屏蔽 Wine安装64位微信 Fish 和 Atuin使用记 Fastapi简单实现临时下载链接 Fastapi微信公众号开发简要 Hugo根据语种展示不同内容 如何修复Waybar微信图标错误 信封加密简要 Linux环境下维护公众号记录 快速隐藏和呼出终端 Wayland环境自动切换壁纸 SuperTuxKart 试玩 简单抓取雪球股票快讯 为什么你的kill命令不能列出信号表 Wine安装微信保姆教程 Hysteria科学上网简要 Ubuntu 23.10 钉钉无法启动解决方法 网站导航栏防止插入Adsense自动广告 Linux环境按键检测 Hugo文末添加最后修改时间 Wayland环境ksnip无法复制问题解决 我眼中的股票市场 Caddy简单图片防盗链 greetd和regreet使用教程 Wayland环境下截图加后期修改 Wayland 环境下gif录屏 Firefox的一些有趣功能 Ubuntu 切换系统语言 Firefox 标题栏高度调整 网站添加回到顶部功能 Hugo自定义字体 Labwc 便捷配置 Wofi使用教程 窗口管理器labwc使用记 文件共享软件Dufs推荐 Hugo静态站点接入Adsense广告 Fcitx5配置详解 Ubuntu安装chrome的方法总结 一种Xterm.js的全屏方案 Google网址收录api Python示例 手机听离线音乐 Snipe it资产导入 应用启动器yofi使用配置 Snipe it资产管理系统安装使用 Ubuntu开机启动加速 Vue3 vite TypeScript跨域等相关设置 Ubuntu手动升级Libreoffice Ubuntu设置alacritty为默认终端 简体文章批量转换为繁体 使用Inkscape调整svg图片大小 实用命令 使用mitmproxy给手机app抓包 Python中rstrip方法细解 Github同主机多仓库部署deploy key问题处理 Linux安装最新版本Python KeePassXC使用教程 Ubuntu 22.10连接蓝牙耳机报错br-connection-profile-unavailable解决方法 Caddy日志配置轮转和格式化
Atuin ZFS下卡顿问题解决
2024-02-27 · via mephisto.cc

最近一段时间在使用 fish + atuin 组合时,发现偶尔会出现卡顿,不是必现。表象就是当你输 ip ahtop 等低消耗命令时,系统感觉卡了几秒,这明显有问题。

作为一个 N 年的 Linux 用户,从来没有在终端里面被这么卡过,是可忍孰不可忍。一开始我以为是什么审计模块的锅,仔细查看进程,并没有发现异常。

电脑环境也没有做什么特别变化操作,几乎所有东西都是自己定制的,也不可能有问题,马上意识到可能是新使用 atuin 的问题,毕竟 fish 都出来好多年了,不至于卡成这个鬼样。

在 google 里面搜索 atuin lag,第一条记录即命中要害:https://github.com/atuinsh/atuin/issues/952

粗略读了一遍上面的 issues,问题出现在 atuin 离线模式使用 SQLite 存储 history 记录,SQLite 在 ZFS 中就存在这种问题。

踩雷的用户不多,首先你要用 ZFS,再次要用 atuin + SQLite

issues 里面的解决方式有几种,要么修改 atuin 的源码,要么等 ZFS 或者 SQLite 修复。

上述方式都不是很轻松,个人觉得点赞最多的这个解决方式最轻松(略有修改)。

1sudo zfs create -V 500MB rpool/atuin
2sudo zfs list -o name,encryption | grep atuin # ensure encryption for the zvol
3sudo mkfs.ext4 /dev/zvol/rpool/atuin
4mv ~/.local/share/atuin ~/.local/share/atuin-backup
5mkdir ~/.local/share/atuin
6sudo mount /dev/zvol/rpool/atuin ~/.local/share/atuin
7sudo chown -R ${USER}: ~/.local/share/atuin
8cp -rv ~/.local/share/atuin-backup/* ~/.local/share/atuin

唯一不好的地方这里的 mount 是临时的,重启后就丢失了,得把他写入/etc/fstab 开机自动加载。

操作过程解释记录如下:

1. 创建 Zvolumes datasets 等

1➜  ~ sudo zfs create -V 500MB rpool/atuin
2[sudo] password for mephisto:
3cannot create 'rpool/atuin': dataset already exists

因为我已经创建过了,所以会提示已存在,正常首次创建不会有问题的。

为了照顾不熟悉 ZFS 的读者必须上一张图

zfs overview

重点关注 zpool 这一层,ZFS 相比传统的文件系统,多了一层抽象,在软件行业,一般多一层抽象的,都感觉很厉害的样子,遇事不决加一层 😅

zpools 里面包含 各种类型的 dataset,Zvolumes datasets 便是其中的一种,它可以被格式化成 ext4,能分区,能挂载,就好像一个块设备一样,真的厉害。

格式化

1sudo mkfs.ext4 /dev/zvol/rpool/atuin

查看结果

 1➜  ~ ls -al /dev/zvol/rpool/atuin
 2lrwxrwxrwx 1 root root 9 Feb 26 18:42 /dev/zvol/rpool/atuin -> ../../zd0
 3➜  ~ sudo fdisk -l
 4[sudo] password for mephisto:
 5Disk /dev/sda: 476.94 GiB, 512110190592 bytes, 1000215216 sectors
 6Disk model: SanDisk SD8SN8U-
 7Units: sectors of 1 * 512 = 512 bytes
 8Sector size (logical/physical): 512 bytes / 4096 bytes
 9I/O size (minimum/optimal): 4096 bytes / 4096 bytes
10Disklabel type: gpt
11Disk identifier: 05A996E7-F044-4E59-9DED-F0C891E163CE
12
13Device       Start        End   Sectors   Size Type
14/dev/sda1     2048    1050623   1048576   512M EFI System
15/dev/sda2  1050624    5244927   4194304     2G Linux swap
16/dev/sda3  5244928    9439231   4194304     2G Solaris boot
17/dev/sda4  9439232 1000215182 990775951 472.4G Solaris root
18
19
20Disk /dev/zd0: 500 MiB, 524288000 bytes, 1024000 sectors
21Units: sectors of 1 * 512 = 512 bytes
22Sector size (logical/physical): 512 bytes / 16384 bytes
23I/O size (minimum/optimal): 16384 bytes / 16384 bytes

后续的步骤都很简单,不再一一演示。

 1➜  ~ mount -v |grep atuin
 2/dev/zd0 on /home/mephisto/.local/share/atuin type ext4 (rw,relatime,stripe=4)
 3➜  ~ df -h ~/.local/share/atuin
 4Filesystem      Size  Used Avail Use% Mounted on
 5/dev/zd0        452M  5.8M  412M   2% /home/mephisto/.local/share/atuin
 6➜  ~ ls -al ~/.local/share/atuin
 7total 5865
 8drwxr-xr-x  4 mephisto mephisto    4096 Feb 27 15:42 ./
 9drwx------ 83 mephisto mephisto      93 Feb 27 16:53 ../
10drwxrwxr-x  2 mephisto mephisto    4096 Feb 26 16:43 atuin/
11-rw-r--r--  1 mephisto mephisto 4550656 Feb 27 17:12 history.db
12-rw-r--r--  1 mephisto mephisto   32768 Feb 27 17:12 history.db-shm
13-rw-r--r--  1 mephisto mephisto 1384352 Feb 27 17:12 history.db-wal
14-rw-rw-r--  1 mephisto mephisto      48 Feb 26 16:43 key
15drwx------  2 mephisto mephisto   16384 Feb 26 16:41 lost+found/

换成 ext4 后,真的很丝滑,再也没卡过。

2. 开机自动挂载

查询 uuid

1➜  ~ sudo blkid /dev/zd0
2/dev/zd0: UUID="6a16a600-bd7c-4b6f-b371-d0fb2306263a" BLOCK_SIZE="4096" TYPE="ext4"

备份/etc/fstab,不备份万一搞坏了,文件系统都加载不了,处理起来有点麻烦的。

1sudo cp /etc/fstab /etc/fstab_bak

最后一行是添加的的,其它地方不要动,除非你知道它们是干什么用的,每个人的系统环境不一样。uuid 填上面查询的,tab 分隔。

1➜  ~ cat /etc/fstab | egrep -v '^#'
2UUID=742C-0CA0  /boot/efi       vfat    umask=0022,fmask=0022,dmask=0022      0       1
3/boot/efi/grub  /boot/grub      none    defaults,bind   0       0
4UUID=fd8b7e16-9901-48c0-b8dc-ab7da1459126       none    swap    sw      0       0
5UUID=6a16a600-bd7c-4b6f-b371-d0fb2306263a       /home/mephisto/.local/share/atuin       ext4    defaults        0       0

这样开机启动就设置好了,重启后自动挂载正常。

想进一步了解 ZFS 文件系统的可查看 Gentoo 的 zfs 文档

或者查看帮助文档

最后友情提示,zfs 操作的是 datasets,zpool 操作的 zpolls(ZFS storage pools),不要搞混了敲错命令。