Wydajność systemu plików WSL: dlaczego dostęp między systemami operacyjnymi spowalnia Twój kod
By Mirko Peters ·
Dowiedz się, dlaczego dostęp do plików między systemami operacyjnymi spowalnia WSL. Poznaj najlepsze praktyki dotyczące natywnego magazynu Linux i przyspieszania przepływów pracy deweloperskiej.
Automatically translated with AI from the original post. Read the English original

Dowiedz się, dlaczego mieszanie systemów plików Windows i Linux w podsystemie Windows dla Linux (WSL) tworzy poważne wąskie gardła wydajnościowe. Poznaj kluczowe zasady przechowywania katalogów projektów po właściwej stronie granicy systemu operacyjnego, aby znacząco przyspieszyć zadania kompilacji wymagające intensywnej pracy dysku, instalację pakietów i operacje git.
Najważniejsze wnioski
- Przechowywanie plików projektów Linux na dyskach Windows (za pośrednictwem /mnt/c/) powoduje znaczny spadek wydajności z powodu kosztów translacji na granicy systemów.
- Rozbudowane drzewa plików, takie jak katalogi node_modules, najbardziej cierpią podczas przekraczania granicy systemu operacyjnego podczas kompilacji i aktualizacji.
- Oficjalne zalecenie Microsoftu to przechowywanie plików w tym samym systemie operacyjnym co narzędzia służące do ich edycji i kompilacji.
- VS Code oferuje rozszerzenie Remote WSL, które pozwala płynnie edytować pliki hostowane w Linux, korzystając z interfejsu Windows, bez utraty wydajności.
- Zasady rozróżniania wielkości liter znacznie różnią się między systemami plików Windows i Linux, dlatego właściwe umiejscowienie katalogów jest kluczowe, aby uniknąć nieoczekiwanych błędów.
Zrozumienie podziału systemów plików Windows i Linux
Jednym z najczęstszych błędów, na jakie napotykają deweloperzy przy przejściu na podsystem Windows dla Linux, jest niewłaściwe umiejscowienie plików. Windows i Linux zarządzają swoją pamięcią masową w zupełnie innych paradygmatach architektonicznych. Gdy uruchamiasz WSL 2, korzystasz z prawdziwego jądra Linux działającego w lekkiej maszynie wirtualnej. Oznacza to, że dystrybucja Linux posiada własny, odizolowany, natywny system plików Linux, działający zgodnie ze standardami POSIX.
Z kolei standardowe środowisko Windows opiera się na systemie NTFS i wykorzystuje litery dysków, takie jak dysk C:. Aby przełamać tę barierę, WSL automatycznie montuje dyski Windows w środowisku Linux w katalogu /mnt/ – na przykład dysk C jest widoczny jako /mnt/c. Choć pozwala to odczytywać i zapisywać każdy plik na komputerze hosta z poziomu terminala Linux, wiąże się to z ukrytym, bardzo kosztownym obciążeniem wydajnościowym, znanym jako ścieżka translacji na granicy systemów.
Dlaczego dostęp do plików między systemami się ślimaczy
Za każdym razem, gdy narzędzie Linux odczytuje lub zapisuje plik znajdujący się po stronie Windows, żądanie musi przejść przez granicę między lekką maszyną wirtualną a systemem hosta Windows. Dla pojedynczego pliku tekstowego lub małego skryptu narzut translacji jest niezauważalny. Nowoczesne przepływy pracy deweloperskiej rzadko jednak obejmują tylko jeden plik.
Rozważ, co się dzieje, gdy uruchamiasz polecenie takie jak npm install lub git clone w katalogu projektu znajdującym się w /mnt/c/my-project. Operacje te generują tysiące drobnych żądań utworzenia i modyfikacji plików w szybkim tempie. Każdy z tych małych plików ponosi koszt przekroczenia granicy. Łącznie efekt jest taki, że operacje, które powinny trwać sekundy, mogą ciągnąć się minutami, co prowadzi wielu deweloperów do błędnego przekonania, że sam WSL jest z natury wolny, podczas gdy winowajcą jest po prostu zła lokalizacja katalogów.
Różnice w wielkości liter i konflikty uprawnień
Wydajność to nie jedyna ofiara przekraczania granicy systemów operacyjnych. Zasady działania systemu plików również kolidują ze sobą w sposób, który psuje aplikacje. Natywny główny katalog systemu plików Linux jest ściśle rozróżniający wielkość liter. Dwa pliki o nazwach Script.js i script.js są traktowane jako zupełnie odrębne obiekty. System plików Windows NTFS domyślnie nie rozróżnia wielkości liter.
Ponadto narzędzia wiersza poleceń Linuksa w dużym stopniu polegają na flagach własności i uprawnień zarządzanych przez narzędzia takie jak chmod i chown. Systemy plików Windows nie odwzorowują tych uprawnień natywnie w sposób, jakiego oczekują narzędzia Linuksa. Gdy uruchamiasz kod na granicy systemów, dowiązania symboliczne mogą nie zostać poprawnie rozwiązane, a skrypty budowania mogą zgłaszać niejasne błędy, ponieważ nie mogą zastosować uprawnień plików wymaganych przez środowisko uruchomieniowe.
Najlepsze praktyki szybkich przepływów pracy w WSL
Aby uniknąć tych pułapek wydajnościowych i zachować płynne środowisko programistyczne, warto przestrzegać dwóch podstawowych zasad. Po pierwsze, zawsze przechowuj projekty Linuksa w natywnym systemie plików Linux (w katalogu domowym, na przykład ~/projects/), a projekty oparte wyłącznie na Windows trzymaj po stronie Windows.
Po drugie, wykorzystaj nowoczesne narzędzia, aby połączyć interfejs użytkownika bez poświęcania szybkości wykonywania. Nie musisz rezygnować ulubionych edytorów z Windows. Dzięki rozszerzeniu Remote - WSL dla Visual Studio Code możesz otworzyć projekt przechowywany w całości w natywnym systemie plików Linux, korzystając jednocześnie z responsywnego, znanego interfejsu graficznego Windows. Edytor działa w Windows, ale wykonywanie kodu, testowanie i zarządzanie pakietami odbywają się z maksymalną szybkością w środowisku Linux.
Podsumowanie i kolejne kroki
Opanowanie granic systemów plików to najważniejszy krok w przekształcaniu WSL z frustrującego eksperymentu w codzienne narzędzie pracy. Dbając o to, by narzędzia i pliki znajdowały się po właściwej stronie podziału systemu operacyjnego, eliminujesz opóźnienia i unikasz niejasnych błędów uprawnień.
Szerszy obraz tego, jak ta funkcja integruje się z nowoczesnymi przepływami pracy programistycznej i chmurowymi, znajdziesz w pełnym odcinku podcastu M365 FM. Posłuchaj całej rozmowy, aby poznać skróty instalacji, porównania wersji i sposób, w jaki WSL łączy lokalne maszyny z infrastrukturą chmury Azure!
Często zadawane pytania
Gdzie powinienem przechowywać pliki projektów podczas korzystania z WSL?
Pliki projektów powinny znajdować się w natywnym systemie plików Linux (na przykład w katalogu domowym, np. ~/my-project), a nie na zamontowanych dyskach Windows (takich jak /mnt/c/), aby zapewnić maksymalną szybkość odczytu i zapisu.
Dlaczego polecenie npm install jest wolne na dysku Windows w WSL?
Menedżery pakietów, takie jak npm czy pip, podczas instalacji tworzą tysiące drobnych plików. Gdy są zapisywane przez granicę systemów operacyjnych na dysku Windows NTFS, każdy pojedynczy plik wiąże się z narzutem translacji, co powoduje znaczne wąskie gardła wydajności.
Czy mogę używać Visual Studio Code do edycji plików przechowywanych w systemie plików Linux?
Tak. Po zainstalowaniu rozszerzenia Remote - WSL dla Visual Studio Code możesz natywnie otwierać, edytować i debugować pliki znajdujące się w dystrybucji Linux WSL, korzystając ze standardowego interfejsu edytora Windows.
Jaka jest różnica w sposobie, w jaki Windows i Linux obsługują nazwy plików?
Systemy plików Linux są ściśle rozróżniające wielkość liter (traktują File.txt i file.txt jako różne pliki), natomiast Windows NTFS domyślnie nie rozróżnia wielkości liter. Uruchamianie narzędzi Linuksa w katalogach hostowanych w Windows często powoduje błędy kompilacji z powodu tych różnic w działaniu.