译者注:是什么btrfs文件系统,它是2007年Oracle开发,支持GPL协议,为了取代Linux早期的ext系列文件系统的下一代文件系统。https://blog.csdn.net/gongxifacai_believe/article/details/88706503
预览
我们要安装ka1i Linux,在apt操作过程中自动创建文件系统快照,以便在升级失败后回滚系统。
Btrfs是用于Linux的现代写时复制(copy on write CoW)文件系统,旨在实现高级功能,例如池,快照,校验和以及集成的多设备跨接。特别是,快照支持使得Btrfs吸引了裸机上的ka1i安装。虚拟化解决方案(例如VMWare和Virtualbox)提供了自己的快照功能,实际上并不需要在这些环境中使用btrfs。
本演练的快照策略围绕着来自Ubuntu存储库的名为“ apt-btrfs-snapshot”的工具,该工具是“ apt”的包装。该包装程序透明地挂接到apt工作流中,并在任何apt操作之前和之后自动创建快照。这项精巧的小功能使升级失败后可以轻松回滚系统。
快照程序是另一个有用的实用程序,用于创建快照。我们正在通过为其快照创建一个单独的子卷来准备ka1i系统以供快照程序使用,但本演练中未包括快照程序的安装和使用。可在以下网站上找到有关快照程序的详细信息:http : //snapper.io/
安装概述
具有快照功能的ka1i Linux的安装与标准安装非常相似,但以下情况除外:
- 我们在中途暂停安装,以便在继续安装之前使用工具“ partman”在命令行上设置btrfs分区和btrfs子卷。
- 在重新启动到新安装的系统之前,我们调整fstab并将一些文件夹移至新的子卷
分区方案
我们将使用以下布局:
Mount Point | Subvolume | Description
-------------------------------------------------------------------------
/ | @ | The root filesystem incl. /boot
/home | @home | User home directories
/root | @root | The root user‘s home directory
/var/log | @log | Log files
/.snapshots | @snapshots | Snapper‘s snapshot directory
ka1i Linux Btrfs安装步骤
安装先决条件
- 用于ka1i Linux安装的最小20 GB磁盘空间。
- 适用于i386和amd64架构的RAM,最低:1GB,推荐:2GB或更高。
- CD-DVD驱动器/ USB启动支持
准备安装
- 下载ka1i Linux。
- 将ka1i Linux ISO刻录到DVD或将ka1i Linux Live刻录到USB。
- 确保您的计算机设置为从BIOS中的CD / USB引导。
ka1i Linux安装过程
-
要开始安装,请使用所选的安装介质启动。您应该会看到ka1i Boot屏幕。选择“ 图形安装”。
-
安装步骤与标准ka1i安装相同,不同之处在于您在选择域名的步骤中会暂停,如下所示。
-
出现提示时,请暂停安装并通过“ Ctrl + Alt + 2”切换到第二个VT
按下
enter
以激活该控制台并运行partman
以对硬盘进行分区。 -
首先,我们创建两个分区:swap和root。
manual
在“分区方法”下选择,然后按enter
。 -
选择您的硬盘:
-
确认创建一个新的分区表
-
接下来,选择新定义的“可用空间”:
-
选择
Create a new partition
: -
为交换分区选择所需的大小:
-
选择首选的分区类型:
-
交换分区的位置是个人喜好,我们在此处选择“结束”,以免干扰
-
选择“完成设置分区”:
-
接下来,我们重复该过程以设置maim btrfs分区:
-
让我们创建一个新分区:
-
使用剩余的可用空间:
-
选择“ Primary”作为分区类型:
-
配置以下参数并选择
Done setting up the partition
:Use as: btrfs journaling file system Mount point: / Bootable flag: on
-
完成分区并确认将分区表写入磁盘:
-
我们返回命令行,并可以确认新的btrfs分区已安装在/ target上:
-
接下来,我们创建所需的子卷:
btrfs subvolume create /target/@ btrfs subvolume create /target/@home btrfs subvolume create /target/@log btrfs subvolume create /target/@root btrfs subvolume create /target/@snapshots
-
最后,我们通过以下方式从新的根子卷“ @”中获得子卷ID:
btrfs subvolume list /target
在这里“ 257”-我们将其设置为新的默认值并卸载分区
btrfs subvolume set-default 257 /target umount /target
-
现在可以通过Ctrl + Alt + F5切换回图形化安装并继续安装:
-
当我们进入分区阶段时,只需跳过它并确认我们很高兴使用现有的文件系统:
-
如果愿意,可以切换回VT 2并确认安装程序确实已将我们的“ @”子卷作为安装“ / target”的临时根目录安装:
-
返回到VT 5,我们可以继续安装,直到最后一次暂停时我们到达最后一个屏幕:
-
按下
Ctrl + Alt + F2
我们可以返回到VT2并执行我们的安装后步骤:- 创建临时挂载点
- 安装子卷
-
将“ / home”,“ / var / log”,“ / root”移至其专用子卷:
mkdir /target/mnt/root mkdir /target/mnt/home mkdir /target/mnt/log mkdir /target/.snapshots mount -t btrfs -o subvol=@root /dev/sda2 /target/mnt/root mount -t btrfs -o subvol=@home /dev/sda2 /target/mnt/home mount -t btrfs -o subvol=@log /dev/sda2 /target/mnt/log mv /target/root/.* /target/mnt/root/ mv /target/home/* /target/mnt/home/ mv /target/var/log/* /target/mnt/log/ nano /target/etc/fstab
-
之后,我们可以编辑fstab以通过
nano /target/etc/fstab
以下方式挂载每个子卷:UUID=<UUID of btrfs partition> / btrfs defaults,subvol=@ 0 0 UUID=<UUID of btrfs partition> /home btrfs defaults,subvol=@home 0 0 UUID=<UUID of btrfs partition> /var/log btrfs defaults,subvol=@log 0 0 UUID=<UUID of btrfs partition> /root btrfs defaults,subvol=@root 0 0 UUID=<UUID of btrfs partition> /.snapshots btrfs defaults,subvol=@snapshots 0 0
例如:
-
我们也可以配置 "locate "来忽略snapper使用的.snapshot文件夹(如果后来安装的话) 在/mnt/root/etc/updatedb.conf中添加PRUNENAMES = ".snapshots"。
-
最后一步,我们必须将“默认子卷”重置为5,因为这是“ apt-btrfs-snapshot”正常运行的要求:
-
现在安装已完成,我们可以切换回VT5(
Ctrl + Alt + F5
)并重新启动。 -
重新启动后,我们可以登录并安装更多我们需要的工具。首先让我们安装“ btrfs-progs”:
sudo apt install btrfs-progs
-
现在我们可以从Ubuntu存储库下载并安装“ apt-btrfs-snapshot”工具
wget https://launchpad.net/ubuntu/+archive/primary/+files/apt-btrfs-snapshot_3.5.2_all.deb sudo apt install ./apt-btrfs-snapshot_3.5.2_all.deb
恭喜,您已经安装了具有自动快照功能的ka1i系统!接下来,我们将介绍一些基本用法示例。
用法
创建快照
在apt操作期间会自动创建快照。不需要其他步骤,例如:
列出快照
首先,快照也是子卷,因此在列出btrfs子卷时,所有快照也都会显示,例如通过 sudo btrfs subvolume list /
要仅列出快照,我们可以使用以下命令: sudo apt-btrfs-snapshot list
删除快照
删除快照的最简单方法是使用以下命令: sudo apt-btrfs-snapshot delete
瞧,它不见了:
有删除多个快照的更复杂的方法,例如,以下删除所有早于2天的快照:
sudo apt-btrfs-snapshot delete-older-than 2d
有关“ apt-btrfs-snapshot”的所有不同功能,请参阅帮助输出
回滚
要回滚到先前的快照,我们必须记住两件事:-文件系统的根目录“ /”已安装在子卷“ / @”中,而不是btrfs分区“ /”的根目录中-处理了快照就像另一个子卷
因此,我们要做的就是挂载btrfs分区,并用最后一个快照替换当前的根子卷“ @”。为了安全起见,我们将备份当前根目录(“ @”)子卷。例如:
# mount your root partition (replace "/dev/mmcblk2p2" with yours):
sudo mount /dev/mmcblk2p2 /mnt
# Move the old root away:
sudo mv /mnt/@ /mnt/@_badroot
# Roll back to a previous snapshot:
sudo mv /mnt/@ /mnt/@apt-snapshot-2019-10-13_18:07:40 /mnt/@
sudo reboot -f
从apt全面升级到回滚的完整演练
全面升级
全新安装后,我们还没有任何快照,我们可以通过以下网址查看: sudo apt-btrfs-snapshot list
让我们进行完整的系统升级:
apt update
apt full-upgrade
我们可以观察到在安装任何软件包之前正在创建快照:
完成后,我们可以确认没有更多可用的更新:
如果我们再次列出快照,我们可以看到刚刚创建的快照:
回滚
请记住,“ /”本身就是子卷“ @”。要回滚到快照,我们要做的就是用所需的快照替换“ @”。
-
首先,我们必须通过以下方式挂载btrfs分区:
sudo mount /dev/<your btrfs partition> /mnt
如果我们列出该分区的内容,则可以看到所有子卷,包括快照:
-
在用快照替换当前根之前,为了安全起见,我们将“ @”移开:
sudo mv /mnt/@ /mnt/@_badroot
-
现在,我们可以从上一次升级之前选择快照,并将其重命名为“ @”:
sudo mv /mnt/@apt-snapshot-2019-10-21_23:50:26 /mnt/@
这就是全部,这里是新的“ @”:
让我们重新启动以使回滚生效:
确认回滚有效
重新启动后,我们可以看到快照已消失,因为我们回滚了快照:
如果我们发布另一个“ apt更新”,我们可以看到我们回到了快照之前的状态:
确认系统正常运行后,您可以通过挂载btrfs分区并使用“ btrfs subvolume delete”命令来删除旧的“ root”:
sudo mount /dev/<your btrfs partition> /mnt
sudo btrfs subvolume delete /mnt/@_badroot
参考文献:
Btrfs Wiki, Btrfs Debian site, apt-btrfs-snapshot, Snapper