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