Backup
在更新源目錄時使用 tar 是否安全?
我不得不問類似的問題。
tar
在您使用和備份目錄的情況下
- 正在添加新文件/目錄
- 目前文件/目錄正在被編輯和刪除
你能期待安全的結果嗎?
通過安全的結果,我的意思是:
tar
不會在源目錄/子目錄上搞砸tar
將添加到存檔中,因為它在建構存檔的那一刻發現- 即使發生了描述的更改,也會發出成功信號
- tar 不會搞砸源目錄/子目錄
沒錯,除非你把更新訪問時間算作搞砸了。除此之外, tar 不會更改原始碼樹中的任何內容。
- tar 將添加到存檔中,因為它在建構存檔的那一刻發現
確實,對於“當下”的某些價值。如果 tar 在讀取原始碼樹時發生更改,則存檔中包含的內容有些不可預測。特別是,如果在 tar 讀取文件時文件發生更改,則無法保證 tar 會及時寫入文件的副本。例如,可能有:
- tar 讀取
foo
.- 一些程序寫入
foo
,在一次寫入操作中更改字節 4095–4096。- tar 讀取
foo
.那麼
foo
存檔中的內容既不是舊內容也不是新內容,是兩者的混合。另一個例子是,如果在 tar 正在讀取原始碼樹時重命名文件,則 tar 可能會完全跳過它。
- 即使發生了描述的更改,也會發出成功信號
不,不一定。如果 tar 在讀取時檢測到源已更改,它可能會抱怨並返回失敗狀態。特別是 tar 需要在寫入內容之前將文件的大小寫入存檔,因此它首先讀取每個源文件的大小。如果它在達到記錄大小之前到達文件末尾,則沒有明顯的恢復方法,因此任何 tar 實現至少在這種情況下都應該抱怨。
要安全地進行備份,請使用文件系統級或卷級工具製作快照,然備份份快照。
不。
- 如果在 tar 掃描目錄後添加文件,則不會添加該文件。
- 如果文件已添加到存檔但您在磁碟上將其刪除,則不會從存檔中刪除該文件。
- 如果您更改內容,這也適用。
Unix(不是 tar)會做的一件事:
- 如果在 tar 收集文件時打開(用於編輯)文件,您將不知道 tar 將使用哪個版本的文件(記憶體中、磁碟上的文件或兩者的混合)。
請記住,您可以使用 tar 讀取或寫入管道(實際上t in
tar
表示磁帶,當世界還很年輕時),所以 tar
- 一口氣寫完
- 不會倒帶輸出
以上是基本的
tar -c
。
tar -u
將添加新文件。- 如果 tar 到一個文件,shell
tar --diff
和tar --delete
可能用於同步 tar 文件和目錄的組合。