最近新配了台主机,在老板的极力推荐下,上了块 SSD 当系统盘,那速度,果真是一个大四个叉,爽!!!
上网查了查,发现使用 SSD 还有不少讲究,主要目的是为了延长硬盘的使用寿命,其中有关转移用户配置文件并利用 mklink 命令进行文件夹链接的文章引起了我的兴趣。由于以前 N 次重装系统留下的备份文件实在太乱,而且重复的文件太多,所以准备仔细整理一番,然后用 mklink 将用户文件设置到其它盘去。经过几天的折腾,终于成功将 C:\Users 中的用户文件夹给链接到了 D 盘了,其间发生了各种状况,在此和大家分享下经验和教训。
折腾之前,先普及下基础知识:
Windows (Vista/Win7/Win8) 自带的 mklink 命令可以设置文件和文件夹链接,也叫接合点或解析点,可以通过 dir /a:l 进行查看。
如图中所示,文件或文件夹前具有 <JUNCTION> 标记的,就是接合点。
Junction:连接点或接合点,图标类似快捷方式,当用户对其进行访问时,读写操作实际上是附加在接点所指向的文件或文件夹上的。
比如:Win7 中的 "C:\Documents and Settings",用户目录中的 "Application Data"、"My Documents" 等。
mklink 是用来创建 Junction 的命令,具体使用方法请参考:符号链接、Mklink 详解 和 Windows 7 中的 mklink 命令
好吧,Let's 折腾
本文以 Administrator 作为示例用户,要做的就是将用户配置目录 C:\Users\Administrator 链接到 D:\Admin。
操作共分3个步骤:
1、用 WinPE 复制 C:\Users\Administrator 文件夹到 D:\Admin 中。
我的系统是 Win8,曾使用 robocopy 命令来复制用户目录,不幸的是未能成功:
robocopy "C:\Users\Administrator" "D:\Admin" /copyall /e /xj
总结下失败的原因:
a、本打算偷懒,将 Administrator 中的 Junction 一起复制到 D 盘,所以去掉了 /xj 参数。后果是出现了循环复制,原来 Application Data 指向的目录存在循环引用。仔细想想,因为移动了 Administrator 文件夹,原有 Juncation 的目标也就失效了,所以必须添加 /xj 参数。
b、加上 /xj 参数后,复制成功,但提示有的文件夹无访问权限,不过我没理会。事实证明,这是不对的,因为复制完成后,C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Libraries 无权删除,这还让我怎么建立 Junction 啊~~
c、利用系统自带的用户配置文件管理进行复制、删除,也出现了无权访问的状况
d、据说安全模式可以搞定,可 Shift+F8 都按陷下去了,也没能进入 Win8 的安全模式,真尼玛丢人啊!
最终我还是选择了 WinPE 环境复制配置文件,而且一次搞定。
友情提醒:
Windows 8 OS,建议用 Administrator 帐号登录系统,并点开应用商店逛逛,是否下载应用倒无所谓,否则,折腾完后你会惊喜的发现无法从应用商店中安装应用了!
2、重命名 C:\Users\Administrator 和 D:\Administrator 文件夹。
为了保险起见,C:\Users\Administrator 文件夹不要删除,可以重命名为 Administrator.BAK
D:\Administrator 重命名为 Admin
3、利用 mklink 建立文件夹链接:
mklink /j "C:\Users\Administrator" "D:\Admin"
注:在 WinPE 中也能使用 mklink 命令,可由于缺少环境变量的设定,所以进入系统目录才能执行。
4、在 D:\Admin 文件夹中建立如 "Application Data"、"Cookies" 等 Junction 接合点。
让我们用 dir /s /a:l 命令查看下 Administrator 文件夹中的所有 Juncation:由于目录中的 Junction 比较多,而且分散在不同的子目录中,所以我编写了一个批处理来完成这项工作。为了和原用户目录中的 Junction 保持一致,又在批处理中增加了 attrib 和 icacls 命令,作用是分别为这些 Junction 设置系统、隐藏等属性,并添加了拒绝用户访问的权限。
上脚本咯~~!
d: cd\ cd Admin rem mklink mklink /j "Application Data" "AppData\Roaming" mklink /j "Cookies" "AppData\Roaming\Microsoft\Windows\Cookies" mklink /j "Local Settings" "AppData\Local" mklink /j "My Documents" "Documents" mklink /j "NetHood" "AppData\Roaming\Microsoft\Windows\Network Shortcuts" mklink /j "PrintHood" "AppData\Roaming\Microsoft\Windows\Printer Shortcuts" mklink /j "Recent" "AppData\Roaming\Microsoft\Windows\Recent" mklink /j "SendTo" "AppData\Roaming\Microsoft\Windows\SendTo" mklink /j "Templates" "AppData\Roaming\Microsoft\Windows\Templates" mklink /j "「开始」菜单" "AppData\Roaming\Microsoft\Windows\Start Menu" mklink /j "AppData\Local\Application Data" "AppData\Local" mklink /j "AppData\Local\History" "AppData\Local\Microsoft\Windows\History" mklink /j "AppData\Local\Temporary" Internet Files "AppData\Local\Microsoft\Windows\Temporary Internet Files" mklink /j "AppData\Roaming\Microsoft\Windows\Start Menu\程序" "AppData\Roaming\Microsoft\Windows\Start Menu\Programs" mklink /j "Documents\My Music" "Music" mklink /j "Documents\My Pictures" "Pictures" mklink /j "Documents\My Videos" "Videos" rem attrib attrib +s +h +i "Application Data" attrib +s +h +i "Cookies" attrib +s +h +i "Local Settings" attrib +s +h +i "My Documents" attrib +s +h +i "NetHood" attrib +s +h +i "PrintHood" attrib +s +h +i "Recent" attrib +s +h +i "SendTo" attrib +s +h +i "Templates" attrib +s +h +i "「开始」菜单" attrib +s +h +i "AppData\Local\Application Data" attrib +s +h +i "AppData\Local\History" attrib +s +h +i "AppData\Local\Temporary" attrib +s +h +i "AppData\Roaming\Microsoft\Windows\Start Menu\程序" attrib +s +h +i "Documents\My Music" attrib +s +h +i "Documents\My Pictures" attrib +s +h +i "Documents\My Videos" rem icacls icacls "Application Data" /deny Everyone:(S,RD) icacls "Cookies" /deny Everyone:(S,RD) icacls "Local Settings" /deny Everyone:(S,RD) icacls "My Documents" /deny Everyone:(S,RD) icacls "NetHood" /deny Everyone:(S,RD) icacls "PrintHood" /deny Everyone:(S,RD) icacls "Recent" /deny Everyone:(S,RD) icacls "SendTo" /deny Everyone:(S,RD) icacls "Templates" /deny Everyone:(S,RD) icacls "「开始」菜单" /deny Everyone:(S,RD) icacls "AppData\Local\Application Data" /deny Everyone:(S,RD) icacls "AppData\Local\History" /deny Everyone:(S,RD) icacls "AppData\Local\Temporary" /deny Everyone:(S,RD) icacls "AppData\Roaming\Microsoft\Windows\Start Menu\程序" /deny Everyone:(S,RD) icacls "Documents\My Music" /deny Everyone:(S,RD) icacls "Documents\My Pictures" /deny Everyone:(S,RD) icacls "Documents\My Videos" /deny Everyone:(S,RD)
其实,我自己使用的是另一个方法,修改了注册表里
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\[User SID]\ProfileImagePath
中的值,这个方法弊端比较多,建议大家不要随意使用。