
在發生意外斷電(或 VM 主機故障)時,檢查潛在 Linux 作業系統損壞/從中復原的最佳實務步驟是什麼?
當然,它「取決於」安裝和設置,但我正在尋找對大多數 Linux 作業系統(Debian、Ubuntu、Mint 等)和檔案系統(XFS、ZFS、EXT4、vfat)執行的常見操作/檢查。
這並不是為了防止非正常關閉 - 而是為了在發生此類情況時進行處理並嘗試確保最佳情況下的恢復。
我知道作業系統傾向於檢測檔案系統何時未卸載(就像在正常關閉期間一樣),因此在啟動時自動執行檢查,但這些檢查是什麼以及如何手動執行它們?
例如,e2fsck -f
就是這樣一種工具,但對於新手來說,什麼時候可以/應該使用它,什麼時候不可以(或它不起作用)?
例如,在 Windows 中您可以執行下列操作:
chkdsk
使用舊的或現代的等效項repair-volume
(在 PowerShell 中)檢查 NTFS 檔案系統是否損壞- 使用以下命令驗證作業系統核心系統檔案的完整性
sfc.exe /scannow
應用程式特定的驗證/復原步驟MySQL database
等LDAP directories
不屬於此問題的範圍 - 除非它是非常常見的事情,例如某些作業系統資料庫apt
或snap
資料庫。
你做什麼工作?
答案1
現代檔案系統執行元資料日誌,這意味著簡單的斷電不會對檔案系統完整性本身造成任何問題:已完成但未提交的交易將被重播,而部分事務將被回滾。
然而,傳輸中或快取的數據能遺失或部分寫入 - 畢竟,如果應用程式將一些資料處理到作業系統進行非同步寫入(即:正常寫入),但在作業系統將它們寫入永久儲存之前機器斷電,數據將要迷路了。
正是由於這個原因,關鍵應用程式作為資料庫(除了MyISAM
)實現了自己的日誌記錄並使用同步語義寫入資料 - 使用fsync()
等。
簡而言之:意外關閉通常不需要任何檔案系統修復(除了自動日誌重播之外)。應用程式檢查取決於應用程式本身,大多數資料庫不會受到突然斷電的影響 - 除非使用MyISAM
,這需要跑步mysqlcheck