问题描述
当天下午离开工作地点之前 启动了程序, 第二天早上来公司后发现: 工作目录/home/xxx/workspace下所有的代码文件全部消失, 然后之前运行的程序也是因为找不到代码路径戛然而止.
如下图所示,
从未遇到过这种情况, 有点慌, 试了下还可以进入/workspace目录,进入后执行$ ll -ls
, 显示:
ls: reading directory ‘.’: Input/output error
然后查看了下磁盘占用, $df -h
, 发现:
对应的挂载目录的磁盘使用率为70%多, 还有30%的剩余, 这至少说明消失的文件还以某种方式存在, 并且也不太可能是磁盘爆满导致的.
接下来就是想着怎么恢复了, 当然首先是保护现场, 不要往/workspace下写入任何新的东西, 以免之前的文件被覆盖.
解决
由于我的是双系统, 所以开始想着切换到Windows,然后借助Windows的回复软件进行恢复, 不过考虑到磁盘格式为ext4, 所以安全起见还是网上搜了下, 结果搜到了这篇文章, https://blog.csdn.net/yuand7/article/details/127214219
反正不管怎么样都要重启, 所以重启了下, 结果之前的文件又全部回来了., 万幸.
如果还不行, 可以按照提及的文章进行操作.
进一步分析
我发现这种情况主要出现在我运行大程序,并且进行写操作的时候.
实际上最早包的错误是这个,OSError: [Errno 30] Read-only file system: ‘.x/x/x/x.csv’
等发现的时候挂载的磁盘就消失了,
试图卸载, $umount -v /dev/nvme0n1p7
提示,umount: /dev/nvme0n1p7: No such file or directory
试图挂载, $sudo umount /dev/nvme0n1p7
提示,umount: /home/masterqkk/workspace: target is busy.
总结一下,就是这个有问题的磁盘变成了只读文件系统, 注意, 是磁盘,不是某个文件/目录.
我也尝试采用修复工具进行修复,但是在修复过程中遇到super block missing的Bug, 似乎难以解决.
总结
遇事不要慌, 一步步来, 虚惊一场.