使用 bsdtar 完整备份/还原 Linux 系统

2021-08-09 941点热度 1条评论

前几天小山尝试更换 Linux 的系统分区格式,因为要格式化系统分区,所以要备份系统分区的现有文件,Linux 下的备份工具是不少,但是对于备份系统可选择的还真没几个,而且还要使备份工具在救援环境中可用,于是我选择了 tar 。

tar 是 Linux 系统非常经典的一个工具,它可以将一个或多个文件打包成 tar 文件,并且支持使用其他压缩工具对 tar 文件进行压缩(tar 文件本身无任何压缩),同时它能保留 Linux 的文件权限等信息,用来备份/还原系统再合适不过了。

但是使用 tar 还原系统之后,小山发现了一个问题,某些文件的特殊权限消失了,可我在备份/还原的时候明明使用了--xattrs参数,理论上它应该会保存特殊文件权限,但是并没有。当我在网上搜索过后发现,这是 GNU tar 的一个错误:特殊属性的支持不完整,导致当前版本的 GNU tar 并不能很好的处理特殊属性(即使--xattrs-include=*)。

难道就没有办法完整的备份系统了吗?其实不然,很多小伙伴可能见过bsdtar,bsdtar 是 libarchive 捆绑的 tar 实现,正如它的名字一样,一些 BSD 系统确实使用 libarchive 作为其 tar 实现,Linux 下的很多工具也使用 bsdtar 对 tar 文件进行操作,而不是 GNU tar。bsdtar 几乎与 GNU tar 拥有相同的的参数,并且对特殊文件属性有完整的支持,以及更好的稀疏文件处理。

Backup

接下来简单介绍一下如何使用 bsdtar 备份/还原 Linux 系统,过程中会用到 ArchLinux 的安装镜像,因为它默认附带 bsdtar,可以前往 https://mirrors.kernel.org/archlinux/iso/latest/ 获取最新的 ArchLinux 安装镜像。

PS:你也可以使用其他系统的安装镜像或 Live 镜像,不过它们可能需要手动安装 bsdtar。

推荐备份系统之前清理下系统无用的文件(缓存、日志、临时文件等),以便加速备份速度。

首先把 ArchLinux 安装镜像写入到 U 盘并启动,这一步我就不多说了,不会的小伙伴可以查看 ArchLinux 安装教程的步骤。

安装镜像启动成功后,挂载需要备份/还原的分区,比如:系统分区、引导分区、Home 分区等。

挂载分区示例命令:mount /dev/sda1 /mnt/root/dev/sda1是分区路径,/mnt/root是分区挂载路径。

分区挂载完成后,就可以使用bsdtar备份/还原系统了。

下列命令务必以 root 权限执行,以及把${mountPath}替换为你的分区挂载路径,${tarPath}替换为 tar 文件存放目录,推荐放在其他分区。

备份命令:bsdtar -c -f ${tarPath}/linux-backup.tar -C ${mountPath} -v -B .

还原命令:bsdtar -x -f ${tarPath}/linux-backup.tar -C ${mountPath} -v

命令参数说明:

# -C : 进行操作之前更改当前位置到指定路径
# -f : 存档文件路径
# -v : 详细输出模式 (省略可加快 bsdtar 执行)

# 仅备份
# -B : 不兼容其他 tar 实现
# -c : 创建存档文件
#  . : 这个点代表当前目录

# 仅还原
# -x : 释放存档文件

# 你可以指定参数 -a,然后更改存档文件的后缀名为支持的压缩格式后缀名,bsdtar 会使用对应工具对存档文件进行压缩和解压,如果后缀名是未知的,默认使用 bzip2。
# 比如把存档文件名更改为 linux-backup.tar.gz,bsdtar 会使用 gzip 对存档文件进行压缩和解压。
# 如果使用了压缩,bsdtar 执行将需要更多的时间。

# 因为是以 root 权限执行,所以 bsdtar 默认会存储和释放文件权限等信息,不需要额外的参数。

更多参数:https://man.archlinux.org/man/core/libarchive/bsdtar.1.en

如果你更换了硬盘或对引导分区进行了修改,那么还原系统后可能需要重建引导,最简单的方法就是重新安装引导管理程序(可能需要对应系统的安装镜像)。


如果你在操作的过程中遇到了问题,欢迎加入 QQ 群与我交流。

微信公众号二维码

微信扫描二维码关注我们

如果觉得文章有帮助到你,可以点击下方的打赏按钮赞助下服务器费用。

小山

一个什么都不会但要装作很厉害的人

文章评论

  • 巡视官

    有用,学习了。

    2021-09-04
  • 此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据