使用 SquashFS 进行完整系统备份

出自 ArchWiki

此文章或章节需要改进语言、wiki 语法或风格。请参考 Help:Style

原因: 过度针对特定类型的备份(使用整个设备作为目标),读起来像博客文章,内容组织不清晰。(在 Talk:Full system backup with SquashFS 中讨论)

可以使用 SquashFS 格式制作整个文件系统的压缩备份存档。由于其随机访问能力,备份和检索花费的时间相对较少,但是除了附加之外的任何类型的修改目前都是不可能的。

设备文件 描述
/dev/sdB 备份驱动器
/dev/sdL Live 介质
/dev/sdSRC 要备份的驱动器

优点和缺点

优点

  • 无需分区,无需猜测需要多少空间
  • 大多数救援磁盘应支持 SquashFS
  • 随机访问[需要引证],使用简单的 mount
  • 默认删除重复文件(除非启用 -no-duplicates 标志)

缺点

  • 访问控制列表 尚不支持,因此不会备份
  • 无法从 Windows 访问1
  • 可以附加,但无法从中删除内容
  • 要将磁盘用于其他目的,您必须销毁备份2
注意
  1. squashfs-tools-ng 可能支持 SquashFS 镜像文件,但 Windows 本身根本不支持无分区驱动器。
  2. 当您需要 游泳圈 时,不要抓住 救生圈 文件共享和备份应该在不同的磁盘上。请购买足够的备份硬件

准备备份驱动器

警告
  • 备份驱动器上的所有数据都将丢失。
  • 如果指定了错误的设备文件,机器上的所有数据都可能丢失。
  1. 使用 wipefs 清除所有分区 /dev/sdBN,然后清除分区表 /dev/sdB
  2. 同步所有写入缓存 # sync
  3. 通知操作系统分区表更改 # partprobe
  4. 检查坏块

准备 Live 介质

安装指南#准备安装介质archiso 到 /dev/sdL

注意: 创建 SquashFS 文件系统需要 squashfs-tools,它包含在 官方 Arch Linux 安装镜像 中。

备份

安装指南#启动 Live 环境

提示: 如果您没有足够的 USB 端口来连接备份驱动器和 Live 介质
  1. 启动 Live 介质
  2. 当启动加载器菜单出现时,按 'e'
  3. copytoram 附加到 内核参数
  4. # udisksctl power-off -b /dev/sdL (需要带有 udisks2archiso relengpackages.x86_64 中)
  5. 确保 Live 介质停止旋转并断开连接

挂载您要备份的文件系统。(例如,/dev/sdSRC 到 /mnt)

# fsck /dev/sdSRC
# mount -o ro /dev/sdSRC /mnt

备份(示例脚本

警告
  • 备份驱动器上的所有数据都将丢失。
  • 如果指定了错误的设备文件,机器上的所有数据都可能丢失。
# mksquashfs /mnt /dev/sdB \
  -not-reproducible \
  -xattrs \
  -wildcards \
  -noappend \
  -progress \
  -mem 5G \
  -e \
    var/cache/pacman/pkg \
    var/lib/pacman/sync \
    var/log/journal \
    efi \
    boot/grub \
    boot/initramfs-linux"*".img \
    boot/vmlinuz-linux
-not-reproducible
稍微提高备份速度
-noappend
覆盖
-mem
授予 mksquashfs 的 RAM
-e
排除目录/文件列表

(可选)在 QEMU 中测试备份

授予权限

$ sudo chown $USER:$USER /dev/sdB

启动 QEMU

注意: 使用来自宿主机的 内核initramfs
$ qemu-system-x86_64 \
  -kernel /boot/vmlinuz-linux \
  -append "root=/dev/sdB ro loglevel=3 init=/usr/lib/systemd/systemd" \
  -initrd /boot/initramfs-linux-fallback.img \
  -drive file=/dev/sdB,index=0,media=disk,format=raw \
  -m virtual_machine_ram_in_MiB \
  --enable-kvm \
  -cpu host

(可选)检查备份

获取备份日期

# date --date=@"$(unsquashfs -mkfs-time /dev/sdB)"

更多超级块信息

# unsquashfs -stat /dev/sdB

校验和

此文章或章节的事实准确性存在争议。

原因: unsquashfs -statdf 给出不同的大小(在 Talk:Full system backup with SquashFS 中讨论)
# COUNT="$(unsquashfs -stat /dev/sdB | grep -F 'Filesystem size' | cut -d' ' -f3)"
# echo "$COUNT Byte"
# numfmt --to=iec-i "$COUNT"
# head -c "$COUNT" /dev/sdB | sha1sum | tee -a sha1sum.txt

从备份中检索文件

# mount /dev/sdB /mnt
# cp /mnt/path/to/file /path/to/destination

恢复备份

此文章或章节需要扩充。

原因: 添加 unsquashfs 单行命令(在 Talk:Full system backup with SquashFS 中讨论)
注意

使系统在恢复后可启动