0
假设你运行下面的命令:数据完整性问题
ssh $host1 'while [ 1 ]; do sleep 1; echo "Hello from $HOSTNAME"; done' > /tmp/output ssh $host2 'while [ 1 ]; do sleep 1; echo "Hello from $HOSTNAME"; done' >> /tmp/output ssh $host3 'while [ 1 ]; do sleep 1; echo "Hello from $HOSTNAME"; done' >> /tmp/output
然后输出将如下所示:
Hello from host1 Hello from host2 Hello from host3 Hello from host1 ...
但如果我把它改成
ssh $host1 'while [ 1 ]; do sleep 1; cat /some/large/file1.txt; done' > /tmp/output ssh $host2 'while [ 1 ]; do sleep 1; cat /some/large/file2.txt; done' >> /tmp/output ssh $host3 'while [ 1 ]; do sleep 1; cat /some/large/file3.txt; done' >> /tmp/output
这样每个主机的标准输出将不适合单个缓冲区?在这种情况下,数据 文件[1-3] .txt的完整性,而不是顺序,将保持吗? 有可能是其他文件的文件片段在这样的其他文件的中间 中滑动?
[file1_fragment1] [file2_fragment1] [file1_fragment2] [file1_fragment3] [file3_fragment1] ...
因此,只有主机的缓冲区大小(或本地主机,如果本地主机的缓冲区大小较小)才能保持数据完整性?你从哪里获得缓冲区大小信息? – OTZ 2010-08-10 00:09:35
不知道,尽管你可以轻松地运行一些测试来找出答案。 (创建一个由所有A组成的文件,所有B中另一个,所有C中另一个C的文件,并在你的例子中使用它)不过,它不仅取决于缓冲区的大小,有时在写入换行符时刷新数据,因此数据完整性只能在“逐行保证”的基础上进行。 – 2010-08-10 00:37:42
当然..我写了我的实验,显示“数据完整性不保留在这种情况下”,但我点击了一个链接在页面上消除它。细节很有趣,特别是第一个4MB(来自一个远程的2MB,其他的2MB)在没有任何数据混合的情况下被收到。 – OTZ 2010-08-10 02:06:34