enauvy 发表于 2013-2-3 23:34

mklink并不是那么好玩的

众所周知,从vista开始,window开始支持符号链接(symbolic link),通过mklink命令创建的符号链接可以很方便的将用户文件夹转移出系统盘。但是在win8系统中,同样的方式产生了新的问题,在解决这些问题的过程中,对符号链接和mklink有了进一步的了解。
先说问题:
1.同样的方式在win8中应用造成metro应用闪退(打开之后马上退出支开始菜单)
2.删除用户会造成符号链接的target文件夹彻底删除。
再说经验:
1.在win8种对于用户文件夹有严格的权限要求,仅将用户文件夹简单的剪切出系统盘是不够的,可以使用的方式是在命令提示符(重启后进入的完全命令提示符模式)下使用xcopy命令,并打开/E /K /O /H /B五个开关进行完全复制(有关开关的详细说明参见该命令的帮助),然后再以administrator账户登录系统将原用户文件夹删除,最后再通过mklink命令建立符号链接,这样就不会出现闪退的问题了。
题外话:不知道该方法可不可以用于winapp文件夹的转移,有愿意做小白的可以一试。
2.符号链接不等于快捷方式,当删除采用符号链接转向(暂且形象的这么说)用户文件夹的用户账户时,千万不要以为系统只会删除符号链接本身,否则你会后悔莫及。

最后再说事件、认识和取得经验教训的过程:
事件的起因是win8中metro应用的闪退,搜索、论坛找了好多,但都感觉没有对上症。
后来在一个国外论坛上看到转移win8系统用户文件夹的方法,顿悟上述原因和解决方法,根源即在于权限的问题,关键要在未进入系统的条件下进行完全复制将用户文件夹的任何属性都一定转移,看来win8对文件权限的管理更加严格。
采用该方法还要另外注意的是,对于采用vhd虚拟盘安装win8的同学,在启动时选择进入命令提示符后,由于此时win8系统所在的虚拟盘还未加载,你会找不到win8系统盘,这时候需要用diskpart工具进行加载:
select vdisk file=
attach vdisk
退出diskpart后即可用xcopy文件进行完全复制。

在解决完上述问题后,本以为可以安心的开始使用win8了,结果今天又节外生枝:
今天由于原来在win7系统下有些文件下载没有完成,进了win7系统(前面也提到过,我是采用win7下建立vhd安装win8的,win7是宿主系统),又发现了前些时一直存在的一个问题,系统启动后硬盘灯常亮,于是思考,联想到win8下没有出现该状况,由于win8的用户文件夹是完全新建的,即是原生初始状态,而我的win7用户文件夹是多次重装系统积累下来的。
这里要说一下之前的一个习惯(现在看来是一个很不好的习惯):我每次重装了win7系统后,都是通过新建符号链接将系统生成的初始用户文件夹装一出来,与原来的用户文件夹进行合并,这样操作确实很方便。
但是长此以往造成我的用户文件夹成为了一个庞然怪物,自己却还不知。回归正题,正因为如此,结合一些论坛里的说法,怀疑硬盘灯常亮就是因为系统用户文件夹太复杂(文件多,体积大)。
想到这个原因后,我进行了如下的操作:
1.首先想到的是用户文件夹下有一些譬如appdata之类的复杂文件夹,于是考虑删除当前账户,再新建一个账户,然后采用同样的符号链接方法将新账户的用户文件夹转移到一个新的地方,再将原账户用户文件夹中的有用的文件或文件夹移进来,譬如我的文档、我的图片、我的音乐、下载等等之类的,其他的没意义的统统不要。
想到删除账户的时候有一个选择是删除还是保留用户文件,这时已担心删除账户同时删除用户文件会将用户文件夹符号链接所指向的真正的文件一并删除,于是先对真正的用户文件夹进行备份,在备份的时候发现果然该文件夹真是无比巨大,复制窗口一直都停留在统计复制项目数量的状态,于是取消复制,想采取删除账户同时保留用户文件的方法。
接下来就删除账户,原以为保留文件即是不删除文件,没想到系统的操作竟然是:将原有用户文件在桌面先进行一个备份,然后再删除用户文件。
在备份用户文件的过程中,很显然,出现了上述复制过程同样的状况,于是在复制中途没有耐心等待果断的点了取消,本以为系统会停止转移文件,没想到出现了如下惨痛的一幕:
系统停止了复制,但是并没有停止删除,于是我多年的数据就这样被系统无情的删除得一干二净,我多年的数据啊,就这样付诸东流了。
事后发现幸运的是,在刚才所取消的复制过程中,虽然显示的状态是正在统计待复制的项目,但是系统仍然复制出了一大批文件,包括我的文档和我的图片,竟然把这两个主要的文件夹完整的复制出来了,不幸中的万幸!
这里节外又生出一枝,前面我在win8下转移出的用户文件夹,target放在了我在win7系统的用户文件夹中,刚才删除win7系统账户用户文件时,连该文件夹一并删除了。当我再进入win8系统时,很显然,丢失了用户文件,系统对该账户进行了临时的初始化。于是又老老实实的删除该账户,老老实实的按照本文开头的方法重新进行了用户文件转移。

至此,所有事件终于完全平息,win8系统中metro应用正常了,win7下系统硬盘灯也不再常亮了。

