如何将ext3 / ext4根文件系统转换为btrfs在Ubuntu 12.10上
ext3和ext4文件系统可以转换为btrfs。 对于非根文件系统,这可以在线完成(即不重新启动),而对于根文件系统,我们需要启动某种救援系统或Live CD。 本指南介绍如何将ext3或ext4根文件系统转换为Ubuntu 12.10中的btrfs以及如果需要再次回滚到ext3 / ext4。
我不会保证这将为您工作!
1初步说明
我在这里使用一个大/
分区(即,没有/启动
分区)和没有LVM的系统。 在初始安装期间,它安装了选项指导 - 使用整个磁盘
。 对于不同的分区方案,过程可能不同。
我的硬盘驱动器在本教程中命名为/ dev / sda
,我的系统分区是/ dev / sda1
。
在本教程中,我将使用Ubuntu 12.10 Desktop Live-CD作为救援系统。
我将展示两种转换方法:一种是简单地转换系统分区并更改/ etc / fstab
,另一种是根据Ubuntu的btrfs分区布局创建子卷@
和@home(参见https:// help)。 ubuntu.com/community/btrfs ) - 这稍微复杂一些,但是如果要使用需要此子卷布局的apt-btrfs-snapshot ,则必须执行此操作。
Ubuntu用户注意事项:
因为我们必须使用root权限运行本教程的所有步骤,所以我们可以使用字符串sudo
在本教程中添加所有命令,也可以通过键入来成为root
sudo su
2安装btrfs-tools
在原始系统上,在我们引导到救援系统之前,安装btrfs-tools,以便当我们在拯救系统中chroot到系统分区时可以使用该软件包(可能我们没有网络连接来安装当我们被扼制在系统分区的救援系统中,这就是为什么我们现在应该安装它):
apt-get install btrfs-tools
现在我们必须启动一些btrfs支持的救援系统。 例如,您可以将Ubuntu 12.10桌面CD插入CD驱动器(确保它具有与该系统相同的架构 - i386或x86_64)并重新启动:
reboot
3做一个简单的转换(没有@和@home子卷)
在救援系统中,以root身份登录。 确保安装了btrfs-tools:
apt-get install btrfs-tools
进行文件系统检查...
fsck -f /dev/sda1
...然后运行转换工具:
btrfs-convert /dev/sda1
root@ubuntu:~# btrfs-convert /dev/sda1
creating btrfs metadata.
creating ext2fs image file.
cleaning up system chunk.
conversion complete.
root@ubuntu:~#
接下来我们将系统分区和chroot挂载到它:
mount /dev/sda1 /mnt
for fs in proc sys dev dev/pts; do mount --bind /$fs /mnt/$fs; done
chroot /mnt
ls -l
如您所见,现在有一个名为ext2_saved
的文件夹,其中包含转换前的系统分区(使用原始ext3或ext4文件系统)的映像。 此图像可以用于稍后执行回滚。
root@ubuntu:/# ls -l
total 20
drwxr-xr-x 1 root root 1938 Nov 22 13:15 bin
drwxr-xr-x 1 root root 326 Nov 23 18:38 boot
drwxr-xr-x 14 root root 4060 Nov 23 18:38 dev
drwxr-xr-x 1 root root 2820 Nov 23 18:38 etc
dr-xr-xr-x 1 root root 10 Nov 23 18:40 ext2_saved
drwxr-xr-x 1 root root 26 Nov 22 13:16 home
lrwxrwxrwx 1 root root 32 Nov 22 13:11 initrd.img -> boot/initrd.img-3.5.0-17-generic
lrwxrwxrwx 1 root root 33 Nov 22 13:11 initrd.img.old -> /boot/initrd.img-3.5.0-17-generic
drwxr-xr-x 1 root root 982 Nov 22 13:15 lib
drwxr-xr-x 1 root root 40 Nov 22 13:10 lib64
drwx------ 1 root root 0 Nov 22 13:10 lost+found
drwxr-xr-x 1 root root 10 Nov 22 13:10 media
drwxr-xr-x 1 root root 0 Oct 9 17:03 mnt
drwxr-xr-x 1 root root 0 Oct 17 18:22 opt
dr-xr-xr-x 186 root root 0 Nov 23 18:38 proc
drwx------ 1 root root 68 Nov 23 18:38 root
drwxr-xr-x 1 root root 0 Nov 22 13:16 run
drwxr-xr-x 1 root root 3094 Nov 23 18:38 sbin
drwxr-xr-x 1 root root 0 Jun 11 20:36 selinux
drwxr-xr-x 1 root root 0 Oct 17 18:22 srv
dr-xr-xr-x 13 root root 0 Nov 23 18:38 sys
drwxrwxrwt 1 root root 0 Nov 23 18:38 tmp
drwxr-xr-x 1 root root 70 Nov 22 13:10 usr
drwxr-xr-x 1 root root 114 Nov 23 18:38 var
lrwxrwxrwx 1 root root 29 Nov 22 13:11 vmlinuz -> boot/vmlinuz-3.5.0-17-generic
lrwxrwxrwx 1 root root 29 Nov 22 13:11 vmlinuz.old -> boot/vmlinuz-3.5.0-17-generic
root@ubuntu:/#
跑
blkid /dev/sda1
root@ubuntu:/# blkid /dev/sda1
/dev/sda1: UUID="63accb30-95b9-4268-ae1e-6d0ad3ef3a9d" UUID_SUB="d9521f58-91e5-44a7-a52e-9cfb0b3056ca" TYPE="btrfs"
root@ubuntu:/#
我们需要输出的UUID来修改/ etc / fstab
:
vi /etc/fstab
注释旧的/
分区线,并添加一个新的。 将UUID从blkid
输出替换为UUID,然后用btrfs
替换ext4
(或ext3
),最后用字符串defaults
替换mount选项(例如errors = remount-ro
):
# /etc/fstab: static file system information. # # Use 'blkid' to print the universally unique identifier for a # device; this may be used with UUID= as a more robust way to name devices # that works even if disks are added and removed. See fstab(5). # # <file system> <mount point> <type> <options> <dump> <pass> # / was on /dev/sda1 during installation #UUID=ad50ef37-797d-44ea-a8fa-ae61abe4d00f / ext4 errors=remount-ro 0 1 UUID=63accb30-95b9-4268-ae1e-6d0ad3ef3a9d / btrfs defaults 0 1 # swap was on /dev/sda5 during installation UUID=4dc578f3-c65c-4013-b643-72e70455b21b none swap sw 0 0 |
接下来打开/etc/grub.d/00_header
...
vi /etc/grub.d/00_header
...并注释第93行( 如果[-n“\ $ {have_grubenv}”];然后如果[-z“\ $ {boot_once}”];然后save_env recordfail; fi; fi
):
[...] function recordfail { set recordfail=1 #if [ -n "\${have_grubenv}" ]; then if [ -z "\${boot_once}" ]; then save_env recordfail; fi; fi } [...] |
如果你不这样做,你会得到错误...
error: sparse file not allowed
...当您从btrfs文件系统启动时,您必须按ENTER继续进行引导过程(请参阅Ubuntu 12.10 + btrfs:error:sparse file not allowed )。
下一个运行
update-grub
grub-install /dev/sda
并从chroot退出:
exit
重新启动到正常系统(确保从CD驱动器中删除Live CD):
reboot
如果一切顺利,系统就会出现问题,现在运行在btrfs上。
ls -l /
如你所见,仍然有ext2_saved
文件夹与原始系统的图像,以防您想要回滚:
root@server1:~# ls -l /
total 20
drwxr-xr-x 1 root root 1938 Nov 22 13:15 bin
drwxr-xr-x 1 root root 326 Nov 23 18:38 boot
drwxr-xr-x 14 root root 4080 Nov 23 18:43 dev
drwxr-xr-x 1 root root 2820 Nov 23 18:43 etc
dr-xr-xr-x 1 root root 10 Nov 23 18:40 ext2_saved
drwxr-xr-x 1 root root 26 Nov 22 13:16 home
lrwxrwxrwx 1 root root 32 Nov 22 13:11 initrd.img -> boot/initrd.img-3.5.0-17-generic
lrwxrwxrwx 1 root root 33 Nov 22 13:11 initrd.img.old -> /boot/initrd.img-3.5.0-17-generic
drwxr-xr-x 1 root root 982 Nov 22 13:15 lib
drwxr-xr-x 1 root root 40 Nov 22 13:10 lib64
drwx------ 1 root root 0 Nov 22 13:10 lost+found
drwxr-xr-x 1 root root 10 Nov 22 13:10 media
drwxr-xr-x 1 root root 0 Oct 9 17:03 mnt
drwxr-xr-x 1 root root 0 Oct 17 18:22 opt
dr-xr-xr-x 100 root root 0 Nov 23 18:43 proc
drwx------ 1 root root 84 Nov 23 18:42 root
drwxr-xr-x 17 root root 620 Nov 23 18:43 run
drwxr-xr-x 1 root root 3094 Nov 23 18:38 sbin
drwxr-xr-x 1 root root 0 Jun 11 20:36 selinux
drwxr-xr-x 1 root root 0 Oct 17 18:22 srv
dr-xr-xr-x 13 root root 0 Nov 23 18:43 sys
drwxrwxrwt 1 root root 0 Nov 23 18:42 tmp
drwxr-xr-x 1 root root 70 Nov 22 13:10 usr
drwxr-xr-x 1 root root 114 Nov 23 18:38 var
lrwxrwxrwx 1 root root 29 Nov 22 13:11 vmlinuz -> boot/vmlinuz-3.5.0-17-generic
lrwxrwxrwx 1 root root 29 Nov 22 13:11 vmlinuz.old -> boot/vmlinuz-3.5.0-17-generic
root@server1:~#
ls -l /ext2_saved/
root@server1:~# ls -l /ext2_saved/
total 1594360
-r-------- 1 root root 31137464320 Jan 1 1970 image
root@server1:~#
其实这不是一个文件夹,它是一个btrfs子卷:
btrfs subvolume list /
root@server1:~# btrfs subvolume list /
ID 256 top level 5 path ext2_saved
root@server1:~#
如果您确定要保留btrfs并且不希望进行回滚,则可以删除该子卷以释放一些空间:
btrfs subvolume delete /ext2_saved
之后,形象应该走了
ls -l /
root@server1:~# ls -l /
total 16
drwxr-xr-x 1 root root 1938 Nov 22 13:15 bin
drwxr-xr-x 1 root root 326 Nov 23 18:38 boot
drwxr-xr-x 14 root root 4080 Nov 23 18:43 dev
drwxr-xr-x 1 root root 2820 Nov 23 18:43 etc
drwxr-xr-x 1 root root 26 Nov 22 13:16 home
lrwxrwxrwx 1 root root 32 Nov 22 13:11 initrd.img -> boot/initrd.img-3.5.0-17-generic
lrwxrwxrwx 1 root root 33 Nov 22 13:11 initrd.img.old -> /boot/initrd.img-3.5.0-17-generic
drwxr-xr-x 1 root root 982 Nov 22 13:15 lib
drwxr-xr-x 1 root root 40 Nov 22 13:10 lib64
drwx------ 1 root root 0 Nov 22 13:10 lost+found
drwxr-xr-x 1 root root 10 Nov 22 13:10 media
drwxr-xr-x 1 root root 0 Oct 9 17:03 mnt
drwxr-xr-x 1 root root 0 Oct 17 18:22 opt
dr-xr-xr-x 98 root root 0 Nov 23 18:43 proc
drwx------ 1 root root 84 Nov 23 18:42 root
drwxr-xr-x 17 root root 620 Nov 23 18:43 run
drwxr-xr-x 1 root root 3094 Nov 23 18:38 sbin
drwxr-xr-x 1 root root 0 Jun 11 20:36 selinux
drwxr-xr-x 1 root root 0 Oct 17 18:22 srv
dr-xr-xr-x 13 root root 0 Nov 23 18:43 sys
drwxrwxrwt 1 root root 0 Nov 23 18:42 tmp
drwxr-xr-x 1 root root 70 Nov 22 13:10 usr
drwxr-xr-x 1 root root 114 Nov 23 18:38 var
lrwxrwxrwx 1 root root 29 Nov 22 13:11 vmlinuz -> boot/vmlinuz-3.5.0-17-generic
lrwxrwxrwx 1 root root 29 Nov 22 13:11 vmlinuz.old -> boot/vmlinuz-3.5.0-17-generic
root@server1:~#