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 分钟