<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>Tomyail 的记忆现场</title><description>一个程序员的自娱自乐</description><link>https://blog.tomyail.com/</link><item><title>NAS 风扇狂转，查出 Thanos Compactor 把 bucket 撑到了 241G</title><link>https://blog.tomyail.com/nas-fan-thanos-compactor-halted/</link><guid isPermaLink="true">https://blog.tomyail.com/nas-fan-thanos-compactor-halted/</guid><description>一次从 NAS 风扇狂转开始的排障：顺着磁盘 I/O 追到 Thanos Compactor，发现它静默停摆已久、bucket 膨胀到 241G。定位积压、扩容 PVC、用 thanos tools bucket retention 把过期数据一刀清到 18G。根因是 PVC 太小、halt 后不会自动重试，导致 retention 从上线起就没跑完过。最后补上告警，防止 compactor 再次静默失败。</description><pubDate>Mon, 03 Aug 2026 17:35:07 GMT</pubDate><category>kubernetes</category><category>thanos</category><category>prometheus</category><category>排障</category><category>homelab</category></item><item><title>我把积灰的 MacBook Pro 2019 改成了无限额度 Xcode CI Runner</title><link>https://blog.tomyail.com/macbook-pro-2019-unlimited-xcode-ci-runner/</link><guid isPermaLink="true">https://blog.tomyail.com/macbook-pro-2019-unlimited-xcode-ci-runner/</guid><description>把闲置的 2019 Intel MacBook Pro 改成合盖常驻的 Gitea Actions / Xcode CI Runner：防睡眠、本地网络权限、Universal Xcode、Fastlane 上传 TestFlight，以及单机 Runner 的真实代价。</description><pubDate>Thu, 30 Jul 2026 10:00:00 GMT</pubDate><category>iOS</category><category>CI</category><category>Gitea</category><category>Xcode</category><category>macOS</category><category>homelab</category></item><item><title>NAS数据双保险：从教训到实践的数据保护方案</title><link>https://blog.tomyail.com/nas-data-double-backup-practice/</link><guid isPermaLink="true">https://blog.tomyail.com/nas-data-double-backup-practice/</guid><description>从绿联 NAS 故障教训出发，记录我如何利用 Borgmatic、rsync 和 IaC 理念，建立真正可靠的 NAS 数据双保险方案。</description><pubDate>Thu, 05 Mar 2026 10:58:00 GMT</pubDate><category>nas</category><category>备份</category><category>borgmatic</category></item><item><title>绿联NAS突发故障：从硬盘集体损毁到SATA控制器排查</title><link>https://blog.tomyail.com/ugreen-nas-sudden-failure-sata-controller-diagnosis/</link><guid isPermaLink="true">https://blog.tomyail.com/ugreen-nas-sudden-failure-sata-controller-diagnosis/</guid><description>记录一次真实的绿联 NAS 硬件故障排查历程。从所有硬盘集体“损毁”的惊吓，到通过 Claude Code 分析日志定位 SATA 控制器损坏。本文完整分享了从排障、售后换新到数据无损迁移的经验，以及为何单纯的 NAS 本地备份并不靠谱。</description><pubDate>Fri, 06 Feb 2026 10:43:22 GMT</pubDate><category>homelab</category><category>故障排查</category><category>nas</category></item><item><title>NAS 数据备份：Borgmatic 与 Docker 的部署实践</title><link>https://blog.tomyail.com/ugreen-nas-backup-with-borgmatic-and-docker/</link><guid isPermaLink="true">https://blog.tomyail.com/ugreen-nas-backup-with-borgmatic-and-docker/</guid><description>本文记录了在绿联 NAS 上部署 Borgmatic 的实践过程。由于自带备份功能有限，作者选择使用 Docker 部署 Borgmatic 来实现更可靠的多版本增量备份，以避免数据丢失。文中包含详细的配置步骤和相关问题记录，适合希望增强 NAS 数据安全的用户参考。</description><pubDate>Thu, 24 Jul 2025 10:38:52 GMT</pubDate><category>nas</category><category>备份</category><category>borgmatic</category></item><item><title>从 Cloudflare Tunnel 到 Tailscale：为家庭实验室增加网络后备方案</title><link>https://blog.tomyail.com/cloudflare-tunnel-to-tailscale-backup-solution/</link><guid isPermaLink="true">https://blog.tomyail.com/cloudflare-tunnel-to-tailscale-backup-solution/</guid><description>记录如何为家庭实验室搭建 Tailscale + VPS 网络后备方案的完整过程。当 Cloudflare Tunnel 在国内连通性不稳定时，通过 Tailscale Kubernetes Operator 和美国 VPS 集群实现流量转发，配合 External-DNS 自动管理域名解析。包含详细的部署步骤、问题排查和两种方案的性能对比分析。</description><pubDate>Fri, 11 Jul 2025 17:35:18 GMT</pubDate><category>k8s</category><category>cloudflare</category><category>homelab</category></item><item><title>使用 qbt_migrate 批量修改 qbitorrent 保存路径</title><link>https://blog.tomyail.com/how-to-batch-modify-qbittorrent-save-path-with-qbt-migrate/</link><guid isPermaLink="true">https://blog.tomyail.com/how-to-batch-modify-qbittorrent-save-path-with-qbt-migrate/</guid><description>为实现arr自动化媒体管理，本文介绍了如何重新规划NFS目录，使用qbt_migrate批量修改qBittorrent路径，并调整NFS用户映射（如all_squash）以解决硬链接权限，确保系统流畅运行</description><pubDate>Thu, 05 Jun 2025 17:17:53 GMT</pubDate><category>homelab</category><category>nas</category></item><item><title>在 PVE 中配置基于 Docker 的 GitLab Runner</title><link>https://blog.tomyail.com/configure-docker-based-gitlab-runner-in-pve/</link><guid isPermaLink="true">https://blog.tomyail.com/configure-docker-based-gitlab-runner-in-pve/</guid><description>介绍如何在 Proxmox VE 的 LXC 容器中配置 GitLab Runner，使用 Docker executor 来实现 CI/CD 环境的隔离和高效构建。</description><pubDate>Tue, 26 Nov 2024 21:36:00 GMT</pubDate><category>gitlab</category><category>homelab</category></item><item><title>使用 restic 备份 vaultwarden 数据</title><link>https://blog.tomyail.com/backup-vaultwarden-data-using-restic/</link><guid isPermaLink="true">https://blog.tomyail.com/backup-vaultwarden-data-using-restic/</guid><description>本文介绍如何使用 restic 工具备份 vaultwarden 数据，包括安装、初始化、创建备份脚本和定期执行备份任务的详细步骤。</description><pubDate>Sun, 01 Sep 2024 20:06:00 GMT</pubDate><category>homelab</category></item><item><title>如何在网络出问题时自动重启 OpenClash</title><link>https://blog.tomyail.com/auto-restart-openclash-on-network-failure/</link><guid isPermaLink="true">https://blog.tomyail.com/auto-restart-openclash-on-network-failure/</guid><description>本文介绍了一个自动检测网络并在必要时重启 OpenClash 的脚本，帮助维持稳定的网络连接，特别是在家庭网络环境中。</description><pubDate>Wed, 28 Aug 2024 17:17:00 GMT</pubDate><category>homelab</category><category>linux</category></item><item><title>使用 grafana-alloy 监控盒子数据</title><link>https://blog.tomyail.com/using-grafana-alloy-to-monitor-seedingbox/</link><guid isPermaLink="true">https://blog.tomyail.com/using-grafana-alloy-to-monitor-seedingbox/</guid><description>本文详细介绍了如何使用 grafana-alloy 监测盒子数据，使你能看到盒子的上传下载速度等相关</description><pubDate>Fri, 19 Jul 2024 12:28:00 GMT</pubDate><category>homelab</category></item><item><title>存储升级记录</title><link>https://blog.tomyail.com/storage-upgrade-log/</link><guid isPermaLink="true">https://blog.tomyail.com/storage-upgrade-log/</guid><description>这是一篇关于存储升级的记录。作者详细描述了硬盘的选择、转接卡带宽问题、供电问题、硬盘的具体情况以及文件系统的选择。作者最终选择了LVM管理硬盘，并对硬盘进行了详细的规划和分配。</description><pubDate>Wed, 17 Jul 2024 02:28:00 GMT</pubDate><category>homelab</category></item><item><title>使用 Cloudflare Tunnel 访问 K3S 集群服务</title><link>https://blog.tomyail.com/using-cloudflare-tunnel-for-accessing-intranet-services-in-k3s-cluster/</link><guid isPermaLink="true">https://blog.tomyail.com/using-cloudflare-tunnel-for-accessing-intranet-services-in-k3s-cluster/</guid><description>本文详细介绍了如何使用 Cloudflare Tunnel 访问 K3S 集群服务。作者分享了 Cloudflare Tunnel 的工作原理、注册流程、在 K3S 集群中的配置方法，以及如何更新和管理 ingress 规则。文章还讨论了这种方法相比传统内网穿透工具的优势，包括免费、简单配置、高带宽和灵活性。对于希望从互联网安全访问家庭实验室或内网服务的用户来说，这是一个实用的解决方案。</description><pubDate>Tue, 07 Nov 2023 17:05:00 GMT</pubDate><category>k8s</category><category>cloudflare</category><category>cloudflare-tunnel</category></item><item><title>使用 k3s 和 tailscale 在甲骨文云和家之间搭建 kubernetes 集群</title><link>https://blog.tomyail.com/using-k3s-and-tailscale-to-build-kubernets-cluster-between-oraclecloud-and-home/</link><guid isPermaLink="true">https://blog.tomyail.com/using-k3s-and-tailscale-to-build-kubernets-cluster-between-oraclecloud-and-home/</guid><description>本文详细介绍了如何使用 k3s 和 tailscale 在甲骨文云和家庭网络之间搭建 Kubernetes 集群。作者分享了在甲骨文云上部署 k3s 的挑战,以及如何通过在家里的 PVE 上搭建 k3s server 并使用 tailscale 连接所有节点来解决这些问题。文章还包括了配置步骤、验证方法、部署测试应用以及性能测试结果,为读者提供了一个完整的实践指南。</description><pubDate>Sat, 23 Sep 2023 13:24:00 GMT</pubDate><category>k8s</category><category>linux</category></item><item><title>如何为 pve 系统新增用户</title><link>https://blog.tomyail.com/how-to-add-user-for-pve/</link><guid isPermaLink="true">https://blog.tomyail.com/how-to-add-user-for-pve/</guid><description>本文介绍了如何在 Proxmox VE (PVE) 中添加 PVE 用户和 PAM 用户以及如何分配权限。根据需要选择不同类型的用户，PAM 用户适用于需要 SSH 登陆的场景，而 PVE 用户仅适用于在 Web 上操作的场景。按照本文的步骤，你可以轻松地在 PVE 中管理用户及其权限。</description><pubDate>Wed, 03 May 2023 18:03:00 GMT</pubDate><category>pve</category></item><item><title>2022 个人总结</title><link>https://blog.tomyail.com/2022-summary/</link><guid isPermaLink="true">https://blog.tomyail.com/2022-summary/</guid><description>这篇文章是作者对自己在 2022 年所读过的书、看过的电影、玩过的游戏以及使用的数码设备的总结。作者列出了自己读过的书和看过的电影，并对其中的一些作品进行了简短的评价。作者还提到了自己在阅读过程中遇到的一些问题，以及如何克服这些问题。此外，作者还分享了自己玩过的游戏和使用的数码设备，并对其中一些设备进行了评价。在技术方面，作者分享了自己在 GitHub 上的提交情况以及学习 DevOps 相关概念的经历。作者还介绍了自己搭建 homelab 的过程，并分享了一些自己觉得比较好用的服务。总体来说，这篇文章是作者对自己在 2022 年的生活和技术方面的总结</description><pubDate>Wed, 08 Feb 2023 16:39:00 GMT</pubDate><category>总结</category></item><item><title>Logseq 同步方案设计</title><link>https://blog.tomyail.com/how-to-sync-logseq-notes-between-icloud-and-github/</link><guid isPermaLink="true">https://blog.tomyail.com/how-to-sync-logseq-notes-between-icloud-and-github/</guid><description>这篇文章是作者分享了自己如何在 Logseq 笔记应用中使用 iCloud 和 GitHub 进行同步的方案。作者首先介绍了自己在使用 Logseq 时遇到的问题，即无法在公司的开发机上使用 iCloud 进行同步。为了解决这个问题，作者使用了 GitHub 进行同步，但是发现这个方案会导致 git 记录冲突。作者介绍了自己如何使用 unison 工具进行双向同步，以及如何使用 cloud-ignore-files 仓库来忽略同步时的冲突。作者还分享了自己如何在 Mac mini 上设置定时任务来自动同步数据，并提供了详细的设置步骤。总体来说，这篇文章是一篇技术性的文章，适合对 Logseq 和同步方案感兴趣的读者阅读。</description><pubDate>Sun, 17 Jul 2022 14:43:00 GMT</pubDate><category>logseq</category></item><item><title>记一次树莓派磁盘占满的排查流程</title><link>https://blog.tomyail.com/troubleshooting-for-raspberry-pi&apos;s-out-of-disk-space/</link><guid isPermaLink="true">https://blog.tomyail.com/troubleshooting-for-raspberry-pi&apos;s-out-of-disk-space/</guid><description>这篇文章是作者分享了自己在使用树莓派时遇到的磁盘空间满的问题以及解决方案。作者介绍了自己如何使用 df 命令查看磁盘的基本占用情况，以及如何使用 ncdu 命令查看具体每个文件占用率。作者还分享了自己如何使用 tail -n 命令查看指定文件的最后几行的内容，以及如何使用 journalctl 命令方便地管理 systemd 产生的日志。最后，作者总结了自己从这次问题中学到的几个 Linux 技能，并提醒自己在编写代码时要严谨对待日志，确保日志不会疯狂输出导致占满用户的磁盘空间。总体来说，这篇文章是一篇技术性的文章，适合对树莓派和 Linux 系统感兴趣的读者阅读。</description><pubDate>Tue, 11 Aug 2020 17:34:00 GMT</pubDate><category>linux</category></item><item><title>RxJS 和响应式编程简介</title><link>https://blog.tomyail.com/introducing-reactive-programming-with-rxjs/</link><guid isPermaLink="true">https://blog.tomyail.com/introducing-reactive-programming-with-rxjs/</guid><description>这篇博客介绍了 RxJS 库的基本概念和应用。作者首先介绍了 RxJS 的官方介绍，包括利用 observable 流为异步编程设计的一套 API，以及利用 Observables 模式方便我们编写基于异步组合或者回调的代码等。接着，作者介绍了 RxJS 的思想和响应式编程的思想，并指出掌握了 RxJS 的思想，就是掌握了响应式编程的思想。作者还介绍了 RxJS 中的流的概念，以及流的特点。最后，作者提到了 RxJS 中的一些常用操作符，如 map、filter、reduce 等，并给出了具体的使用示例。</description><pubDate>Thu, 28 May 2020 22:10:00 GMT</pubDate><category>RxJS</category></item><item><title>electron 集成 addon 方案简介</title><link>https://blog.tomyail.com/introducing-node-addon-development-with-electron/</link><guid isPermaLink="true">https://blog.tomyail.com/introducing-node-addon-development-with-electron/</guid><description>本文介绍了作者在开发 electron 项目时，如何集成 addon 的方案。作者首先介绍了 addon 的基本概念，然后介绍了编译 addon 的两种方式：预编译和源码编译。作者还介绍了如何使用 electron-rebuild 来编译 addon，以及如何在持续集成中使用真实的 mac 或者 window 操作系统 + shell 来编译 addon。</description><pubDate>Sat, 18 Apr 2020 21:10:00 GMT</pubDate><category>electron</category></item><item><title>如何花30分钟解决 eslint 产生的各种错误</title><link>https://blog.tomyail.com/how-to-lint-legacy-jscode-in-30min/</link><guid isPermaLink="true">https://blog.tomyail.com/how-to-lint-legacy-jscode-in-30min/</guid><description>本文主要总结如何使用 eslint , prettier, 以及 jscodeshift 快速统一一个大型的 js 项目的代码风格,并结合 lint-staged 和 husky 自动检查并且格式化未来新提交的新代码.</description><pubDate>Fri, 23 Jun 2017 08:09:00 GMT</pubDate><category>JavaScript</category></item><item><title>使用 git submodule 同步主从项目的依赖关系</title><link>https://blog.tomyail.com/using-git-submodule-lock-project/</link><guid isPermaLink="true">https://blog.tomyail.com/using-git-submodule-lock-project/</guid><description>本文主要介绍了如何使用 git submodule 同步主从项目的依赖关系.</description><pubDate>Wed, 14 Jun 2017 06:48:00 GMT</pubDate><category>git</category></item><item><title>eslint的正确使用方式</title><link>https://blog.tomyail.com/eslint-with-prettier/</link><guid isPermaLink="true">https://blog.tomyail.com/eslint-with-prettier/</guid><description>这篇博客介绍了如何使用 eslint 和 prettier 来保证 JavaScript 项目的代码质量和风格统一。作者提到了之前项目中没有推广 eslint 的原因是缺乏合适的工作流程，但是现在可以结合 git 钩子在提交代码时直接进行代码检查和格式化。作者给出了具体的使用步骤，包括安装依赖库、更新 package.json 文件等。最终的效果是在每次提交代码之前，都会进行代码格式化和 eslint 检查，从而保证代码风格的统一。</description><pubDate>Wed, 10 May 2017 07:24:00 GMT</pubDate><category>JavaScript</category></item><item><title>加速electron在国内的下载速度</title><link>https://blog.tomyail.com/install-electron-slow-in-china/</link><guid isPermaLink="true">https://blog.tomyail.com/install-electron-slow-in-china/</guid><description>这篇博客介绍了如何加速在中国下载 Electron 的过程。作者指出，在安装 Electron 时，会下载 electron-prebuilt 这个 zip 包，而该包默认被托管在 GitHub 上，因此在某些网络下下载会非常慢。为了解决这个问题，作者介绍了通过修改下载地址来加速下载的方法。作者提供了两种方式，一种是临时方式，通过在 npm install 命令前加入 ELECTRON_MIRROR 环境变量来指定下载地址；另一种是永久方式，通过修改环境变量文件来设置 ELECTRON_MIRROR 环境变量。最终，作者提醒读者在设置下载地址时，需要注意调试信息，以确认下载源是否替换成功。</description><pubDate>Thu, 24 Mar 2016 03:02:00 GMT</pubDate><category>electron</category></item><item><title>从Wordpress迁移到Hexo</title><link>https://blog.tomyail.com/hexo-migrate/</link><guid isPermaLink="true">https://blog.tomyail.com/hexo-migrate/</guid><description>这篇文章介绍了作者从 Wordpress 迁移到 Hexo 的经历。作者分享了自己之前使用的博客发布流程的不便之处，以及为什么决定迁移到静态博客系统。作者介绍了自己之前尝试使用基于 Ruby 的 Octopress，但由于不熟悉 Ruby 的依赖系统而无法适应。最终，作者选择了基于 Node.js 的 Hexo，并分享了迁移过程中的一些经验和技巧。</description><pubDate>Wed, 04 Nov 2015 22:20:00 GMT</pubDate><category>hexo</category></item><item><title>Flash文本输入在移动设备上的差异</title><link>https://blog.tomyail.com/flash-text-mobile-difference/</link><guid isPermaLink="true">https://blog.tomyail.com/flash-text-mobile-difference/</guid><description>该文章主要介绍了在使用 Flash 做文本编辑器时，在移动设备上遇到的一些问题和解决方法。作者首先介绍了 Flash 中使用 TextField 的方法，并指出在 PC 上可以正常工作，但在移动设备上会出现各种问题。接着，作者列举了一些在移动设备上出现的问题，如链接事件响应问题和键盘行为差异等，并提供了一些解决方法。最后，作者总结了自己的经验，并提醒读者在使用 Flash 开发移动设备应用时需要注意的问题。</description><pubDate>Sat, 14 Jun 2014 00:46:00 GMT</pubDate><category>Flash</category></item><item><title>Nape的几何相关笔记(GeomPoly)</title><link>https://blog.tomyail.com/nape-geompoly/</link><guid isPermaLink="true">https://blog.tomyail.com/nape-geompoly/</guid><description>这篇文章主要介绍了 Nape 引擎中的 GeomPoly 类和 Polygon 类的关系。作者首先介绍了 GeomPoly 类的基本概念和用法，以及如何将其转换为 Polygon 类。接着，作者详细讲解了 Polygon 类中的 regular 算法，该算法可以用来创建一个规则的多边形。作者提供了一些示例代码来帮助读者更好地理解 Polygon 类的使用方法。最后，作者总结了自己的经验，并提醒读者在使用 Nape 引擎时需要注意的问题。</description><pubDate>Fri, 10 May 2013 07:15:00 GMT</pubDate><category>Flash</category></item><item><title>Nape的回调系统</title><link>https://blog.tomyail.com/nape-callback/</link><guid isPermaLink="true">https://blog.tomyail.com/nape-callback/</guid><description>这篇文章主要介绍了 Nape 引擎中的回调系统和 Flash 原生的事件系统之间的区别。作者指出，虽然它们的底层可能都是通过观察者模式来实现的，但是它们暴露给外部的 API 是不一样的。在 Nape 中，监听对象只有 space，它通过匹配特定的模式来触发回调。作者提供了一些伪代码来帮助读者更好地理解 Nape 中的回调系统。最后，作者详细讲解了在 Nape 中增加一个回调的三个步骤，并提供了一些示例代码来帮助读者更好地理解。</description><pubDate>Sat, 06 Apr 2013 02:54:00 GMT</pubDate><category>Flash</category></item><item><title>Stage3D的一些基本概念</title><link>https://blog.tomyail.com/stage3d-basic-concept/</link><guid isPermaLink="true">https://blog.tomyail.com/stage3d-basic-concept/</guid><description>这篇文章主要介绍了 Stage3D 的一些基本概念。作者首先介绍了 Stage3D 层的概念和层级关系，并提供了示意图来帮助读者更好地理解。接着，作者详细讲解了 Stage3D 的坐标系统，包括右手坐标系、坐标原点和齐次裁剪空间等概念。作者还介绍了如何将 Stage3D 的坐标系统转换成 Flash 默认的坐标系。</description><pubDate>Sat, 25 Feb 2012 09:14:00 GMT</pubDate><category>Flash</category></item></channel></rss>