2011-10-22 84 views
0

是否可以將輸出(原始數據,無日誌記錄)管道傳輸到rsync文件,也可以將其保存到bsdiff?我發現rsnapshot對缺乏配置和愚蠢的語法非常惱怒(縮進,wtf?),rdiff有點不穩定。管道rsync輸出到文件

我有一個工作解決方案,其中我rsync所有的數據結束,做一個tar.gz-存檔它和bsdiff生成兩個tar.gz-檔案之間的補丁。但是,這對於巨大的負載和非常密集的磁盤來說都是CPU密集型的,因爲您必須每次創建整個存檔。

概括起來: - 做出初步的rsync - bsdiff這對以前的文件 - 歸檔的方式差異,使其容易恢復

當我寫這個,我只是有一個想法與lvm快照,任何採取我應該如何去與那?

回答

0

rsync(1)當聯繫遠程系統時可以輕鬆使用不同的shell; -e ssh是默認設置,但您可以編寫一個包裝程序,該程序將啓動ssh並將您轉發的所有內容的副本保存到ssh

對於一些僞代碼我所想的:

in[2] = pipe 
out[2] = pipe 
err[2] = pipe 
fork 
if child, fork 
grandparent /* ssh */ 
    close 0, 1, 2 
    dup2 in[0], 0 
    dup2 out[1], 1 
    dup2 err[1], 2 
    close in, out, err 
    exec(ssh, hostname, rsync) -- copy from rsync itself 
parent /* stdin -> pipe */ 
    close in[0], out, err, 1, 2 
    open (log, "/path/to/log", "w") 
    loop forever: 
     read(0, buf) 
     write(in[1], buf) 
     write(log, buf) 
child /* pipe -> stdout, stderr */ 
    close in, out[1], err[1], 0 
    loop forever: 
     read(out[0], bufout) 
     write(1, bufout) 
     read(err[0], buferr) 
     write(2, buferr) 

請仔細檢查實施此之前pipe(2)dup2(2)close(2)電話;我相信我正確地連接了描述符並關閉了每個進程中未使用的描述符,但這有點微妙。

我不知道將結果文件應用到遠程終端的tar包會有多容易,但我希望這不是你卡住的部分。