无聊迁移到Btrfs杂记
March 31, 2015•146 words
前天,我 小高考 (江苏学测) 完了。放假两天。回到家里感觉无聊没事做,欣然决定将我的整个磁盘迁移到 btrfs 上。也是打算用这两天时间来……算是在 语数外 三门轮番轰炸前的最后一次折腾吧。
关于 btrfs 我想大家都应该了解一些。我主要看中的是 btrfs 的 snapshot 和 subvolume 功能,因为我使用的是滚动更新的 gentoo,有 滚挂 的风险,如果有了 snapshot ,一旦滚挂,只需恢复即可。
对于手抽党而言,btrfs 更有可能拯救你手抽破坏的各种东西……
而 btrfs 的转换过程才是最最痛苦的,这个我等下再吐槽了……
准备内核
由于我使用的是 Gentoo Linux, 所以要手工编译内核,只需要开启 File Systems 下的 Btrfs 一项再重新编译即可。
转换分区
虽然 Google 上有很多 Live convert 教程,但是我真的觉得那会很危险……
我是使用的 SystemRescueCD 引导转换的,因为它自带 btrfs-progs 这个包,只消运行
btrfs-convert /dev/sdaX
即可转换。转换好了以后,所有数据仍然没有变化,只是它新建了一个 ext2_saved 子卷,里面保存了一个和分区以前的状态一样的镜像。
建立子卷、重构目录树
如果你只用 btrfs 的根子卷的话,那也真是浪费了……所以我是建立了子卷。
我原来的分区是对 / 与 /home 单独分区,所以我的子卷也是为它们单独建立子卷。
btrfs subvol create rootfs-gentoo # /
btrfs subvol create homefs-gentoo # /home
接下来需要把它们都mount出来,这里是 btrfs 的自带选项 subvol,可以把某几个子卷单独挂载出来,一定要注意这个选项,我就被坑过!!!
mount -t btrfs -o subvol=rootfs-gentoo,compress=lzo /mnt/gentoo
mount -t btrfs -o subvol=homefs-gentoo,compress=lzo /mnt/gentoo/home
然后使用 rsync 等工具把原系统的数据转移过去。
配置内核command line和fstab
要使Linux内核从btrfs子卷作为根目录启动,必须把命令行写成这样
root=/dev/sdaX rootfstype=btrfs rootflags=subvol=rootfs-gentoo
在 fstab 里面,你得把原来的 ext4 改成 btrfs,并且在挂载参数里面加上 subvol=xxx。另外,一定要把 btrfs 的根子卷即不加 subvol 挂载参数的子卷挂载出来,建议挂载到 /mnt/pool,否则不好操作。
然后要建立snapshot,只需切换到 /mnt/pool,运行 btrfs subvol snapshot create [subvol-name] [snapshot-name] 即可。
吐槽
btrfs-convert 太太太太太太慢!!!!!!!!!我先做测试转换了一个 50G 的盘用了三分钟,然后我开始转换我的磁盘,一共 800G,用了将近四十分钟!!!!!!!!!!!!!!!!!!!!!!
不过 btrfs 确实是好东西,比如说我昨天就差点手残把系统搞坏了,然后 btrfs 这么快就派上用场了………………