Data-Recovery

恢復已刪除的 nginx 配置版本

  • July 23, 2020

我將以下錯誤的 Sed 命令應用於我的 nginx 配置:

sed 's/php7.2-fpm/php7.4-fpm/g' /etc/nginx/sites-enabled/default > /etc/nginx/sites-enabled/default

整個文件都不見了。我沒有備份。

有沒有辦法恢復原始文件?重新配置一切需要我幾天的時間。

探索正在執行的 Nginx 程序

如果 Nginx 仍在執行(不要重新啟動它!),您可以要求它轉儲其配置。我沒有使用 Nginx 的經驗,所以這只是我在網上閱讀的內容,我不知道您可以通過這種方式恢復多少資訊,或者如果您嘗試一下可能會出現什麼問題。

/usr/sbin/nginx -c /some/other/config -T

在舊版本上,您可以嘗試以硬方式從正在執行的程序中轉儲配置。我不知道這可能有多難,也不知道在伺服器執行一段時間後是否有希望讀取配置文件。

即使配置文件的原始文本不再可用,您也可以以內部二進製表示形式轉儲配置資訊。你至少有配置,但沒有評論。

尋找已刪除的文件

刪除的內容會保留在磁碟上,直到被覆蓋。但找到它可能非常困難。包含已刪除內容的磁碟塊立即可供重用,並且沒有特殊原因會在新刪除的塊之前覆蓋長期刪除的塊。所以不要抱太大希望。

不抱希望的另一個原因是您可能會找到許多舊文件副本。如果文件大於文件系統塊(通常為 4kB,但取決於文件​​系統和配置),則可能很難或不可能將單個版本的各個部分拼湊在一起。但是你能找到一些東西的機會很小。

確保不再寫入磁碟。理想情況下,您應該以只讀方式掛載文件系統。該命令mount -o remount,ro /執行此操作,但它僅在沒有文件打開以供寫入時才有效,因此例如,如果/var/log/etc. 您可能需要關閉日誌服務以避免日誌覆蓋新刪除的文件。你可能不得不強迫這個問題。如果您決定不強制執行,請非常小心,盡可能避免書寫。如果您需要安裝新軟體,請確保寫入其他文件系統。如果您恢復了一些東西,請將它們寫入其他文件系統。

恢復文件很困難。這是一種絕望的行為。如果你真的需要這樣做,我建議從Arch Wiki 指南開始(即使你沒有執行 Arch Linux,Arch wiki 也有很好的資訊)。

防止未來發生類似事件

  1. 進行備份
  2. 將配置文件置於版本控制之下。我在我維護的所有 Linux 機器上都使用etckeeper /etc如果您不遵守送出規則,請啟動每日自動送出。除了儲存舊版本的副本外,它還讓您有機會記錄您做出更改的原因。

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