|
发表于 2024-1-5 16:33:41
|
显示全部楼层
本帖最后由 MF35_ 于 2024-1-5 16:35 编辑
百分百不能
像windows或者linux这种操作系统,从用户程序到磁盘,中间经过了好几层缓冲。
首先是应用程序访问文件使用的流缓冲,这层缓冲位于用户空间,不会产生系统调用,所以速度比较快,但有些程序可能直接使用系统调用,所以这一层不一定有。
数据经过系统调用到了操作系统后,与磁盘之间还有一层缓冲,也就是说你告诉操作系统我要访问文件,实际上操作系统是先把你要访问的这块数据读到内存,以后你读写文件文件实际上是读写这块内存,具体这块内存的数据何时同步到磁盘,取决于操作系统或用户程序命令,而操作系统正常关机的过程包括了把这部分数据同步到硬盘,所以你直接断电这部分数据就丢了。
最后一层缓冲在硬盘内部,所以即便操作系统告诉了硬盘我要写入数据,这块数据也有可能被硬盘内部缓存起来,而不是直接写入到存储空间(因为很慢),操作系统在关机前,完成内核数据同步给硬盘后,会发出命令告诉硬盘把自身的缓存数据写完,等硬盘写完操作系统会关闭硬盘。如果你直接关机,硬盘上的缓存数据就丢了,如果这个缓存数据只是文件数据还好,只是丢文件,如果是元数据,你整个文件系统可能都没了,甚至如果是硬盘正在刷新块平衡数据之类的硬盘自身数据,你甚至硬盘都会丢了,必须用非常专业的工具才可以恢复。
所以,任何情况都不要在开机状态直接切断计算机电源,甚至SSD尤其不能,老式机械硬盘因为没有块平衡数据,只有文件系统数据,哪怕缓存丢了,最多文件系统损坏,而文件系统损坏大部分时候是可以修复的,SSD多了一个硬盘自身的块平衡映射数据,如果丢了玩笑就大了。
|
|