我继承了一台 Ubuntu 14.04 生产服务器,需要升级到 20.04,并且我想要一个沙盒版本来首先进行试验,因此我想dump
通过restore
网络从 MacOS 或另一个 14.04 virtualbox 实例连接文件系统。这个问题的早期版本位于https://askubuntu.com/q/1314747/963。
服务器无法“看到”我的机器,因此我无法轻松运行 dump 并将结果远程推送到我的机器,但需要从我的机器调用 ssh 来运行 dump。
ssh -t me@there "echo MYPASSWORD | sudo -S dump -y -f - /boot 2>/dev/null " > boot.dump
\r
问题是我发现运行此命令会在字符前面插入很多字符\n
,这会破坏转储文件,因此restore
无法使用它。我知道这可能是由于驱动程序将换行符转换为打印所需的字符,但我不知道这是在哪里触发的。
我应该如何执行此操作才能获得正确的二进制转储文件?
答案1
这是ONLCR
.c_oflag
termios 设置导致换行符 ( ) 被远程计算机上分配的伪终端\n
转换为回车/换行符 ( ) (因为 ssh 的选项)。\r\n
ssh
-t
使用以下命令将其关闭stty -onlcr
:
ssh -t me@there 'stty -onlcr; ...' > output
答案2
官方的 ASCII 行结束是CR LF
(即,返回到行开头并转到下一行,\r\n
在 C 语言中)。为了减少每行一个字节(当你的内存以 KiB 为单位并且磁盘为几百 MiB 时非常重要),Unix 只是用来\n
标记行结束。一些系统(特别是微软)做过遵循标准,因此在系统之间移动文本文件时,有时您手头有翻译任务。