使用默认子卷(subvolid = 0)上的btrfs将Linux安装移动到另一个子卷


15

当安装到根btrfs文件系统时,许多Linux发行版都安装到默认子卷。如果不进行修改,此布局将强制在根文件系统内创建任何快照或子卷,这可能是不希望的。另一种可能的布局是使默认子卷包含一个snapshots目录和一个rootfs子卷,即根文件系统。如何在不从livecd引导的情况下将发行默认的btrfs安装更改为使用此子卷布局?

Answers:


15

首先,我们将在默认子卷中创建所需的布局:

btrfs subvolume snapshot / /rootfs
mkdir /snapshots

请注意,这/rootfs将是我们的新根文件系统,因此在此步骤之后,请勿对当前文件系统进行任何更改。

编辑/rootfs/etc/fstab以使系统使用新的rootfs子卷作为根文件系统。为此,您需要对其进行修改以包括该subvol=rootfs选项。

将我们的新根文件系统挂载到某个地方,挂载相关的文件系统(dev,sys,proc,如果有,请启动),将其chroot并更新grub:

mount -o subvol=rootfs /dev/sdXX /media/temporary
cd /media/temporary
mount -o bind /dev  dev
mount -o bind /sys  sys
mount -o bind /proc proc
mount -o bind /boot boot
chroot .
update-grub
exit

而已。重新引导,您的根文件系统应该是rootfs子卷。如果成功,则不应有任何/ snapshots目录。现在,您可以在默认子卷中删除旧的根文件系统的内容。

如果需要,可以为默认子卷创建一个永久安装点:

mkdir /media/btrfs/root

然后就可以mount -o subvolid=0 /dev/sdXX /media/btrfs/root创建快照/子卷了。


1
另外,请注意,除了安装,chroot和更新grub之外,您还可以使用来简单地将默认子卷设置为rootfs btrfs subvolume set-default ID /ID可以使用`btrfs子卷列表/
goncalopp

我添加了subvol=/rootfs(请注意/),fstab因为这似乎是(btrfs Wiki)[ btrfs.wiki.kernel.org/index.php/Mount_options]中描述的“正确”方式。
go2null17年

@ go2null使用的问题subvol=/rootfs是,任何不了解您的布局的程序(例如,发行版安装程序)将代替安装默认子卷。如果程序希望文件系统看起来像linux文件系统,则该文件系统会失败,甚至更糟-在默认子卷中填入您不想要的东西
goncalopp

嗯,本来以为与文件系统混在一起的编fstab程序至少会检查或引导加载程序配置。
go2null
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.