![如何使用 tar --one-file-system 包含或添加 /dev](https://linux22.com/image/3457/%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8%20tar%20--one-file-system%20%E5%8C%85%E5%90%AB%E6%88%96%E6%B7%BB%E5%8A%A0%20%2Fdev.png)
我正在使用以下命令在完整的远程文件系统上运行 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 的参数。