前几天在家里给树莓派写镜像,同一个terminal里的另一个tab中正在ssh到另一台机器上干活,在这一背景下,发生了如下几件事情:
1. 输入命令的时候,没有注意切错了tab,导致我本该在本机上打开etcher(一个图形界面的类dd工具),却输入到了远程ssh session中,但是可能是etcher的保护机制,打开失败
2. 我以为是etcher出了问题,然后就以飞快的速度输入了dd if=xxx.img of=/dev/sda。这条命令在本机上是有效的,因为本机上只有ssd,sda对应于插入的tf卡, which正是我要写入的目标。然而这条命令实际上是在远端机器上执行的。
3. 不知道因为什么原因,dd命令运行了不到10秒钟就结束了,也没有报错。但是这条命令本来要运行大概5分钟的。我注意到了这一异常,以为是tf卡有问题,于是又重复运行了几遍dd命令。
4. 几秒钟后我惊觉我的命令输入在了远端的机器上, on which /dev/sda1是我的home分区!!
5. 但是当时对分区的访问并没有出现明显的问题,我侥幸认为系统有某种保护机制。
6. 为了确认这一点,我运行了一下gdisk,该命令报告说gpt分区表corrupted,问我要不要恢复,于是我就确认让它恢复,并正常退出。
7. 由于我平时在三台机器之间是设置了实时同步的(用syncthing),所以并不是很担心。
8. 然后我就重启了远端的机器,果不其然,home分区mount不上了,于是就现场写了一个live cd usb key,把机器启动起来,运行fsck
9. 报了一大堆错误,我就无脑点了修复,经过大概半小时的漫长等待,修复终于结束
10. 我把经过“修复”的home分区给mount进来,进取一看,原来的目录结构和文件名都不见了(法克!),所有的东西都被命名为一串数字,平铺在lost+found里面(顺便我终于知道这个目录是干什么用的了),那我还要这个盘干什么???
11. 于是我就重新mkfs.ext4,fs2tune恢复uuid,重新恢复数据
12. 3个小时候之后,我的远端的机器终于基本恢复如初了
从这件小事中我认识到,手不能太快,真是一个难忘而有意义的下午啊!
--
修改:blitz FROM 159.226.171.*
FROM 159.226.171.*