FreeBSD转储cURL / rsync

我试图创build一个使用FreeBSD的转储备份脚本来创build一个文件系统的快照,而不是将快照存储在磁盘上,我想将转储的输出stream入cURL或rsync,以便远程存储它。 我已经通过SSHpipe道输出到远程端,但是我需要使用cURL或rsync出于安全原因。

我已经尝试了许多不同的命令行参数:

dump -0u -a -L -f - /dev/ad0b | curl -v --data @- http://1.2.3.4/ dump -0u -a -L -P "curl -v --data - http://1.2.3.4/" /dev/ad0b dump -0u -a -L -P "rsync --progress --stats rsync://1.2.3.4/backup" /dev/ad0b 

不pipe我做什么,我要么得到一个坏的pipe道,要么只是没有数据通过。

我可以手动将其转储到一个文件,然后通过cURL或rsync上传,但这打破了我想要做的目的。

任何帮助或指针将是真棒。

你的两个curl尝试的基本方法看起来不错。 但是,您的转储是二进制数据,所以 – 数据是错误的(数据将被损坏)。 根据你的networking服务器的期望,你可能会有更多的运气

  • curl -v --data-urlencode @- http://1.2.3.4/ ,如果预期的格式是URL编码的数据。
  • curl -v --data-binary -H 'Content-Type: octet/stream' @- http://1.2.3.4/ ,如果期望的格式是原始的二进制数据。
  • curl -v -F "mydump=@-" http://1.2.3.4/ ,如果预期的格式是表单。

这一切都取决于HTTP服务器的期望。 检查您正在使用的任何CGI的文档(如果需要帮助,请在此处张贴)。

如果在1.2.3.4上侦听的服务器期望原始数据而不是HTTP POST请求,那么curl是错误的工具(当然, http也是错误的)。 Netcat是将数据传输到TCP套接字的最stream行工具: nc 1.2.3.4 5678

Rsync不太可能工作。 rsync的主要目的是只复制两边文件不一样的部分,这就需要在源文件和目标文件中寻找很多东西。 此外,rsync被devise为处理文件的层次结构,而不是单个文件。 编写一个总是复制整个文件的rsync客户端在技术上是可能的,所以不需要查找源数据,但是这是一个不寻常的需求,我怀疑是否存在。