[{"content":"我的 nixos 用的是 nixpkgs-unstable channel, 虽然包比 stable 的更新快一点，但是确实如同它的名字，非常不稳定，基本上我每半个月就遇到一次更新故障，其中 qemu + ceph 更是挂了两次。 下面是我从网上抄来的一些可能有用的修复方法。\nGithub PR 讲道理因为 nixos 的可复现性，出问题的时候肯定不止你自己的环境有问题，首先肯定是先去 GitHub 看看是不是别人已经提了 issue, 作为一个伸手党，说不定还可以直接找到修复方法。 有时候已经有 PR 修这个问题了，但是还没合并你要的 branch, 可以从下面的链接里看 pr 的状态：\n查看一个 pr 是否被 merge pr-tracker Override 如果是因为包的可选依赖故障，可以通过 override 直接干掉，这有一个 例子。\n通过 override 修改包的依赖，从而避免使用 nixpkgs-unstable 时更新不了。\n// In your /etc/nixos/configuration.nix environment.systemPackages = with pkgs; [ # ... other packages you have ... # qemu_full // REMOVE OR COMMENT OUT THIS LINE # And add this instead: (pkgs.qemu_full.override { enableDocs = false; cephSupport = false; }) # ... other packages ... ]; Patching nix 也提供了 patch 的方法，但很遗憾因为我起手抄的配置应用这个比较麻烦，而且我遇到的是依赖问题，我还是用了 Override 的方法。\n不过这里有两篇文章可以参考一下：\nhttps://wiki.nixos.org/wiki/Nixpkgs/Patching_Nixpkgs\nhttps://ertt.ca/nix/patch-nixpkgs/\nBranch 然后是一个比较粗糙但简单的方案，直接 fork nixpkgs, 然后自己建一个 branch 修或者 apply 没被 merge 的补丁，然后在自己的 nix 配置里指向这个源。\n虽然看起来比较粗暴，但是确实简单有效，就是后面关注的 PR 被修复了以后得记得再换回去。\n","permalink":"https://blog.lichliu.org/posts/nixpkgs-unstable-channel-update-failure-tips/","summary":"\u003cp\u003e我的 \u003ccode\u003enixos\u003c/code\u003e 用的是 \u003ccode\u003enixpkgs-unstable\u003c/code\u003e channel, 虽然包比 stable 的更新快一点，但是确实如同它的名字，非常不稳定，基本上我每半个月就遇到一次更新故障，其中 \u003ccode\u003eqemu\u003c/code\u003e + \u003ccode\u003eceph\u003c/code\u003e 更是挂了两次。\n下面是我从网上抄来的一些可能有用的修复方法。\u003c/p\u003e\n\u003ch2 id=\"github-pr\"\u003eGithub PR\u003c/h2\u003e\n\u003cp\u003e讲道理因为 \u003ccode\u003enixos\u003c/code\u003e 的可复现性，出问题的时候肯定不止你自己的环境有问题，首先肯定是先去 \u003ca href=\"https://github.com/NixOS/nixpkgs/issues\"\u003eGitHub\u003c/a\u003e 看看是不是别人已经提了 issue, 作为一个伸手党，说不定还可以直接找到修复方法。\n有时候已经有 PR 修这个问题了，但是还没合并你要的 branch, 可以从下面的链接里看 pr 的状态：\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e查看一个 pr 是否被 merge  \u003ca href=\"https://nixpk.gs/pr-tracker.html?pr=\"\u003epr-tracker\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"override\"\u003eOverride\u003c/h2\u003e\n\u003cp\u003e如果是因为包的可选依赖故障，可以通过 override 直接干掉，这有一个 \u003ca href=\"https://discourse.nixos.org/t/error-after-update-flake-about-python3-11-tkinter/69328/3\"\u003e例子\u003c/a\u003e。\u003c/p\u003e\n\u003cp\u003e通过 override 修改包的依赖，从而避免使用 nixpkgs-unstable 时更新不了。\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-nix\" data-lang=\"nix\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"o\"\u003e//\u003c/span\u003e \u003cspan class=\"n\"\u003eIn\u003c/span\u003e \u003cspan class=\"n\"\u003eyour\u003c/span\u003e \u003cspan class=\"sr\"\u003e/etc/nixos/configuration.nix\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"n\"\u003eenvironment\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003esystemPackages\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"k\"\u003ewith\u003c/span\u003e \u003cspan class=\"n\"\u003epkgs\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e \u003cspan class=\"p\"\u003e[\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"c1\"\u003e# ... other packages you have ...\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"c1\"\u003e# qemu_full  // REMOVE OR COMMENT OUT THIS LINE\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"c1\"\u003e# And add this instead:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003epkgs\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eqemu_full\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eoverride\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003eenableDocs\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"no\"\u003efalse\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003ecephSupport\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"no\"\u003efalse\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"p\"\u003e})\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"c1\"\u003e# ... other packages ...\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e];\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003ch2 id=\"patching\"\u003ePatching\u003c/h2\u003e\n\u003cp\u003enix 也提供了 patch 的方法，但很遗憾因为我起手抄的配置应用这个比较麻烦，而且我遇到的是依赖问题，我还是用了 \u003ca href=\"/posts/nixpkgs-unstable-channel-update-failure-tips/#override\"\u003eOverride\u003c/a\u003e 的方法。\u003c/p\u003e","title":"nixos nixpkgs unstable 更新不稳定的一些解决尝试"},{"content":"一些背景 我有一个主机跑 PVE , 我本来有一块 8T 的机械硬盘，分了 4T 给飞牛。 后来感觉 4T 可能不够，就又买了一个 8T 的盘，又从新盘分了 4T 给飞牛，在里面用的是 lvm + btrfs. 最近想着我本来就两块磁盘，而且 lvm 还是 stripe 的，没有 mirror, 没有 raid, 用两块磁盘纯属徒增故障率，就想把其中一块直通得了，总容量还是 8t 左右。 开始操作 操作的步骤如下：\n因为我的数据是 5t 多，直接 pvmove 的话搞不定，于是先从 pve 上创建一个 2T 的磁盘给飞牛，用于周转。\n# 备份数据，删除了一部分没用的，保证文件系统用量在去除一个pv 后不会爆掉 # 在pve 上加盘，在飞牛上加入新pv, 用于周转 pvcreate /dev/sde vgextend vg-name /dev/sde 我怕出故障丢数据，就把飞牛上的一些数据往移动硬盘上备份了一份，结果这速度实在是太感人了，1.8T 的数据备份了 4 个多小时。\n缩文件系统\n# 停掉fnos 上的占用服务磁盘的服务，卸载 /vol1 umount -l /vol1 btrfs filesystem resize -4t /vol1 差不多用了 5 个小时！\n转移数据，移除硬盘 2\npvmove /dev/sdc1 vgreduce vg-name /dev/sdc1 pvremove /dev/sdc1 这一步用了将近 8 个小时，速度差不多两小时 1T, 合 145MB/s.\nPVE 上删除这个虚拟磁盘，然后整个磁盘直通给给飞牛\n# pve 上执行 # source: https://pve.proxmox.com/wiki/Passthrough_Physical_Disk_to_Virtual_Machine_(VM) qm set 107 -scsi2 /dev/disk/by-id/ata-ST8000VN004-3CP101_WRQ0QV3T 把数据都转移到直通的磁盘上，移除之前的 4T 虚拟磁盘和用于周转的 2T 磁盘\npvcreate /dev/sdc # 转移数据 pvmove /dev/sdb1 vgreduce vg-name /dev/sdb1 pvremove /dev/sdb1 # 周转磁盘 pvmove /dev/sde vgreduce vg-name /dev/sde pvremove /dev/sde 又是八个小时。。。\nbtrfs 扩文件系统\nbtrfs filesystem resize max /vol1 飞牛关机，PVE 移除磁盘，重启飞牛，大功告成！\n完事 整个过程其实比较常规，而且运气不错没丢数据，但是其中几个 pvmove 耗费了大量时间，前后花了一天一夜才完成。不得不说 btrfs 扩缩文件系统都挺方便的。\n而且看起来也不应该新建一个周转磁盘，直接扩原来的磁盘得了，还不用盯着啥时候 pvmove 结束。\n","permalink":"https://blog.lichliu.org/posts/replace-disk-for-fnos-on-pve/","summary":"\u003ch2 id=\"一些背景\"\u003e一些背景\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e我有一个主机跑 PVE , 我本来有一块 8T 的机械硬盘，分了 4T 给飞牛。\u003c/li\u003e\n\u003cli\u003e后来感觉 4T 可能不够，就又买了一个 8T 的盘，又从新盘分了 4T 给飞牛，在里面用的是 lvm + btrfs.\u003c/li\u003e\n\u003cli\u003e最近想着我本来就两块磁盘，而且 lvm 还是 stripe 的，没有 mirror, 没有 raid, 用两块磁盘纯属徒增故障率，就想把其中一块直通得了，总容量还是 8t 左右。\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"开始操作\"\u003e开始操作\u003c/h2\u003e\n\u003cp\u003e操作的步骤如下：\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003e\n\u003cp\u003e因为我的数据是 5t 多，直接 \u003ccode\u003epvmove\u003c/code\u003e 的话搞不定，于是先从 pve 上创建一个 2T 的磁盘给飞牛，用于周转。\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-shell\" data-lang=\"shell\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e     \u003cspan class=\"c1\"\u003e# 备份数据，删除了一部分没用的，保证文件系统用量在去除一个pv 后不会爆掉\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e     \u003cspan class=\"c1\"\u003e# 在pve 上加盘，在飞牛上加入新pv, 用于周转\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e     pvcreate /dev/sde\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e     vgextend vg-name /dev/sde\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003e我怕出故障丢数据，就把飞牛上的一些数据往移动硬盘上备份了一份，结果这速度实在是太感人了，1.8T 的数据备份了 4 个多小时。\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e缩文件系统\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-shell\" data-lang=\"shell\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e     \u003cspan class=\"c1\"\u003e# 停掉fnos 上的占用服务磁盘的服务，卸载 /vol1\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e     umount -l /vol1\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e     btrfs filesystem resize -4t /vol1\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003e差不多用了 5 个小时！\u003c/p\u003e","title":"给 PVE 上的飞牛 NAS 虚拟机换硬盘"},{"content":"test heading heading 3 ","permalink":"https://blog.lichliu.org/posts/another-hello-world/","summary":"\u003ch2 id=\"test-heading\"\u003etest heading\u003c/h2\u003e\n\u003ch3 id=\"heading-3\"\u003eheading 3\u003c/h3\u003e","title":"Another hello world"},{"content":"欢迎来到我的博客 这是我的第一篇文章，使用 Org-roam + Hugo 生成！\nOrg Mode 的一些特性 列表 test1 test2 test3 表格 col1 col2 test test2 test3 test4 代码块 #include \u0026lt;stdio.h\u0026gt; int main(){ printf(\u0026#34;Hello, world!\u0026#34;); return 0; } ","permalink":"https://blog.lichliu.org/posts/hello-world/","summary":"\u003ch2 id=\"欢迎来到我的博客\"\u003e欢迎来到我的博客\u003c/h2\u003e\n\u003cp\u003e这是我的第一篇文章，使用 Org-roam + Hugo 生成！\u003c/p\u003e\n\u003ch2 id=\"org-mode-的一些特性\"\u003eOrg Mode 的一些特性\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e列表\n\u003cul\u003e\n\u003cli\u003etest1\u003c/li\u003e\n\u003cli\u003etest2\u003c/li\u003e\n\u003cli\u003etest3\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e表格\n\u003ctable\u003e\n  \u003cthead\u003e\n      \u003ctr\u003e\n          \u003cth\u003ecol1\u003c/th\u003e\n          \u003cth\u003ecol2\u003c/th\u003e\n      \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n      \u003ctr\u003e\n          \u003ctd\u003etest\u003c/td\u003e\n          \u003ctd\u003etest2\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003etest3\u003c/td\u003e\n          \u003ctd\u003etest4\u003c/td\u003e\n      \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003c/li\u003e\n\u003cli\u003e代码块\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-c\" data-lang=\"c\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"cp\"\u003e#include\u003c/span\u003e \u003cspan class=\"cpf\"\u003e\u0026lt;stdio.h\u0026gt;\u003c/span\u003e\u003cspan class=\"cp\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"kt\"\u003eint\u003c/span\u003e \u003cspan class=\"nf\"\u003emain\u003c/span\u003e\u003cspan class=\"p\"\u003e(){\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"nf\"\u003eprintf\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;Hello, world!\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e);\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"mi\"\u003e0\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003c/li\u003e\n\u003c/ul\u003e","title":"Hello world"},{"content":"今天海博馆半日游，体验其实还不错。作为一个博物馆来说，里面的内容和设置都是符合我的预期的。 虽然付费项目没玩（带着桃桃基本也没法玩），单就内容丰富程度来说，如果愿意都看一遍，三个小时的内容量还是有的。 里面的库迪咖啡价格在外面的两倍左右，9.9 的生椰拿铁里面是卖 17.9, 冬瓜没舍得让我买。 让我惊讶的是里面的展品，我是第一次看这类博物馆，我一直以为里面的动物都是模型，结果看到有些名字旁边用括号模型俩字，让我意识到原来之前的都是标本，然后在一个今日海洋馆里看到科普标本的制作过程，有些惊了，原来这东西做出来是这样的，活了 30 年头一次知道标本原来是做到这种程度，哈哈。 桃桃虽然对一些东西会发出惊讶的声音，但显然没到能对博物馆感兴趣的年龄，逛了半个多小时的时候就开始打盹了，中间睡了半个小时，后面精神极佳，很捧场的看到新鲜东西就发出惊讶的叫声。 讲道理作为预约就能进的免费博物馆，可以给到 4/5 分。扣掉一分是因为没有能让我十分惊讶或者感到非常有趣的部分。 住的近的话完全可以来吹吹风喝杯咖啡，不过注意停车场收费，4元/小时，12 封顶。\n相比较而言，我对科技部分更感兴趣一些，人文历史稍微看了下，基本和初高中历史课本讲的都差不多，除了现代中国海洋开发那部分没学过，其他的基本都是历史课本上的故事，不过因为文物、标本等原件在这，还是更有趣一点的。\n","permalink":"https://blog.lichliu.org/posts/national-maritime-museum/","summary":"\u003cp\u003e今天海博馆半日游，体验其实还不错。作为一个博物馆来说，里面的内容和设置都是符合我的预期的。\n虽然付费项目没玩（带着桃桃基本也没法玩），单就内容丰富程度来说，如果愿意都看一遍，三个小时的内容量还是有的。\n里面的库迪咖啡价格在外面的两倍左右，9.9 的生椰拿铁里面是卖 17.9, 冬瓜没舍得让我买。\n让我惊讶的是里面的展品，我是第一次看这类博物馆，我一直以为里面的动物都是模型，结果看到有些名字旁边用括号模型俩字，让我意识到原来之前的都是标本，然后在一个今日海洋馆里看到科普标本的制作过程，有些惊了，原来这东西做出来是这样的，活了 30 年头一次知道标本原来是做到这种程度，哈哈。\n桃桃虽然对一些东西会发出惊讶的声音，但显然没到能对博物馆感兴趣的年龄，逛了半个多小时的时候就开始打盹了，中间睡了半个小时，后面精神极佳，很捧场的看到新鲜东西就发出惊讶的叫声。\n讲道理作为预约就能进的免费博物馆，可以给到 4/5 分。扣掉一分是因为没有能让我十分惊讶或者感到非常有趣的部分。\n住的近的话完全可以来吹吹风喝杯咖啡，不过注意停车场收费，4元/小时，12 封顶。\u003c/p\u003e\n\u003cp\u003e相比较而言，我对科技部分更感兴趣一些，人文历史稍微看了下，基本和初高中历史课本讲的都差不多，除了现代中国海洋开发那部分没学过，其他的基本都是历史课本上的故事，不过因为文物、标本等原件在这，还是更有趣一点的。\u003c/p\u003e","title":"海博馆"}]