1.在原系统下安装btrfs-progs-unstable.
2.修改fstab中改原系统分区 UUID标记的方式 临时改为sdaX 的方式 注意还要将文件系统类型extX 改为btrfs 否则会进不了系统.
若真的忘了修改fstab 也不用慌, 只需通过引导从archlinux-2010.07-1-archboot.iso 提取出initrd.img和vmlinuz 进入命令模式, 然后加载分区并使用vi或者nano修改fstab即可.
3.使用grub4dos 引导(也可用grub)从 最新官方的archlinux-2010.07-1-archboot.iso (已支持btrfs了)提取出initrd.img和vmlinuz 进入"命令模式" 注意提取时分清32/64 要于实际系统一致
4.1 fsck -f /dev/sda13 (检测并修复磁盘)
btrfs-convert /dev/sda13 (仅支持 Convert from Ext3/4->Btrfs)
4.2 mount /dev/sda13 /tmp/install
mount -t proc none /tmp/install/proc
mount -t sysfs none /tmp/install/sys
mount -o bind /dev /tmp/install/dev
chroot /tmp/install pacman -S kernel26 (重建内核文件)
若之前未在原系统安装btrfs-progs-unstable,在这里可用一下命令进行安装
cp /var/cache/pacman/pkg/btrfs-progs-unstable* /tmp/install/var/cache/pacman/pkg/
chroot /tmp/install pacman -S btrfs-progs-unstable
4.3 将重新生成的kernel复制到grub4dos 分区 (因为grub4dos及原生grub均不支持btrfs文件系统)
mkdir /tmp/winpe && mount /dev/sda1 /tmp/winpe
cp /tmp/install/boot/kernel26.img /tmp/winpe/boot/
cp /tmp/install/boot/vmlinuz26 /tmp/winpe/boot/
为了避免每次升级kernel都需将新生成的kernel复制到grub4dos 分区,否则可能无法引导.除了可使用我提供的已打补丁的grub来引导.
还可修改fstab 将groub4dos路径 mount -bind 到/boot上[感谢:SunRise提出方案]
groub4dos路径 /boot none bind
4.4 修改grub4dos的menu.lst 如:
title Arch Linux(btrfs)
root (hd0,0)
kernel /boot/vmlinuz26 root=/dev/sda13 rootdelay=0 resume=/dev/sda14 ro quiet splash
initrd /boot/kernel26.img
5.重启进入系统,使用blkid 获取新UUID 并适当修改fstab
update=================================
我打包已打补丁的grub(支持BtrFS文件系统) 见(需爬梯子下载)
PS:当grub被安装到MBR, 第一分区的UUID 会改变的