血与泪的教训,Linux 一不小心挂载硬盘后,所有数据灰飞烟灭

事情是这样的

我们团队有一台比赛用车,团队已经搞了一个多月了,最近空间不足挺麻烦。

这个车有两个盘,一个 /dev/mmcblk0 放在车载芯片里,还有一个 /dev/mmcblk1 是 SD 卡扩展。

根目录的空间不足给使用带来了很多麻烦,尤其是在空间为 0B 的时候,只能用 TTY 删掉一些空间,再减少一点预留空间,才能进入 GUI 界面,否则连 GUI 软件都打不开。

而且这个轻描淡写过程的背后,是大量的试错

  • 逐渐熟练使用 du, df, sudo du -sh /* | sort -h, duf 等命令,不时查看空间是否充足(C盘焦虑症)
  • 查了半天发现根目录 / 和用户目录 /home 是两个盘,还错怪主办方分区给的太少(不过根目录确实太小)
  • 空间为 0 的时候刚开始没注意到 TTY,专门找来旧路由器让车自动连接,以使用 SSH 对 Liunx 进行操作
  • SIZE (总大小)和 USED (已使用)之间不只有 AVAIL(可用空间),还有一般设为 5% 的预留空间,我说怎么删了几百 M 下去,AVAIL 还是 0
  • 找了半天能删的文件,甚至把 Chromium 都删了,才够 Linux 勉强能用

最后,虽然空间调整了勉强够用,但仍然容易不足。

巨大的错误

根目录有一个路径是 /tmp ,用于存储临时文件。

这个路径会偶尔占用到数 G ,但很快又自动清理了。但考虑当前存储不足,我就在想如何把 /tmp 挂载到 /home 盘下。

我找到地表最强模型 GPT4,问他怎么办。

他说改一下 /etc/fstab 就行了

我说,好

于是一通 sudo vim /etc/fstab

vim 说,你的 fstab 是这样的

/dev/root / ext4 defaults 0 1
/dev/mmcblklp1 /home ext4 defaults 0 0

我就加了个 /tmp 进去,变成了这样

/dev/root / ext4 defaults 0 1
/dev/mmcblklp1 /home ext4 defaults 0 0
/dev/mmcblklp1 /tmp ext4 defaults 0 0

然后 duf ,发现确实增加了

挺好,就应该这样

但运行后,仍然发现 /tmp 没有挂载上去

那就重启一下吧,我想。

天崩地裂

重启后,我打开了一个常用的程序,发现 not found

奇怪,又是没有 source ~/.bashrc 吧

我熟练地敲上去了 source ~/.bashrc 

代码的历史记录,还记录着我输入了 ???

我当时还很疑惑,怎么回事?

然后我看了一下文件列表,忽然发现不对劲

卧槽,整个用户目录的文件去哪里了?

顿时,我身体一阵寒意袭来

卧槽卧槽卧槽

我立即 duf,结果是

我惊讶地发现,/home 目录怎么只有 4.1G 了??????

不会被格式化了吧?????这个盘可是有一个多月来的心血,而且没怎么备份过!

我脑子直接懵了,凭着回忆开始想,一定是因为 /etc/fstab,一定是,一定是

我立即去删掉了 /tmp 的挂载,然后 reboot

但重启后,一切仍是如此。

我将车关机,取出 SD 卡,用 DiskGenuis 查看了一下,发现真的只有寥寥几 G 的文件,其他啥都没有了。

寻找数据恢复人员,他们用读盘工具检查了,发现盘的内容清理的非常彻底,完全无法恢复

我问 GPT4

Linux 的覆盖真的是不留一点余地!

第一:Linux 挂载的逻辑不一样,与其说是把路径挂载到盘里时,不如说是把盘挂载到路径下,不是盘会覆盖路径,而是路径覆盖盘

第二:/etc/fstab 文件的错误不会报错,只会执行下去,而且没想到 GPT4 的回答没有想明白,这个文件的操作太危险了

第三:重复挂载的结果,居然是完完整整地覆盖掉硬盘,而不是删除文件只删除索引那么简单,一点数据恢复的机会都没有

接受现实与补救

在尝试各种数据恢复无果后,只能从头开始。

在刚刚发生的这几个小时里,我整个人的情绪都处在完全失落和压力中。

不幸中的万幸啊。好在,我在 10 天前备份了一个目录,当时想着可能会对文件进行修改,方便以后恢复吧。

谁知道,居然这个无意的备份,会在 10 天后极其愚蠢的操作中成为救命稻草。

10 天时间,确实损失了很多,这件事情给整个团队带来了毁灭性的打击,但还好在队员、老师的鼓励下,我们一直在补救。非常非常感谢他们对我愚蠢行为的包容。

除此之外,一定要做好备份。因为问题永远无法避免,你不知道什么时候会出现误操作,各种技术细节太多太多了。而备份是你唯一能做的而且一定是对的事情。

从今天开始,我每天都会对这个车进行备份,隔一段时间最好能备份整个镜像。

这已经不是我第一次遇到数据丢失的问题了,但确实是最严重的一次。

除此之外,平时生活中也要做好数据备份。

  • 代码先本地 Git,然后也多 Github 或 Gitee 同步,太大就多写一些 .gitignore
  • 个人文档始终 OneDrive 同步
  • 项目数据比较大的话,也要把文档单独备份出来
  • 手机的数据多用百度网盘之类的备份

前段时间还在写一个软件,用于一键压缩某路径下所有子路径的常见文档,自动识别大文件和占用大的目录用于加快压缩速度。(具体的功能就等写完之后再说吧)

最后,希望大家引以为戒,一定要做好备份,在涉及和硬盘、数据等重大操作的命令下一定要小心谨慎。数据丢失后,一定要冷静思考,把可能恢复的各种路径都想清楚。

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值