公告

Gentoo交流群:87709706 欢迎您的加入

#1 2023-05-30 22:15:08

semes
管理团队
注册时间: 2022-11-09
帖子: 24

从ext4迁移到btrfs

最近扩展 Linux 分区的时候,由于年少轻狂,没有进行全盘备份,导致系统出现了灾难性事故,软件、配置,还有最近学习 Vim,写了快一个星期的配置文件,全部丢失。重装系统后便开始寻找适合备份的文件系统,便有了这篇文章。

为什么是 Btrfs
Btrfs 是 B-tree 文件系统,通常念做 「Butter FS」、「Better FS」或「B-tree FS」。是一种支持写入时复制(CoW)的 Linux 文件系统。相对于 ext4 文件系统有以下几个优点:

Btrfs 支持快照,方便备份与恢复;
Btrfs 支持透明压缩,节省存储空间;
Btrfs 支持子卷功能,便于管理;
Btrfs 支持数据与元数据校验。
这些优点使我产生了向 Btrfs 迁移的念头,幸运的是,Btrfs 支持从 ext4 转换。

转换步骤
以下步骤是在我自用电脑上操作的,磁盘 /dev/nvme0n1p4 挂载为 Linux 根分区,下文命令可能需要调整。由于操作时需要对根分区进行操作,强烈建议操作前进行全盘备份并在 LiveCD 环境下进行操作。

注意:任何对数据的操作都是充满风险的,如果你不能承受数据丢失的风险,请勿操作。 注意:如果转换中出现任何异样,你都可以使用备份子卷 /ext2_saved 来回滚。请勿强行对转换失败的分区做出更改。使用 btrfs-convert -r /dev/target_partition 命令进行回滚。

检查文件系统
首先使用 fsck 检查磁盘,保证现有分区没有问题。

# fsck.ext4 /dev/nvme0n1p4
开始文件系统转换
分区检查通过后就可以开始转换。执行以下命令进行转换。

# btrfs-convert /dev/nvme0n1p4
待出现 conversion complete 表明转换完成。现在分区的文件系统已经是 Btrfs 了,但是还不能重启,还需要对现有的文件进行修改才能顺利引导进系统。

挂载分区并修改 fstab
首先需要挂载分区,方便我们修改文件。这里我们将分区挂载到 /mnt 目录下。

# mount /dev/nvme0n1p4 /mnt
使用磁盘工具检查分区的 UUID,这里使用 lsblk 命令。

$ lsblk -f
NAME        FSTYPE FSVER LABEL      UUID                                 FSAVAIL FSUSE% MOUNTPOINT
nvme0n1
...                               
└─nvme0n1p4 btrfs        ...        82xxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxeb     xxG     xx%    /mnt
使用文本编辑工具修改 /mnt/etc/fstab 文件,修改挂载到根目录的分区类型(type)为 btrfs、文件系统检查顺序(pass)为 0(启动时不进行磁盘检查),并检查转换后的分区 UUID 是否改变,修改挂载分区(file system)。
需要重新生成fstab  建议genfstab -U /  >> /etc/fstab     要把全部的系统区挂载上,注意内核需要支持btrfs支持和安装btrfs文件系统支持

重建初始化内存盘
重建初始化内存盘需要在 chroot 环境中进行。首先需要设置对应的挂载点。

# mount -t proc none /mnt/proc
# mount -t sysfs none /mnt/sys
# mount -o bind /dev /mnt/dev
随后使用 chroot 命令进入原系统。

# chroot /mnt bash
进入原系统后,使用 mkinitcpio 重建初始化内存盘。这里可能需要替换命令参数,如果提示 Fail to load preset,需要检查 /etc/mkinitcpio.d 目录下是否存在对应的预设文件名。

# mkinitcpio --preset linux




如果使用 GRUB 启动,还需要重建 GRUB 引导。




TLP 设置
如果使用了 TLP 高级电源管理功能,需要对 TLP 进行设置,防止文件系统损坏。编辑位于 /mnt/etc/tlp.conf 的配置文件,找到 SATA_LINKPWR_ON_BAT 条目,取消注释并在选项中添加 max_performance 参数。

SATA_LINKPWR_ON_BAT="med_power_with_dipm max_performance"
启用透明压缩
为了能够利用 Btrfs 的透明压缩功能,可以对转换好的分区进行压缩并修改 fstab 挂载选项。

首先需要对转换好的分区进行全盘压缩。

# btrfs filesystem defragment -r -v -czstd /mnt
随后需要修改 fstab 文件,在根目录文件系统的挂载选项(options)一栏中增加 compress=zstd 选项,以便系统启动时应用压缩选项。

使用新文件系统启动及后续操作
完成上述步骤后,便可以使用转换后的分区启动。启动后,可以删除 /ext2_saved 子卷完成转换。

# btrfs subvolume delete /ext2_saved
最后通过 Balance 来回收数据。

# btrfs balance start /
# btrfs balance status /
至此,分区文件系统转换就结束了。感受新文件系统所带来的惊喜吧。

配置文件系统检修
在转换结束后,可以配置定时对根目录 / 的检修任务。

# systemctl enable --now btrfs-scrub@-.timer
或者你也可以手动执行。

# btrfs scrub start /
# btrfs scrub status /

离线

页脚

Powered by FluxBB

本站由XREA提供空间支持