![Linux 服务器断电-数据完整性和操作系统损坏检查](https://linux22.com/image/782126/Linux%20%E6%9C%8D%E5%8A%A1%E5%99%A8%E6%96%AD%E7%94%B5-%E6%95%B0%E6%8D%AE%E5%AE%8C%E6%95%B4%E6%80%A7%E5%92%8C%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F%E6%8D%9F%E5%9D%8F%E6%A3%80%E6%9F%A5.png)
如果发生意外断电(或 VM 主机故障),检查/恢复潜在的 Linux 操作系统损坏的最佳实践步骤是什么?
当然,这“取决于”安装和设置,但我正在寻找针对大多数 Linux 操作系统(Debian、Ubuntu、Mint 等)和文件系统(XFS、ZFS、EXT4、vfat)执行的常见操作/检查。
这并不是为了防止非正常关机 - 而是为了在非正常关机发生时进行处理,并尝试确保最佳恢复情况。
我知道操作系统往往会检测文件系统是否未卸载(就像在正常关机期间一样),因此会在启动时自动执行检查,但这些检查是什么以及如何手动执行它们?
Ege2fsck -f
就是这样一种工具,但是对于初学者来说,什么时候可以/应该使用它,什么时候不能用(或者它不起作用)?
例如,在 Windows 中你可以执行以下操作:
chkdsk
使用旧版或新版repair-volume
(在 PowerShell 中)检查 NTFS 文件系统是否损坏- 使用以下方法验证操作系统核心系统文件的完整性
sfc.exe /scannow
特定于应用程序的验证/恢复步骤(如MySQL database
或LDAP directories
等)超出了该问题的范围 - 除非它是非常常见的东西,例如某些操作系统数据库apt
或snap
数据库。
你做什么工作?
答案1
现代文件系统具有元数据日志记录,这意味着普通的断电不会对文件系统完整性本身造成任何问题:已完成但未提交的事务会被重播,而部分事务则会回滚。
但是,传输中的或缓存的数据能丢失或部分写入 - 毕竟,如果应用程序将一些数据处理到操作系统进行异步写入(即:正常写入),但机器在操作系统能够将它们写回到永久存储之前断电,数据将要迷路。
正是由于这个原因,数据库等关键应用程序(除外MyISAM
)都实现了自己的日志记录并使用同步语义写入数据 - 使用fsync()
等等。
简而言之:计划外关机通常不需要任何文件系统修复(自动日志重放除外)。应用程序检查取决于应用程序本身,大多数数据库不受突然断电的影响 - 除非MyISAM
使用需要跑步mysqlcheck