Windows Vista內現神秘超大WinSxS文件夾
這是一個在安裝Windows Vista和Windows Server 2008時候經常被提及的問題.為了解答這個問題,首先我們要了解“組件化”這個詞的含義,然后再談一談Vista里面的組件們是如何被管理的。
Vista相比于前任的重大變化之一就是從用“安裝配置”(INF文件)描述的操作系統過渡到組件化的系統.Windows中的所謂“組件”就是一或多個二進制文件,一個索引文件,還有一個描述安裝過程如何進行的XML格式文檔。這個文檔描述了可能的注冊表操作或者安全權限需求.組件們以邏輯單元分組,這些單元的不同就是Windows不同版本的區別。
WinSxS這個文件夾存放了Windows所需要的所有組件。每一個組件都有屬于自己的命名,可以看出它屬于何種版本、語言,以及是32位還是64位的Windows。每當系統需要任何一種文件的時候,都會從這個文件夾找到相應的文件,再拷貝到需要的路徑里面,或者直接創建一個映射,指向winsxs文件夾里的源文件(顯然這么做對硬盤空間仁慈多了)。也就是說,實際上Winsxs這個文件夾和Windows完全安裝一次所需的磁盤空間一樣大。
這樣一來,我們便不能完全從硬盤上刪除某種Windows功能,就像我們剛剛在xp里還能做到的那樣。(你也許注意到了,控制面板“程序和功能”里有一個“打開或關閉Windows功能”選項——而不是“添加或刪除Windows功能”。)
也是因為如此,理論上winsxs這個文件夾并不會隨著時間推移越來越臃腫,塞進一些天知道是什么的東西(很不幸,很多Windows文件夾都有自動增肥的功能)。但有一個例外——就是如果你安裝了一項功能的更新(例如通過WindowsUpdate),那么為了方便你回滾有問題的更新,新舊兩種文件副本會同時存放在Winsxs文件夾里!(看來要雙手合十祈禱微軟能一次性更新盡可能多的補丁,而不是一次一個,一次一個……)
微軟這么做顯然能大大提高產品的穩定性。因為每個更新版本都有副本保存,所以當我們回滾一個更新時,會退回到次新的版本,不會出現版本號混亂的局面。而且,如果要添加一個新功能,系統會檢查是否已經有了版本號更新的組件,而不是直接插入光盤,因為那樣只會裝上RTM的舊版本。
最后,安全的削減Winsxs文件夾的大小,只有一個辦法,就是盡可能去掉自己不用的組件及其更新。雖然微軟沒有提供官方的整合SP1到VistaRTMISO的辦法,但是SP1中的一個小程序VSP1CLN.EXE可以永久整合SP1到系統,刪除一切用于回滾的版本備份,這樣便不能回退到RTM。
(在現在硬盤容量向TB邁進的時候,犧牲一部分硬盤空間來換取比以往更高的安全性,也許是比較劃算的辦法。看來Vista的確是面向未來而設計的一款系統。)
文章作者JosephConway,微軟企業級平臺支持高級工程師。
