⚠️ 操作前必读
- 文件系统转换属于高风险操作,务必提前完整备份数据
- 本文操作环境:新重装的 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 -T或mount | grep btrfs确认根目录已挂载为 Btrfs
0
暂无评论