我剛剛嘗試將一棵大樹從一個磁碟移動到另一個磁碟,但該磁碟太小了。現在,我留下了一些我無法真正理解的東西 - 看起來有些文件確實已從來源樹中移走,而其他文件只是被複製了。這很可能不是真的,我只是忽略了一些東西,就像我在檢查目標磁碟上的可用空間時所做的那樣。 :D
這個指令很簡單mv source-dir destination-dir
,兩個目錄駐留在不同的磁碟上。我在用著mv (GNU coreutils) 7.4
。在手冊頁中我找不到以下問題的答案:
- 可能會建立被截斷的檔案嗎?
- 如果發生錯誤,來源樹中的任何內容都會被刪除嗎?
- 如何恢復(以簡單快速的方式)?
答案1
當 mv 移動到不同的檔案系統時,它首先將所有資料複製到新檔案系統。一旦新資料被複製,舊資料就會被刪除。這意味著如果移動中斷或失敗,來源位置仍應包含所有資料。
至於恢復,只有目標資料應該被損壞。不用再使用 mv,只需使用 rsync,然後手動 rm
rsync -av source-dir/ dest-dir/
rm -rf source-dir
答案2
我認為該頁面的介紹info
回答了您所有的問題:
它首先使用“cp -a”使用的一些相同程式碼來複製請求的目錄和文件,然後(假設複製成功)它刪除原始文件。如果複製失敗,則複製到目標分割區的部分將被刪除。如果要將三個目錄從一個分區複製到另一個分區,並且第一個目錄的複製成功,但第二個目錄沒有成功,則第一個目錄將保留在目標分區上,第二個和第三個目錄將保留在原始分割區上。
恢復應該不成問題,因為資料被保留。我不知道它嘗試了多少原子(mkdir
例如;需要來源檢查)或如果它完全在其網域中(相對於核心的),但是如果在它已經刪除來源時發生中斷,則可能會出現損壞。此時,您已經在目標目錄中擁有了一個良好的副本,因此簡單的位元組大小檢查就可以解決問題。
編輯:我用創建的大文件(幾G)進行了一些測試dd
,但沒有得出結論性的結果。從來沒有成功地只複製了一些源代碼——我要么取消了整個操作(太快了),要么後來由於磁碟緩存和可能良好的文件系統設計而根本沒有機會(我的^C總是在移動成功後落地) )。