Linux
傳輸塊設備的內容
出於備份的目的,我想通過 ssh 連結傳輸(幾個)整個磁碟分區。源是塊特殊設備,目標應該是正常文件。但是,通用工具似乎不適合此操作:
scp
會抱怨not a regular file
tar
將嘗試在目標端重新創建設備 inodersync
說skipping non-regular file
我目前最好的選擇是
nc
通過埠轉發,或者cat
每個分區在遠端端進行一次呼叫,這意味著每個分區輸入一個密碼,除非設置公鑰。有沒有更優雅的解決方案?環境可以是任何合理的 Linux 實時系統。目前我碰巧有一個 Debian wheezy,但它不應該太具體。
您可以通過 SSH 進行管道傳輸。使用範例
dd
:dd bs=1M if=/dev/disk | ssh -C target dd bs=1M of=disk.img
如果在傳輸過程中網路連接中斷,如果您知道複製了多少,您可以繼續。例如,如果您確定至少
1000MiB
已經傳輸(檢查文件大小disk.img
):dd bs=1M skip=1000 if=/dev/disk | ssh -C target dd bs=1M seek=1000 of=disk.img
dd
只是一個範例,只要它們與管道一起使用,它就可以與其他命令一起使用。
如果您嘗試通過乙太網連結進行傳輸,我會安裝緩衝區程序(如果您的發行版中還沒有它)。它就像 dd 但 FAR 更好更快。基本上,它被程式為使用共享記憶體緩衝區進行並發讀取和寫入。我曾經將它用於磁帶轉儲,它節省了大約 10% 的傳輸時間。命令行將是:
buffer -i /dev/disk -m 100m | ssh -C target buffer -o disk.image -m 100m
有更多選項可用,預設塊大小為 10K。以上分配了 100MBytes 的共享記憶體,您可能需要調整此參數或您的配置以允許這樣做。
警告:以這種方式傳輸活動分區會出現問題。所以要確保要傳輸的分區沒有掛載。