服务器上的 ssh+sudo+dump 无法在本地恢复

服务器上的 ssh+sudo+dump 无法在本地恢复

我继承了一台 Ubuntu 14.04 服务器,我需要在 VirtualBox 中本地创建一个沙盒副本来进行实验,作为升级到 Ubuntu 20.04 的准备工作的一部分,因为我们强烈怀疑这不是一个直接的更新。

为了实现这一点,我希望对服务器文件系统进行完整备份,以便在空白虚拟机中恢复,对于 ext4,我通常会将其dump作为服务器上的 root 复制到一个文件,然后将该文件复制到本地restore。不幸的是,服务器上没有空间来保存根文件系统的最终文件。

因此,我尝试通过 ssh 连接转储到标准输出并在本地捕获输出,类似于:

ssh -t me@there "echo MYPASSWORD | sudo -S dump -y -f - /boot 2>/dev/null " > boot.dump 

(标准错误重定向是为了避免转储消息混合到转储文件中)

不幸的是restore(在 14.04 下也是如此)不喜欢这个转储文件,因为它的校验不通过。如果我在服务器上创建转储文件并复制它,那就没问题了。

网络上的大多数资源都在同一台机器上运行 ssh 命令和 dump 命令,因此文件描述符不会混合在一起。

有什么建议么?


编辑:对/boot文件系统进行的一些实验表明,dump 直接创建的文件为 125932218 字节,而 ssh 命令创建的文件为 125465751 字节,相差约 466000 字节 - 使用https://stackoverflow.com/a/31417454/53897 - 似乎是\r字符 (0d hex) 插入到字符 (0a hex) 前面\n。因此,这与额外的消息被悄悄地合并到数据流中无关,而是与二进制不干净有关。很有趣。

答案1

我问了“为什么插入 \r”的问题https://unix.stackexchange.com/q/633543/4869很快有人指出,这是分配的伪终端的一个功能,-t然后需要再次关闭。有关详细信息,请参阅该问题。

相关内容