我们经常会被微软教育:拔出U盘前一定要安全移除:
作为一个程序员,我也很理解这点。因为如果文件操作都立刻进行,效率非常低,尤其对于大量小文件而言更是如此。操作系统的文件子系统有个buffer,将数据暂时存储起来,在方便的时刻再一次写入设备。这个安全移除就是最后一个“方便的时刻”。
不过,不知道你有没有发现,现在大部分人都是用完直接拔掉,也很少听说文件丢失,这是为什么呢?
其实微软做过调查发现要求用户每次点击鼠标好几次并不是个很好的办法,很少有用户喜欢这么做。它在windows XP后改变了原先的做法,会尽量在用户操作完成后立刻刷新buffer。这样数据安全了,那么会不会造成磁盘存取效能下降呢? 其实操作系统会判断存储媒介的种类,只有外部可移动设备会被设置这种策略。通过哪里能观察到这种策略呢?我们可以在设备管理器中看到:
移动设备都默认被设置为可以快速删除,写缓存被禁用了。带来的好处是可以不用安全移除了!如果你需要更好的性能,可以选择下面那个“更好的性能”选项。如果是本地硬盘,则默认开关完全不同:
微软在不停的改进windows的使用体验。这个巨大的进步却没有广为人知,可能是顾及到可能的数据丢失。据我经验,在文件操作完毕后,等个一两秒钟,立刻拔出U盘,没有出现过任何问题。怎么判断文件操作结束了呢?有很多U盘都带有指示灯,在灯光不再闪烁时,再拔出是个好主意。尤其是你只是读取,并不写入的时候。
这就是你的数据不会丢失的原因。
如果你有很重要的数据,你希望能够100%确定数据不会丢失。那么通过安全移除可以确保无忧。但在很多时候,安全移除总是提示:
可你明明已经关闭了所有应用程序了啊?!其实系统中总有些程序在有意无意的扫描你的文件,这些程序包括杀毒软件、流氓软件或者某些“杀毒软件+流氓软件”。而你很难判断是谁锁住了U盘。在几次徒劳的尝试后,你也许就只有重新启动确保数据安全了。这也许就是微软不大张旗鼓宣传这个改进的主要原因:总有些人不按规则出牌。
如果你不希望白白认输,希望找出幕后黑手,那么请跟我来。
万事别伸手,伸手必被捉。U盘不能被移除是因为它的句柄(Handle)被锁住了(Lock),我们通过看看是谁锁住的Handle,就能够顺藤摸瓜,找到幕后的黑手。先下载破案工具:
1. Sysinternals的良心免费工具:Handle (Handle)
2. 还是Sysinternals的良心免费工具:Process Explorer (Process Explorer)
假设我们的U盘是H盘,先运行Handle (Win7以上主要管理员权限):
我们看到CleanMyPCService.exe锁住了U盘(H:)。那么我们是不是可以关掉这个exe就万事大吉了呢?Too Simple, Sometimes....啊同学们!很多时候我们可能在任务栏里面根本找不到这个程序,甚至你启动任务管理器也难以发现他们的踪影。没关系,我们不是还有另外一个工具吗,让我们利用它来让黑手现形:
名字和指纹(PID)都对上了,黑手抓住了!
我们可以用ProcessExplore关闭这个程序,再安全移除,从此王子与公主过上了幸福的生活。
慢着,这么麻烦,让我们一般用户情何以堪,这里不是你们程序员秀优越感的地方!好吧,介绍一个方便的工具:LockHunter(Download LockHunter)。它的功能十分强大:
1. 显示锁住文件或者文件夹的进程和其详细信息。
2. 可以解锁、删除、拷贝和重命名锁住的文件。
3. 允许下次OS启动的时候再自动删除。
4. 杀掉锁文件的进程,还可以杀掉那个进程的文件,斩草除根!
5. 集成到Explore的右键菜单里,方便快捷。
最妙的是OS支持广泛:WinXP、Win7、Win8和Win10。32位和64位!
让我们用它来打开U盘:
哒哒,黑手再次现形!我关,我删!世界清静了!