Racknerd VPS ext4 转 Btrfs 完整指南

⚠️ 操作前必读

  • 文件系统转换属于高风险操作,务必提前完整备份数据
  • 本文操作环境:新重装的 Debian 13,其他系统/版本请酌情调整命令与路径

检查并加载 Btrfs 模块

# 检查内核是否已加载 btrfs 模块
lsmod | grep btrfs

# 若未加载,手动载入
modprobe btrfs

# 再次验证加载结果
lsmod | grep btrfs

✅ 正常输出示例:

btrfs                2150400  0
xor                    20480  1 btrfs
raid6_pq              122880  1 btrfs
libcrc32c              12288  1 btrfs
# 持久化模块加载
echo "btrfs" >> /etc/modules-load.d/btrfs.conf

进入救援模式并检查文件系统

# 检查本来的 ext4 文件系统
fsck.ext4 -f /dev/vda1

✅ 正常输出示例:

e2fsck 1.43.4 (31-Jan-2017)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
/dev/vda1: 41347/1225728 files (0.1% non-contiguous), 410141/4980176 blocks

获取新版 btrfs-progs(关键!)

📌 救援系统自带 btrfs-progs 版本可能过旧,旧版本必定出问题。
推荐使用静态编译的新版本:
👉 https://pkgs.pkgforge.dev
# 下载并解压后执行转换(路径依实际调整)
./btrfs-convert /dev/vda1

⏳ 耐心等待,直至看到:

Conversion complete.

验证转换结果并清理回滚数据

# 挂载新文件系统
mount -t btrfs /dev/vda1 /mnt

# 确认原数据完整
ls /mnt

# 查看 Btrfs 子卷(应包含 ext2_saved 用于回退)
btrfs subvolume list /mnt

# 【可选】清理回滚子卷(⚠️不可逆操作!确认无误后再执行)
btrfs subvolume delete /mnt/ext2_saved

更新 fstab 与 UUID

# 获取转换后的新 UUID
blkid /dev/vda1

✅ 输出示例:

/dev/vda1: UUID="xxxx" UUID_SUB="xxx" TYPE="btrfs" PARTUUID="xx"
# 重写 /etc/fstab(替换 xxxx 为实际 UUID)
cat > /mnt/etc/fstab <<EOF
UUID=xxxx / btrfs defaults 0 1
EOF

重建 initramfs 与 GRUB 引导

挂载必要目录并进入 chroot 环境

mount --bind /dev /mnt/dev
mount --bind /proc /mnt/proc
mount --bind /sys /mnt/sys
chroot /mnt

更新 initramfs

update-initramfs -u -k all

出现以下警告是正常情况,可忽略:

W: /sbin/fsck.btrfs doesn't exist, can't install to initramfs

重装 GRUB 并更新配置

grub-install /dev/vda
update-grub

退出救援模式 & 验证

  • 在控制面板中退出救援模式,正常启动 VPS
  • 登录后执行 df -Tmount | grep btrfs 确认根目录已挂载为 Btrfs
CC BY-NC-SA 4.0 Deed | 署名-非商业性使用-相同方式共享
最后更新时间:2026-05-23 19:46:27

0

    暂无评论