Oracle Cloud Ubuntu VM 从 ext4 原地转换到 Btrfs

记录一下把 Oracle Cloud 上的 Ubuntu 26.04 ARM VM 从 ext4 原地转换为 Btrfs 的过程。 WARNING: 本文操作涉及文件系统级别的原地转换,一旦出错数据将无法恢复。我的 VM 是一台空白机器,没有任何重要数据,所以才敢这么操作。如果你的机器上有任何你不想丢的东西,请务必先做好完整备份(Oracle Cloud 的 Boot Volume Backup、rsync 到远端、dd 镜像等),确认备份可恢复之后再动手。文件系统转换失败 + 没有备份 = 数据全灭,没有后悔药。 背景 Oracle Cloud 免费 ARM 实例,150G 磁盘,系统盘只有一个 ext4 根分区。想用上 Btrfs 的透明压缩、快照和子卷管理,但不想重装系统。 方案:initramfs 钩子 + btrfs-convert 核心思路:根分区在挂载状态下无法转换,所以利用 initramfs 的 local-premount 阶段——此时根分区尚未挂载——执行 btrfs-convert。 1. 安装 btrfs-progs sudo apt install btrfs-progs 2. 创建 initramfs 钩子 将 btrfs-convert 和 btrfs 二进制打包进 initramfs: # /etc/initramfs-tools/hooks/btrfs-convert #!/bin/sh set -e PREREQ="" prereqs() { echo "$PREREQ"; } case $1 in prereqs) prereqs; exit 0;; esac . /usr/share/initramfs-tools/hook-functions copy_exec /usr/bin/btrfs-convert /usr/bin copy_exec /usr/bin/btrfs /usr/bin 在 root 挂载前执行转换。注意 btrfs-convert 会生成新的 UUID,所以脚本里需要同时更新 GRUB 配置,否则重启后内核找不到 root 会掉进 initramfs shell: ...

2026年4月6日 · 3 分钟

我是怎么改善 Rust 编译体验的

Rust 编译慢、target/ 目录大,这是老生常谈了。这篇记录一下我目前在用的几个改善手段,以我的项目 ClewdR(394 个 crate 依赖的异步 Web 服务)为例。 环境:Rust 1.94.1,CachyOS (Arch-based),NVMe SSD,Btrfs。 rust-lld 链接是 Rust 编译的最后一步,也是传统上最慢的一步。GNU ld 在这里表现很差,特别是开了 LTO 的时候。 以前的做法是手动装 lld 或 mold,然后在 .cargo/config.toml 里配: [target.x86_64-unknown-linux-gnu] linker = "clang" rustflags = ["-C", "link-arg=-fuse-ld=lld"] 但从 Rust 1.85(2025-02-20)开始,rust-lld 在 x86_64-unknown-linux-gnu 上已经是默认链接器了,不需要任何配置: $ readelf -p .comment target/release/clewdr String dump of section '.comment': [ 1] Linker: LLD 21.1.8 [ 5f] rustc version 1.94.1 (e408947bf 2026-03-25) 升级 Rust 就行,免费午餐。 顺带一提,社区里还有两个值得关注的替代链接器: mold:以速度为卖点的链接器,在非 LTO 场景下通常比 lld 更快,不过对 LTO 的支持有限。 wild:一个用 Rust 写的实验性链接器,目标是成为最快的 Linux ELF 链接器,做了大量多线程优化。目前还在活跃开发中,有兴趣可以关注。 对于大多数人来说,默认的 rust-lld 已经够用了。 ...

2026年4月6日 · 2 分钟