前言
我是怀着一种极为沉重的心情写下这篇记录的,仅以惨痛经验告诫后来者。倒也不是啥大问题,最多就是修修补补一年的开始菜单废了(基本是恢复不了了),两三个游戏最近几个月的存档没了 。
如果数据无法恢复,这可能我在Win上发的最后一个话题了。我终于明白我其实还是想要Linux。
开这个话题也是想提前了解一些Linux实机安装的知识、是否应该分区和系统必须配置的内容。以及一些具体的如桌面环境的推荐,输入法、播放器一类基础的推荐,firejail这类沙盒软件的使用等等。我的初步打算是装Debian。
如果不打算看后面的长篇故事,我的建议只有两条:
- 在Windows中慎用
mklink
命令(PowerShell中也有对应命令),如果已经使用mklink建立符号链接mklink /d
或者目录交接点mklink /j
时,尽可能使用文件资源管理器进行文件操作(移动、删除),特别是删除一定要使用文件资源管理器的彻底删除(不是移到回收站)。请勿任何第三方软件特别是Linux移植软件进行文件操作,极易出现递归删除(删除同时删除源文件) - 如果你是正在使用Windows或者Mac的Linux爱好者,请遵循内心尽可能选择Linux。我今日的失误很大程度上尝试在Win上模拟Linux体验造成的,Linux的文件系统与Win的相差巨大,移植软件产生的问题自然是难以估量。想要Win的稳定,又想要Linux的自由,这种脚踩两条船的行为必然会遭到报应,今日的失败便是我的报应。(人在做,诚在看。珍爱生命,远离劈腿。 )
复盘
起源:
一切要从我那天无意间点开Docker,突发奇想想学一学咋操作。然后一顿操作发现C盘(分了3个盘:110G+150G+225G)炸了,于是我就去找怎么转移镜像。然后就找到了这个故事的主角——mklink
命令。成功转移到了E盘,拯救了见红的C盘。
发展:
见到mklink
命令这么好使,我就考虑这是不是可以曲线救国,实现不同盘的融合(盘已经合不了了)。因为Sandboxie装在D盘,导致D盘也快要见红,于是我把几个游戏沙盒(70G)通过 mklink /j
命令转移到了E盘(记住这个命令)。具体情况可以看这篇帖子(现在看起来当时确实挺高兴的,完全不知道接下来会发生什么):
这样成功解决了几个盘内存不均的问题,还把一些常用的lnk改成了junction(影响最大的一个决定)。
高潮
就在一切都“蒸蒸日上”,感觉无比满足时,我开始了一系列现在看来想锤死当时自己的操作。
首先是发现 mklink /d
命令要比 mklink /j
命令更加实用有效(之前用的都是 mklink /j
,因为一开始找到的教程用的就是 mklink /j
)。然后我在Sandboxie的issue中发现是可以通过修改ini配置文件实现沙盒位置的转移,只是没有预先标识和ui集成,这种方法更加稳定兼容。
于是,在追求完美的心理作用下。我使用官方提供的方法修改了沙盒位置,完美。又将一些常用的快捷文件夹使用 mklink /d
命令重建了软链接,可行。而那些被删除的则被移动到了回收站,无害。
在一切结束后,完全是肌肉记忆:开始菜单>磁贴>左手第一列第四个文件夹>Bleachbit no uac>清理>确认
然后,彻底有害。
尾声
按下确认键的时候我还完全没有意识到做了什么,只看得清理数据越来越多,已经到了9、10G了,心想大概是之前删了两个4K电影吧,没事。然后低头看了一眼手机,再看屏幕时,清理量已经达到了60G,这时候才发现情况不对点了暂停,但一切已经晚了。
最后的结果就是我的开始磁贴从当初的满满当当变成了残垣断壁。
被清空的几个快捷目录如下:
C:\Users\user\AppData\Roaming\Microsoft\Windows\Start Menu\Programs
(所有在用户权限下安装的软件lnk,我建立的10个文件夹的绿色软件、沙盒、快捷命令lnk)D:\Script
(所有自用的dos脚本)D:\Software
(所有无安装程序的绿色软件,至少有10个)D:\MSYS64\home\user
(MSYS2的home目录,包含所有快捷命令,vim、zsh配置)
最开始转移的Sandboxie的游戏沙盒更不用说,数据直接少了一半,打都打不开,更别说存档了。其中包括HMCL、因为离线没有保存的文明6存档(昨天刚打的),损失最少的反而是占内存最大的Epic的生化奇兵,因为有云同步。
后来也找过数据恢复软件,但删的文件实在太多,甚至一部分软件已经无法使用,扫出来的文件太杂,有好多都是之前删掉的垃圾文件。
总之,一片狼藉。
反思
整个事故中最主要的两个角色,一个是 mklink
命令,一个是清理软件Bleachbit。核心原理大概就是:被移动到回收站的被Bleachbit识别为指向源文件夹的目录,而非junction。因此,当Bleachbit执行清理程序时,删除指令被递归到了源目录。用命令来说就是 mklink /j C:\A E:\B
建立了指向源目录B的A,A被移动到回收站,正常应该执行 del 回收站\A
,但Bleachbit直接执行了 rm -rf E:\B
(Linux移植)。
这样的事故其实之前遇到过,那次更加严重。我用 mklink /d D:\MSYS64\home\user C:\Users\user
将Win的用户目录链接到了MSYS2的home目录,但后来发现这样做不仅无意义而且产生了错误,于是直接执行了新学的rm命令 rm -rf /home/user
。然后结果就如现在一样,删除命令直接递归到了源目录,将整个用户目录清空,所有配置文件丢失。最后只能重置电脑。当时没有明白其中原理,重置系统后没有去深究,现在明白了,只是又掉入了相同的坑。
通过这两个事故,你会发现mklink
的支持率并不高,特别是Linux移植和仿Linux操作逻辑的软件。如果你在GitHub上搜索FILE_ATTRIBUTE_REPARSE_POINT
,你会发现同样的问题数不胜数。因此我建议当你使用较多具有Linux操作逻辑软件时,慎用mklink
命令(PowerShell中也有对应命令),如果使用mklink建立符号链接 mklink /d
或者目录交接点 mklink /j
时,尽可能使用文件资源管理器进行文件操作(移动、删除),特别是删除一定要使用文件资源管理器的彻底删除(不是移到回收站)。请勿任何第三方软件特别是Linux移植软件进行文件操作,极易出现递归删除。
碎碎念
就像我最开始说的,我今日的失误很大程度上尝试在Win上模拟Linux体验造成的。无论MSYS2,还是Bleachbit,都是我在Win上追求Linux体验才使用的。MSYS2就是一个mingw编译的gcc环境,Bleachbit甚至一开始搜索时就搜的是“Linux常用垃圾清理软件”。
事实上,这次失误并没有上一次失误严重,花一天时间将软件全部装一遍就基本能恢复。但当我仔细看着我经营许久的Windows桌面,虽然已经残缺不堪,但处处都是GUN的痕迹。我突然发现,其实我真正想要的是Linux,我在Windows上模拟Linux的时间完全足够我将Linux从入门到日常使用。所以,为什么不直接去装一个Linux呢。
所以,如果你是正在使用Windows或者Mac的Linux爱好者,请遵循内心尽可能选择Linux。
我一开始说了,这可能是我在Windows上发布的最后一个话题了。如果三天后我买的U盘到时还没有做到完全恢复(也已经不大可能恢复了,即使恢复也会觉得有错误文件被恢复而感觉不如重置,而且我也没有精力再去粉饰这个充满Linux痕迹的Windows了),我就装Linux了。
发这贴的一个目的也是打算提前了解一些Linux实机安装的知识、是否有必要分区和系统必须配置必装的内容。或者具体的如桌面环境的推荐,输入法、播放器一类基础的推荐,firejail的使用等等。我的初步打算是装Debian。
写在最后
感谢能看到最后,感谢能看一个刚刚失去梦想的咸鱼发牢骚。