文件更改時“拆分”的硬連結
是否有可能(在經典的 ext4 和/或任何其他文件系統中)創建兩個指向相同內容的文件,這樣如果一個文件被修改,內容被複製並且兩個文件變得不同?節省硬碟空間非常實用。
**背景:**我在自己的雲伺服器上分享了一些重要的影片,可以被很多人修改,因此可能有些人修改/刪除這些文件……我真的很想確保我有備份這些文件,因此我現在需要維護兩個目錄,一個正常的 nextcloud 一個,一個“備份”目錄,它(至少)是儲存它所需大小的兩倍。
我想在 nextcloud 目錄上創建一個很棒的 git repo,當添加新影片時,它使備份過程變得更加容易(只是
git add .
),但git
仍然是 blob 和工作目錄之間的空間的兩倍。理想情況下,可以與 git 結合使用的解決方案會很棒(即,它允許我創建影片更改的歷史記錄,包括送出、簽出……而不會使磁碟空間增加一倍。
此外,我很好奇有各種文件系統的解決方案(特別是如果你有不實現快照的文件系統的技巧)。請注意,LVM 快照並不是真正的解決方案,因為我不想備份我的完整捲,只備份一些特定的文件/文件夾。
謝謝!
在寫時復製文件系統(Btrfs、ZFS)上是。git-annex與您在 ext4 上可能獲得的一樣接近。請注意,您可以
mount --bind
在另一個文件系統中的文件夾上使用 LVM 支持的捲或 Btrfs 文件系統。
是否有可能(在經典的 ext4 和/或任何其他文件系統中)創建兩個指向相同內容的文件,這樣如果一個文件被修改,內容被複製並且兩個文件變得不同?節省硬碟空間非常實用。
硬連結可以做到這一點,前提是任何編輯文件的人都通過創建一個新文件並在原始文件之上重命名它來完成它。這會破壞連結,因為新文件只連結到一個名稱,而另一個連結會被重寫覆蓋。
問題是,通常很難知道程序是否會覆蓋同一個 inode 中的數據,或者是否會在保存時創建一個新文件。
將“備份副本”設為只讀可能會有所幫助,因為它們無法修改,但仍可以刪除連結並重新創建相同的名稱。但是當程序無法寫入該 inode 時,這可能會導致很多錯誤。
因此,在我看來,通過硬連結進行文件級重複數據刪除是可能的,但前提是您控制寫入連結的程序。