当我开始在 Linux Mint 上使用 Timeshift 时,我发现可以在 上进行备份btrfs
,但是有一些要求:Linux 系统也必须安装在 btrfs 上(我认为也必须安装在@
子卷中)。那不是我的情况,我正在使用ext4
.所以我不得不使用rsync
方法,但这需要花费时间年龄做备份。
我开始搜索教程,但只找到了有关 btrfs 快照的一般文章,但没有找到例行备份命令在一个现实世界环境。经过几次测试后我明白了即使您的系统安装在 ext4 上,如何在外部 Btrfs 驱动器上制作 Btrfs 快照(或其他什么),我决定在 linux & unix stackexchange 上分享答案。
答案1
设置
假设这/media/myuser/btrbaks
是外部驱动器上的 btrfs 分区的挂载点(有关分区和挂载的详细信息,请参阅末尾),这里的命令仅在第一次启动。
为备份创建一个目录:
sudo mkdir /media/myuser/btrbaks/BACKUPS
创建一个 @ 子卷,它将作为 rsync 命令的目标
sudo btrfs subvolume create /media/myuser/btrbaks/BACKUPS/@
日常备份命令
这里是每次备份都必须启动的命令
同步:
sudo rsync -aAXv --delete --exclude=/dev/* --exclude=/proc/* --exclude=/sys/* --exclude=/tmp/* --exclude=/run/* --exclude=/mnt/* --exclude=/media/* --exclude="swapfile" --exclude="lost+found" --exclude=/home/* --exclude=/root/* / /media/myuser/btrbaks/BACKUPS/@/
Btrfs 快照:
sudo btrfs subvolume snapshot /media/myuser/btrbaks/BACKUPS/@ /media/myuser/btrbaks/BACKUPS/@_bak_`date +%Y.%m.%d_%H.%M.%S`
然后你可以检查:
sudo btrfs subvolume list /media/attilio/btrbaks/
ID 279 gen 109 top level 5 path BACKUPS/@
ID 280 gen 109 top level 5 path BACKUPS/@_bak_2020.09.14_08.12.2
正在恢复
如果您的系统启动,您可以使用以下命令进行恢复:
sudo rsync -aAXv --dry-run --delete --exclude=/dev/* --exclude=/proc/* --exclude=/sys/* --exclude=/tmp/* --exclude=/run/* --exclude=/mnt/* --exclude=/media/* --exclude="swapfile" --exclude="lost+found" --exclude=/home/* --exclude=/root/* /media/attilio/btrbaks/BACKUPS/@/ /
请记住删除--dry-run
执行真正还原的选项。
由于@
指向您的最后一个备份,您可以使用@_bak_2020.09.14_08.12.22
或任何快照更改它。
如果您的系统无法启动,您可以从实时 USB 启动并执行相同的命令,更改 rsync<source>
和<destination>
关于分区和挂载的注意事项
这是我的硬件配置:
/dev/sda5 ext4 / # system installation
/dev/sdb3 btrfs /media/myuser/btrbaks # external drive has several partitions, one is btrfs and here is the mount point that is automatically assigned by linux mint
答案2
您还可以将 ext4 转换为 btrfs,而无需重新安装。快照和实时系统现在都使用相同的分区。
- 优点:速度更快,所需磁盘空间更少
- 缺点:当磁盘损坏时,您也会丢失快照。这可以通过以下任一方式来应对:
- 结合这两种方法。 (在timeshift中使用btrfs快照并使用rsync将选定的快照移动到另一个磁盘)
- 使用 RAID(btrfs 本身可以用于 RAID,尽管通常的方法也同样有效)
转换涉及多个步骤:
笔记:首先在虚拟机中进行测试。我还没有,我可能忘记了一些事情。
- 从实时 USB 记忆棒(例如您用于安装 Mint 的 USB 记忆棒)启动并在新终端中成为 root 用户
sudo -i
- 将您的 ext4 转换为 btrfs:(
btrfs-convert /dev/sda1
假设/dev/sda1
是您的分区) - 安装它以便您可以开始“工作”:
mount /dev/sda1 /mnt
- 确保根文件系统位于名为 的子卷中
@
:btrfs sub snap /mnt /mnt/@
- 为您的主目录创建一个单独的目录:
btrfs sub create /mnt/@home && rsync -HAXav /mnt/home/ /mnt/@/home/
- 搜索分区的 UUID:
ls -l /dev/disk/by-uuid | grep sda1
/
将安装的线替换/mnt/@/etc/fstab
为 2 条线:
UUID=xxxxxxxx-xxxx-xxxx-xxxxxxxx / btrfs 默认值,subvol=@ 0 1 UUID=xxxxxxxx-xxxx-xxxx-xxxxxxxx /home btrfs 默认值,subvol=@home 0 2
并改变(xxxxxxxx-xxxx-xxxx-xxxxxxxx
按你的真实情况UUID
)。
- 在同一文件中删除提到交换的行
linux
将包含in的第一行更改/mnt/boot/grub/grub.cfg
为linux /@/boot/vmlinuz-YYYY root=UUID=XXXX ro rootflags=subvol=@
(使用YYYY
它最初具有的 kernelversion 和XXXX
您的UUID
)并运行cp /mnt/boot/grub/grub.cfg /mnt/@/boot/grub/grub.cfg
- 重新启动系统并以 root 身份继续:
sudo -i
@
仅保留您和子卷中的数据@home
:mkdir /mnt/fullbtrfs && mount /dev/sda1 /mnt/fullbtrfs && rm -rf /mnt/fullbtrfs/[a-z]* && umount /mnt/fullbtrfs
- 更正 grub 配置的其余部分(几个步骤前我们只做了必要的事情):
update-grub
- 再次重新启动,并将时移配置更改为 btrfs