之前的回顧:先說那些關(guān)于WSL的事情

文件系統(tǒng)

WSL特性出來后,很多人爭相安裝,包括筆者的同學(xué)爭先恐后體驗,但最后都成了黑子,因為大家都發(fā)現(xiàn)WSL中File IO太慢了。

*圖16 Inode實際上在中間維護(hù)了一個文件句柄

Windows本身可以處理區(qū)分大小寫。如前所述,Windows和NTFS實際上支持區(qū)分大小寫的操作,所以無論如何控制全局注冊密鑰,VolFs都會請求對象管理器將路徑視為區(qū)分大小寫。因此,切記不要在根目錄外使用WSL創(chuàng)建同名但大小寫不同的文件,這樣會對Windows的文件管理產(chǎn)生不可預(yù)知的后果。

Linux文件名也支持將所有字符視為合法字符。但是NT中有更多的限制,有些字符根本不允許作為文件名,有些字符可能有特殊含義。為了支持所有Linux文件名,VolFs對文件名中的非法字符進(jìn)行轉(zhuǎn)義。

Linux中的解除鏈接和重命名有一些不同的語義。具體來說,即使一個文件有一個打開的文件描述符指向它,它也可能被破壞。同樣,即使文件已打開,也可以重命名。在Windows中,如果要刪除一個文件,其最終狀態(tài)必須是關(guān)閉,文件名在文件系統(tǒng)中可見。為了支持Linux中的斷鏈語義,在請求刪除之前,VolFs會將斷鏈文件重命名為一個隱藏的臨時文件夾。

Linux inodes有一些Windows中不存在的屬性,包括所有者和組、文件模式等等。這些屬性存儲在與磁盤文件相關(guān)聯(lián)的NTFS擴(kuò)展屬性中。存儲在擴(kuò)展屬性中的信息如下:

模式:包括文件類型和文件的權(quán)限位。

所有者:擁有該文件的Linux用戶標(biāo)識和組標(biāo)識。

設(shè)備編號:設(shè)備檔案的主要設(shè)備編號和次要設(shè)備編號。請注意,WSL目前不允許用戶在卷文件系統(tǒng)中創(chuàng)建設(shè)備文件。

文件時間:Linux中文件訪問時間、修改時間、更改時間的格式和粒度與Windows不同,所以這些時間也存儲在EAs中。

其他索引節(jié)點屬性,如索引節(jié)點號和文件大小,是從存儲在NTFS中的信息中派生出來的。

所以WSL下的一些文件如果直接從Windows操作,這些基本信息很多都不會更新到Volfs,導(dǎo)致權(quán)限紊亂。

Drvfs

WSL使用DrvFs文件系統(tǒng),方便文件存儲與Windows系統(tǒng)的交互。WSL自動將具有可支持文件系統(tǒng)的卷裝載到/mnt目錄,如/mnt/c、/mnt/d等。目前只能支持NTFS和ReFs。

DrvFs的操作類似于VolFs。創(chuàng)建信息節(jié)點和文件對象時,請打開窗口文件的句柄。相比VolFs,DrvFs遵循Windows規(guī)則。比如DrvFs使用Windows權(quán)限,只允許合法的NTFS文件名;而且DrvFs不支持特殊的文件類型,比如FIFOs和sockets。

在DrvFs中,當(dāng)打開一個文件時,啟動WSL的用戶令牌的Windows權(quán)限是繼承的,也就是說,令牌是由執(zhí)行bash.exe的用戶生成的。因此,如果要訪問WSL中C:Windows目錄下的文件,就不能在bash環(huán)境中使用“sudo”。雖然您有根權(quán)限,但您的Windows用戶令牌沒有更改,您必須啟動bash.exe才能進(jìn)一步獲得適當(dāng)?shù)臋?quán)限。

為了提示用戶他對文件的權(quán)限,DrvFs檢查用戶的有效文件權(quán)限,并將其轉(zhuǎn)換為“讀/寫/可執(zhí)行”位,例如,通過執(zhí)行“l(fā)s -l”命令。然而,這些并不都是一對一的映射。例如,在Windows中,在目錄中創(chuàng)建文件和子目錄需要不同的權(quán)限。如果用戶有任何種類的權(quán)限,DrvFs被認(rèn)為對目錄具有寫訪問權(quán)限,但實際上,由于拒絕訪問,一些操作仍然可能失敗。

*圖片17 Drvfs盡可能實現(xiàn)一對一映射

因為對文件的有效訪問權(quán)限將根據(jù)bash.exe是否啟動而變化,所以DrvFs中顯示的文件權(quán)限也將隨著bash實例權(quán)限的提升而變化。

DrvFs支持區(qū)分大小寫的文件,也就是說可以創(chuàng)建兩個不同文件名的drvf。請注意,許多Windows應(yīng)用程序可能無法處理這種情況,并且可能無法打開一個或兩個文件。.

*圖片18哦...WSL和Windows打起來了

在卷根上禁用了區(qū)分大小寫,但它可以在其他地方使用。因此,為了使用區(qū)分大小寫的文件。與其嘗試創(chuàng)建/mnt/c,不如創(chuàng)建一個可以創(chuàng)建文件的目錄。