总结:
1.win8下文件夹权限管理更加严格,采用符号链接的方式转移用户文件夹时,要进行完全属性转移。
2.系统对于用户文件夹的监控非常频繁,一定要防止用户文件夹过大。
重装系统后,采用符号链接转移用户文件夹时,应将target设置为一个新的文件夹,再仅将原来用户文件夹中有用的内容转移到这个新的文件夹中来,防止用户文件夹急剧膨胀,造成系统运行缓慢。
3.采用符号链接转移用户文件夹的用户,进行删除账户操作的时候,当慎之又慎。


w253092310 发表于 2013-2-4 09:52

哦,学习中,谢谢分享,win8用得挺蛋疼的

wwdboy 发表于 2013-2-4 09:57

这个没折腾过

Silver-Bullet 发表于 2013-2-4 10:00

知道了,我也吃了一次亏,害我重装了系统

sasalemma 发表于 2013-2-4 10:53

用MKLINK 又不用ROBOCOPY COPYALL的情况基本出问题。提醒过的。

aceyuan117 发表于 2013-2-4 11:16

我只把temp和缓存mklink到内存盘

拿铁不加糖 发表于 2013-2-4 11:19

我想知道的是为啥要转移用户文件夹呢?

拿铁不加糖 发表于 2013-2-4 11:32

还有一点symbolic link和hard link是从Windows 2000开始被支持的吧!

zjdzjd 发表于 2013-2-4 13:04

最好的方法是在分区的时候直接把系统盘空间加大。由于win8的metro开始的加入,势必会为win8带来一些新特性,而且开始屏幕是系统的核心组件其安全性尤为重要,系统盘文件夹的名称和位置都会或多或少的和metro应用相关联,随意更改系统文件夹的属性就会直接造成应用的不可用而闪退。因此还是奉劝那些想把win8的一些文件夹移出系统盘的朋友要三思,包括ie临时文件夹和temp文件夹。当然喜欢折腾的除外,但在折腾之前备份一下系统还是必要的。

enauvy 发表于 2013-2-4 13:45

转移用户文件夹主要是基于系统文件和数据文件分离的思维。
有以下两点考虑:
1.系统崩溃时数据文件不受影响;
2.系统重装时不用考虑数据的备份之类的问题。

当系统崩溃或重装系统时,需要对一些处于系统盘的数据文件进行备份,这个工作一是比较麻烦,而是容易疏漏。一方面一些比较多,比较大的数据备份很耗时,另一方面,很多程序(如virtualbox和很多专业工具软件)在安装之后会自动在系统分区生成一些数据文件夹(很多都是在用户文件夹中生成),其中一些程序可能会给出提示,让你选择用户数据的存放位置(如QQ等),但是大部分都是不给提示自己生成的,需要自己去发现和更改,更有甚者,数据文件夹根本就不能更改。

因此对于上述现象,目前比较好的办法就是用符号链接的方式移出用户文件夹,让很多需要在用户文件夹中生成或保存的文件自动转到数据盘。

不知道如果不采取这种方式,大家还有没有更好的办法?

拿铁不加糖 发表于 2013-2-4 15:53

enauvy 发表于 2013-2-4 13:45 static/image/common/back.gif
转移用户文件夹主要是基于系统文件和数据文件分离的思维。
有以下两点考虑:
1.系统崩溃时数据文件不受影 ...

我常用的一些文件都是放在桌面的,备份起来也还好,其次,除非万不得我是不会重新安装系统的,基本系统无法启动,我也会使用系统还原功能。在win8提供了系统重置和系统初始化功能,系统重置功能会在为你备份文件。win8的文件历史记录也是一个不错的功能。设置好之后,同步备份文件,无需其他操作。

SzqZys 发表于 2013-2-4 18:18

我每次装系统只把C:\Users\xxx\里的十一个没有隐藏的文件夹剪切到D盘中,软件(包括Office)也安装到D盘,经过无数次的系统还原没有出现任何不良现象。

Madevil 发表于 2013-2-8 16:21

本帖最后由 Madevil 于 2013-2-8 16:27 编辑

xcopy 配合 /b 只認得 symbolic link, 碰到 junction 它會複製檔案本身, 這樣複製的結果跟來源會產生差異

也就是說 xcopy c:\Users d:\Users\ /e /k /o /h /b 會把 C:\ProgramData 的 "內容" 複製到 D:\Users\Default User

而不是複製 junction link

lpcasd 发表于 2013-2-9 09:54

拿铁不加糖 发表于 2013-2-4 11:32还有一点symbolic link和hard link是从Windows 2000开始被支持的吧!

对的,但需要ntfs支持,以前xp系统区大多是fat32(ghost泛滥),用的人不多

amosgo 发表于 2013-2-9 10:15

- =路过传个之前上课无聊弄得mklink gui

uceadf 发表于 2013-2-11 16:08

用的robocopy复制,没出现闪退

5298990 发表于 2013-2-11 16:24

只用这个命令来转移一些应用的CACHE

pinwang777 发表于 2013-10-13 12:53

谢谢楼主分享!!!

tttoyyy 发表于 2013-10-18 02:22

多谢传授经验

anjiang66 发表于 2014-4-3 23:01

amosgo 发表于 2013-2-9 10:15 static/image/common/back.gif
- =路过传个之前上课无聊弄得mklink gui

想要这个mklink gui
页: [1] 2
查看完整版本: mklink并不是那么好玩的