我有一个将文件写入 FS 的特定目录的应用程序。该系统在任何情况下都不会丢失单个写入文件。
当我在硬盘上遇到一些问题时,例如坏块或块位图差异,新文件甚至现有文件可能会损坏,但rsync
备份.tar
会正常进行,只有当我尝试打开文件时我才会知道该文件有问题。
我需要一种方法来知道文件一旦发生损坏,或者更好的是,在磁盘损坏我的文件之前知道磁盘有问题。
我想保留一个文件,其中包含每个文件的哈希值并每天检查它,但它会花费比我更多的时间。另一个想法是将这些文件放入 SGDB,但我想知道是否有更好的方法来解决这个问题。
我很确定我错过了一些东西,但我是盲目的。
系统:Debian 6
和Debian 7
32bit
和64bit
(应用程序安装在很多地方)。所有系统都是ext4
(还有其他更值得信赖的吗?)
答案1
如果人们能够轻松检测到扇区何时即将变坏或确实变坏,那么它现在可能已经被纳入文件系统中了。由于错误的性质,它通常会保持沉默。您需要一个可以进行校验和的文件系统。在 GNU/Linux 上,BTRFS 可能是一个不错的选择,因为我在网上查了一下,显然 Debian 6 中引入了支持。
基本上你需要校验和+raid(某种形式)。文件系统只有在 RAID 设置中至少有两条腿时才能自动更正。如果没有第二条腿,它就无处可去才能找到可验证的良好文件副本。幸运的是,您应该能够使用同一磁盘(或逻辑卷,无论您有什么可用的)上的两个不同分区来创建 RAID1 阵列:
显然,将它们放在同一磁盘上并不能防止磁盘完全故障,但可以防止扇区出现故障。模拟失败的扇区可能比我在 SE 答案中投入的工作量要多,但是这家伙(测试从24:30开始)为您进行演示。
基本上,BTRFS 将不透明地恢复文件,用户空间不会知道发生了任何事情。您可以使用它btrfs scrub
来检测错误。您可以在 cronjob 中运行它,并让它向您的本地帐户之一发送电子邮件。之后,您可以设置/etc/aliases
将命令输出转发到您的真实电子邮件帐户。
答案2
您可以安装和配置 SMART 监控工具。在 Debian 上,该软件包称为smartmontools
.这些不会防止磁盘故障,但它们将有助于识别可能的磁盘故障的先兆。
包安装中没有配置,所以首先需要在文件中启用SMART监控/etc/default/smartmontools
:
# uncomment to start smartd on system startup
start_smartd=yes
然后编辑配置文件/etc/smartd.conf
:
# The word DEVICESCAN will cause any remaining lines in this
# configuration file to be ignored [...]
# [...] Most users should comment out DEVICESCAN and explicitly
# list the devices that they wish to monitor.
#DEVICESCAN -d removable -n standby -m root -M exec /usr/share/smartmontools/smartd-runner
# Short test nightly, Long test on Sunday mornings; append "-m [email protected]" to email errors
/dev/sda -a -s (S/../.././02|L/../../6/03)
/dev/sdb -a -s (S/../.././04|L/../../6/05)
/dev/sdc -a -s (S/../.././06|L/../../6/07)
# /dev/sdd -a -s (S/../.././06|L/../../6/07) -m [email protected]
最后启动监控子系统,invoke-rc.d smartmontools start
。
也有一些非常好的答案在高可用性软件 RAID 1 服务器上使用 smartd(在 smartmontools 中)监控磁盘运行状况
答案3
由于您无法预见磁盘损坏的时间和位置,因此防止备份被损坏的副本覆盖的最简单方法是执行轮换备份。
所以基本上你可以每天备份到不同的位置。当您发现磁盘故障并且有多个备份可供恢复时,即使最后一个备份被损坏的备份覆盖。
cron
使用和应该是一项简单的任务rysnc
,并且有几个用于此目的的脚本。
答案4
这种安全应该不是尝试在文件系统之上从头开始实现。相反,我建议重新组织您的系统并使用 ZFS。使用 ZFS,任何一致性都在文件系统级别进行处理,无需您跟踪校验和或其他方式,也无需在每次访问或每个访问文件的工具时显式验证文件状态。