硬链接问题:不应使用Xcopy移动C:\Program Files目录到数据盘

有一些文章提到了可以使用xcopy将C:\Program Files、C:\Program Files (x86)、C:\ProgramData、C:\Users移动到D盘,然后在C盘建立NTFS符号链接以减少空间占用。例如:

xcopy /e /h /k /x /y /b /c “C:\Program Files” “D:\Program Files”
rd /s “C:\Program Files”
mklink /j “C:\Program Files” “D:\Program Files”

笔者有一段时间也这样做过,但最近经过深入研究,发现这样做忽视了一个很大的问题——NTFS硬链接。

windows vista以上,所有系统文件的实际上均存放在winsxs目录中,然后在system32或syswow64目录下建立硬链接,这样实际上只占用一份空间。安装更新时也是这样做,新文件与旧文件并存,然后将硬链接改到新的文件上。删除文件时,必须将一个文件所有的“指针”都删除文件才会真正删除。

wim镜像支持NTFS硬链接的保存,通过imagex /info可以看到,安装盘中有4G的文件是存在硬链接的。

这样一来移动Program Files到D盘对于windows自带软件,如ie、wmp等完全无法起到省空间的作用,因为它们在winsxs中还有一份指针。并且就算是以后再移动回来,硬链接也无法恢复,还是会多占用一份空间。

另外,由于该问题,使用目录符号链接将C:\Program Files指向D:\Program Files会造成windows update对ie等软件更新失败,因为自动更新无法在已经符号链接到D盘的Program Files目录中创建指向winsxs的硬链接。网上也有人遇到过,说将注册表Program Files目录改为D盘即可,然而没人搞清楚为什么。

硬链接只有在安装系统、安装更新时能够自动地建立。一旦破坏,除了微软没人知道应该怎么科学地重建。如果是换硬盘而不想重装系统,千万不能使用xcopy,而要使用基于文件系统的拷贝,如imagex捕获镜像再应用到新盘上,或ghost partition to partition。否则在win7下最少会造成5G空间浪费,在win8和win10上由于自带显卡驱动包这个数字可能高达几十G。

Users目录倒是可以移动到D盘然后建立符号链接,不过个人建议只动自己的用户目录。

2 Replies to “硬链接问题:不应使用Xcopy移动C:\Program Files目录到数据盘”

    1. 硬链接只能存在于同一NTFS卷中,任何将系统目录复制到D盘都是不对的。

Leave a Reply

Your email address will not be published. Required fields are marked *