感谢showfox的投递
据京都大学主页的公报显示,本次数据丢失事件发生在 12 月 14 日 到 12 月 16 日之间,一共删除了/LARGE0 目录下的 3400 多万个文件,总容量大约 77 TB,其中有 49 TB 数据可以从备份恢复,28 TB 数据完全丢失。
具体事故的原因日本惠普也在 声明 PDF 中做了详细说明。
惠普用于超算系统的备份脚本会使用 find 命令找出无用的 Log 文件并删除,最近日本惠普为了提高程序的“可读性”对传给 find 命令的变量名做了一些修改,然后更新了系统中的脚本,但是没考虑到 Bash 会在运行过程中实时读取脚本文件然后执行,于是尚在执行中的备份程序读取了新脚本中的 find 指令,最终导致误删文件。
惠普日本在“谢罪声明”中表示对此次事件负全责,并承诺赔偿和善后。
编者记: Bash 在解析 Shell 脚本时,是边解析边执行的,并不是将脚本一次性读入内存后执行。如果脚本在执行时,我们用新脚本覆盖了旧脚本,而且文件的 inode 没有发生变化(比如使用 `cp new.sh old.sh`,old.sh 内容变了,但 inode 不会变),那么 Bash 就会解析更新后的内容并执行。