Backup

在更新源目錄時使用 tar 是否安全?

  • December 26, 2018

我不得不問類似的問題

tar在您使用和備份目錄的情況下

  1. 正在添加新文件/目錄
  2. 目前文件/目錄正在被編輯刪除

你能期待安全的結果嗎?

通過安全的結果,我的意思是:

  1. tar不會在源目錄/子目錄上搞砸
  2. tar將添加到存檔中,因為它在建構存檔的那一刻發現
  3. 即使發生了描述的更改,也會發出成功信號
  1. tar 不會搞砸源目錄/子目錄

沒錯,除非你把更新訪問時間算作搞砸了。除此之外, tar 不會更改原始碼樹中的任何內容。

  1. tar 將添加到存檔中,因為它在建構存檔的那一刻發現

確實,對於“當下”的某些價值。如果 tar 在讀取原始碼樹時發生更改,則存檔中包含的內容有些不可預測。特別是,如果在 tar 讀取文件時文件發生更改,則無法保證 tar 會及時寫入文件的副本。例如,可能有:

  • tar 讀取foo.
  • 一些程序寫入foo,在一次寫入操作中更改字節 4095–4096。
  • tar 讀取foo.

那麼foo存檔中的內容既不是舊內容也不是新內容,是兩者的混合。另一個例子是,如果在 tar 正在讀取原始碼樹時重命名文件,則 tar 可能會完全跳過它。

  1. 即使發生了描述的更改,也會發出成功信號

不,不一定。如果 tar 在讀取時檢測到源已更改,它可能會抱怨並返回失敗狀態。特別是 tar 需要在寫入內容之前將文件的大小寫入存檔,因此它首先讀取每個源文件的大小。如果它在達到記錄大小之前到達文件末尾,則沒有明顯的恢復方法,因此任何 tar 實現至少在這種情況下都應該抱怨。

要安全地進行備份,請使用文件系統級或卷級工具製作快照,然備份份快照。

不。

  • 如果在 tar 掃描目錄後添加文件,則不會添加該文件。
  • 如果文件已添加到存檔但您在磁碟上將其刪除,則不會從存檔中刪除該文件。
  • 如果您更改內容,這也適用。

Unix(不是 tar)會做的一件事:

  • 如果在 tar 收集文件時打開(用於編輯)文件,您將不知道 tar 將使用哪個版本的文件(記憶體中、磁碟上的文件或兩者的混合)。

請記住,您可以使用 tar 讀取或寫入管道(實際上t intar表示磁帶,當世界還很年輕時),所以 tar

  • 一口氣寫完
  • 不會倒帶輸出

以上是基本的tar -c

  • tar -u將添加新文件。
  • 如果 tar 到一個文件,shelltar --difftar --delete可能用於同步 tar 文件和目錄的組合。

引用自:https://unix.stackexchange.com/questions/333975