如何使用 tar --one-file-system 包含或添加 /dev

如何使用 tar --one-file-system 包含或添加 /dev

我正在使用以下命令在完整的远程文件系统上运行 tar

ssh -n <hostname> 'sudo tar -cpvzf - --one-file-system /' | cat > Bak.tar.gz

这给了我一个 tarball。我尝试将此 tarball 导入到我正在使用的另一个服务中,但遇到了问题,因为它似乎不包含目录/dev。我想知道我是否可以在初始焦油之后--include="/dev"执行类似的操作。/dev这里需要一些指导。

答案1

您可能只需将其添加到要包含的路径名中即可。

tar -cf - --one-file-system / /dev/

然而,这通常根本不是您真正想要的,因为动态/dev会包含太多完全错误或不相关的设备节点。

更好的方法(更好的是实际上获得原始根文件系统的完整副本,包括其他挂载隐藏的文件)是创建文件系统的另一个挂载,该文件系统不会被子挂载阻碍,等等tar

这样您就可以获得/dev/实际存储在根文件系统上的(以及其他所有内容)。这通常应该只包括最初在安装时创建的一组标准节点,并且仅在启动时需要,直到系统在其之上/dev设置动态。/dev/

mkdir /mnt/root
mount --bind / /mnt/root
cd /mnt/root
tar -cpvzf - .
cd /
umount /mnt/root

正如mount联机帮助页所述,绑定挂载调用仅附加(部分)单个文件系统,而不是可能的子挂载。这就是--one-file-system不再需要的原因:此结构下没有其他文件系统。

答案2

只需添加/dev到要存档的文件列表中即可:

ssh -n <hostname> sudo tar -cpvzf - --one-file-system / /dev > Bak.tar.gz

--one-file-system仅防止递归到不同文件系统上的目录。您仍然可以直接列出不同文件系统上的文件/目录作为 tar 的参数。

相关内容