- 数据保护:工作负载的可恢复性
- (美)W.柯蒂斯·普雷斯顿
- 1254字
- 2023-06-28 16:02:44
1.1.1 操作失误
人总是会失误。你可能会把错误的文件复制到错误的地方,或者拿一份没用的文件把一份有用的文件覆盖掉。有时你可能想腾出一些空间来存放新的数据,于是就把回收站(也叫垃圾桶)里面的文件给清理掉了,可是刚一清理完,你就立刻反应过来,其中还有一些不应该删的东西。
笔者敲键盘敲了大半辈子,不知遇到过多少次因为敲错一个键或打错几个字而造成的错误。这种情况有时叫作“Problem Exists Between Keyboard And Chair”(问题出在键盘和椅子之间),简称PEBKAC,意思是说,这既不怪键盘,也不怪椅子,要怪坐在椅子上敲键盘的那个人。
我们通常把这种错误叫作user error(用户错误或用户操作失误),这里的user(用户),很多人都认为是IT业里面说的end user(最终用户或终端用户),也就是在IT部门所提供的系统与数据库上执行实际操作的人。这很容易让大家认为,这种错误全都是由那一类用户导致的,而不是由IT部门的人导致的。然而事实却是,IT部门中的系统管理员、网络管理员与数据管理员,同样容易出这种错误。
实际上,管理员与其他人一样,都容易出错,而且管理员出错所造成的破坏,要比其他人大得多。我遇到过许多例子,下面是我立刻就能想到的几种:
·把数据里面不该删的数据表给删了。
·把不该格式化的盘(即一个本来毫无问题的盘)给格式化了。
·把开发用的数据库恢复到了生产用的数据库(即给实际产品用的数据库)上。
·本来想写个脚本把那些用不到的home目录给删掉,结果这个脚本把每一位用户的home目录全都删掉了。
·把不该删的虚拟机(Virtual Machine, VM)给删了。
拿到管理员权限相当于拥有一把利剑,如果砍错了方向,可能会造成严重的后果。因此,之所以要备份数据,一个很重要的原因就在于应对管理员的失误。
我不是这个意思!
某次笔者给一家大型软件公司的QA团队做管理时,遇到了这样一件事。用户安装那个软件的时候,软件应该在用户的home目录下建一个子目录,例如foo,并把自己安装在这个子目录(也就是$HOME/foo)中。比方说,如果做QA的这个人是root用户,那么按理来说,软件应该在root用户的home目录下创建一个叫作foo的子目录。问题是,当时的那个版本,没有正确处理当前用户的home目录,软件本来应该把系统的$HOME环境变量解读出来,以此确定当前用户的home目录到底在哪里,但那个版本直接将$HOME这几个字符本身当成了home目录的名字,于是无论哪个用户来安装这个软件,它都会在一个本身就叫作$HOME的目录里面创建foo子目录。做QA的用户发现了这个问题,并提交了bug修复方案,然后准备把这个没有用的$HOME目录删掉,于是这位用户采用这样一条命令来删除:
(rm命令并不会像刚才那个有bug的软件一样按字面意思来理解$HOME这几个字符,而是会把它解读成当前这位用户的home目录,由于这是一个标准的UNIX系统,因此root用户的home目录是/,也就是根目录。这意味着,这条命令会把根目录以及它下面各级子目录中的所有内容全都删掉。)
我当时觉得特别搞笑,但笑完之后,我马上用安装盘把机器重装了一遍(当时并没有那种一下子就能把所有东西都装好的万能镜像,而且那些QA服务器也根本没做备份)。所幸大多数重要的数据都存放在NFS(Network File System,网络文件系统)服务器上,而没有存放在QA服务器上。