设置

设置

当我开始在 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,尽管通常的方法也同样有效)

转换涉及多个步骤:
笔记:首先在虚拟机中进行测试。我还没有,我可能忘记了一些事情。

  1. 从实时 USB 记忆棒(例如您用于安装 Mint 的 USB 记忆棒)启动并在新终端中成为 root 用户sudo -i
  2. 将您的 ext4 转换为 btrfs:(btrfs-convert /dev/sda1假设/dev/sda1是您的分区)
  3. 安装它以便您可以开始“工作”:mount /dev/sda1 /mnt
  4. 确保根文件系统位于名为 的子卷中@btrfs sub snap /mnt /mnt/@
  5. 为您的主目录创建一个单独的目录:btrfs sub create /mnt/@home && rsync -HAXav /mnt/home/ /mnt/@/home/
  6. 搜索分区的 UUID:ls -l /dev/disk/by-uuid | grep sda1
  7. /将安装的线替换/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)。

  1. 在同一文件中删除提到交换的行
  2. 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
  3. 重新启动系统并以 root 身份继续:sudo -i
  4. @仅保留您和子卷中的数据@homemkdir /mnt/fullbtrfs && mount /dev/sda1 /mnt/fullbtrfs && rm -rf /mnt/fullbtrfs/[a-z]* && umount /mnt/fullbtrfs
  5. 更正 grub 配置的其余部分(几个步骤前我们只做了必要的事情):update-grub
  6. 再次重新启动,并将时移配置更改为 btrfs

相关内容