我正在尝试使用FreeBSD的转储创建一个备份脚本,以获取文件系统的快照,但我不想将快照存储在磁盘上,而是将转储输出传输到cURL或rsync,以便将其远程存储。我已经让它通过SSH连接到远程端,但是出于安全原因,我需要使用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
无论我做什么,我要么得到一个坏的管道,或只是没有数据通过。
我可以手动将其转储到一个文件中,然后通过cURL或rsync上传它,但这违背了我所要做的工作的目的。
任何帮助或指示都会很棒。
发布于 2011-06-17 11:20:59
您的两次curl
尝试中的任何一次尝试的基本方法看起来都不错。但是转储是二进制数据,所以--data
是错误的(数据将被破坏)。取决于您的web服务器所期望的是什么,您可能会有更多的运气
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请求,那么curl
是错误的工具(当然,http
也是错误的)。网猫是最流行的将数据导入TCP套接字的工具:nc 1.2.3.4 5678
。
Rsync不太可能起作用。rsync的主要目的是只复制文件双方不相同的部分,这需要在源文件和目标文件中进行大量查找。此外,rsync设计用于处理文件的层次结构,而不是单个文件。从技术上讲,可以编写一个rsync客户端,它总是复制整个文件,因此不需要查找源数据,但这是一个非常不寻常的需求,因此我怀疑它是否存在。
https://serverfault.com/questions/281341
复制