前几天小山尝试更换 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 拥有相同的的参数,并且对特殊文件属性有完整的支持,以及更好的稀疏文件处理。
接下来简单介绍一下如何使用 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 群与我交流。
微信扫描二维码关注我们
如果觉得文章有帮助到你,可以点击下方的打赏按钮赞助下服务器费用。
文章评论
有用,学习了。