Git

如何以相當快的速度粉碎 git 儲存庫?

  • July 9, 2014

我有興趣在合理的時間內準確刪除 git 儲存庫。

但這樣做需要相當長的時間。在這裡,我有一個小型測試儲存庫,其中的.git文件夾小於 5MiB。

$ du -ac ~/tmp/.git | tail -1
4772    total
$ find ~/tmp/.git -type f | wc -l
991

使用shred的預設選項,這需要很長時間。在下一個命令中,我--force用來更改權限並--zero在粉碎後用零覆蓋。預設粉碎方法是用隨機數據覆蓋 3 次 ( -n3)。

之後我也想刪除文件。根據man shred--remove=wipesync(預設值,何時--remove使用)僅對目錄進行操作,但這似乎讓我慢了下來,即使我只對文件進行操作。比較(每次我重新初始化 git repo):

$ time find ~/tmp/.git -type f | xargs shred --force --zero --remove=wipesync
real    8m18.626s
user    0m0.097s
sys     0m1.113s

$ time find ~/tmp/.git -type f | xargs shred --force --zero --remove=wipe
real    0m45.224s
user    0m0.057s
sys     0m0.473s


$ time find ~/tmp/.git -type f | xargs shred --force --zero -n1 --remove=wipe
real    0m33.605s
user    0m0.030s
sys     0m0.110s

有更好的方法嗎?


*編輯:*是的,加密是關鍵。我現在只是使用-n0.

time find ~/tmp/.git -type f | xargs shred --force --zero -n0 --remove=wipe    
real 0m32.907s
user 0m0.020s
sys     0m0.333s

使用 64 並行shreds

time find ~/tmp/.git -type f | parallel -j64 shred --force --zero -n0 --remove=wipe
real    0m3.257s
user    0m1.067s
sys     0m1.043s

算了shred,它會花很多時間做無用的事情,而忽略了本質。

shred通過使用隨機數據多次覆蓋文件來擦除文件(“Gutmann 擦除”),因為使用 20-30 年前的磁碟技術和一些昂貴的實驗室設備,有可能(至少在理論上)恢復被覆蓋的數據. 現代磁碟技術不再是這種情況:用零覆蓋一次也一樣好——但多次隨機傳遞的想法在它過時後仍然存在。請參閱https://security.stackexchange.com/questions/10464/why-is-writing-zeros-or-random-data-over-a-hard-drive-multiple-times-better-th

另一方面,shred擦除敏感資訊完全失敗,因為它只擦除被告知要擦除的文件中的數據。任何儲存在以前擦除的文件中的數據仍然可以通過直接訪問磁碟而不是通過文件系統來恢復。來自 git 樹的數據可能不太容易重建;然而,這是一個現實的威脅。

為了能夠快速擦除某些數據,請對其進行加密。您可以使用ecryptfs(主目錄加密)或encfs(目錄樹加密)或dm-crypt(整個分區加密)或任何其他方法。要擦除數據,只需擦除密鑰。

另請參閱如何確定目錄或文件已被實際刪除?

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