與VolFs不同,DrvFs不存儲任何額外的信息。相反,所有inode屬性都是通過查詢NT中使用的文件屬性、有效權(quán)限等信息派生出來的。DrvFs還禁用目錄條目緩存,以確保即使Windows進(jìn)程修改目錄內(nèi)容,它也能始終提供正確和最新的信息。因此,在使用DrvFs時,對Windows進(jìn)程處理文件的方式?jīng)]有任何限制。

DrvFs也對文件使用Windows刪除語義,所以如果一個文件中有任何打開的文件描述符,我們就不能取消它的鏈接。

*圖片19是WSL文件IO慢的原因之一

回到本段開頭提到的問題,WSL的File IO為什么慢?其實看完整篇文章應(yīng)該猜到原因了:因為WSL只是簡單的實現(xiàn)了Windows文件系統(tǒng)的抽象,所以WSL的File IO慢其實是Windows文件系統(tǒng)和Linux文件系統(tǒng)的區(qū)別造成的。在我的實驗中,我使用了一個壓縮包,它有一個很深的目錄和許多小文件。對于這種小文件,Windows本身比Linux弱,導(dǎo)致問題本身。

無線傳感器網(wǎng)絡(luò)存在的一些問題

雖然目前WSL的設(shè)計很完善,但WSL本身仍然存在很多問題。比如目前WSL中的所有進(jìn)程都是在Windows操作系統(tǒng)中直接以內(nèi)核模式運行的。雖然進(jìn)程本身是由Linux維護(hù)的,但是一旦出現(xiàn)前面提到的CVE,lxcore翻譯進(jìn)程就會直接受到攻擊技術(shù)的攻擊,這個進(jìn)程就會變得像沙盒逃逸一樣,對Windows本身的內(nèi)核產(chǎn)生影響。

WSL中的Elf和它所依賴的各種庫在加載時不設(shè)置標(biāo)志SEC_IMAGE,這意味著Windows的某些API和功能將無法跟蹤這個映像的映射過程。比如PsSetLoadImageNotifyRoutine會無法跟蹤相關(guān)的elf映射,導(dǎo)致監(jiān)控一些殺毒軟件失敗,AppLocker就不行。而且它的操作是強(qiáng)制區(qū)分大小寫的,所以可以繞過Windows中的注冊表開關(guān),強(qiáng)制區(qū)分大小寫。

WSL2

*圖片20 WSL還沒學(xué)完。又來了一個WSL2

在學(xué)習(xí)WSL的過程中,作者遇到了很多麻煩。當(dāng)研究有所進(jìn)展的時候,BUILD2019宣布WSL2發(fā)布。這時,內(nèi)心很復(fù)雜。

隨著6月13日WSL2的發(fā)布,很多粉絲也體驗到了它的特色。以下是對WSL中WSL2不同部分的簡要介紹:

1.WSL2不直接翻譯Linux內(nèi)核中斷調(diào)用,而是使用類似虛擬機(jī)的技術(shù)。以前微軟通過翻譯Linux的各種中斷和文件系統(tǒng)來抽象Linux系統(tǒng)。但是,其實還是有很多問題的。在直譯的過程中,有些內(nèi)容,比如命名空間,linux下的systemd,從VBF+EXT4到NTFS的轉(zhuǎn)換,還是很不方便的。新推出的WSL2將直接在Windows 4.19版本中嵌入一個Linux內(nèi)核,這是Linux內(nèi)核版本的LTS版本。如果是Linux的內(nèi)核,就意味著不再需要lx*的內(nèi)核驅(qū)動來翻譯中斷/文件系統(tǒng)的各種映射,可以原生支持Linux下的各種中斷調(diào)用。

2.WSL將保留,并且可以與WSL2交換,甚至可以同時運行兩個不同的WSL

3.因為是輕量級VM,所以依賴于Hyper-V的內(nèi)核,打開WSL2會和VBox、Vmware等軟件沖突

4.WSL2使用VHDX存儲根目錄,讓W(xué)SL2使用EXT4+VFS文件系統(tǒng),盡可能與真實的Linux保持一致。

總體來說,WSL2已經(jīng)有了很多新的特性,但是似乎還有很多問題還在開發(fā)中。讓我們拭目以待未來的特性。

參考網(wǎng)站:

http://www . Alex-iones Cu . com/publications/BlueHat/BlueHat 2016 . pdf

https://dev blogs . Microsoft . com/command line/annowing-wsl-2/

https://blogs.msdn.microsoft.com/wsl/

https://dev blogs . Microsoft . com/command line/what-new-for-wsl-in-windows-10-version-1903/

*以上部分圖片來自互聯(lián)網(wǎng)

1.《wsl 一起聊聊WSL的那些事兒(下)》援引自互聯(lián)網(wǎng),旨在傳遞更多網(wǎng)絡(luò)信息知識,僅代表作者本人觀點,與本網(wǎng)站無關(guān),侵刪請聯(lián)系頁腳下方聯(lián)系方式。

2.《wsl 一起聊聊WSL的那些事兒(下)》僅供讀者參考,本網(wǎng)站未對該內(nèi)容進(jìn)行證實,對其原創(chuàng)性、真實性、完整性、及時性不作任何保證。

3.文章轉(zhuǎn)載時請保留本站內(nèi)容來源地址,http://f99ss.com/shehui/1769491.html