ביצועי מערכת הקבצים ב-WSL: למה גישה חוצת מערכות הפעלה מאטה את הקוד שלכם
By Mirko Peters ·
למדו מדוע גישה לקבצים חוצת מערכות הפעלה מאטה את WSL. גלו שיטות עבודה מומלצות לאחסון מקומי ב-Linux ולהאצת תהליכי הפיתוח שלכם.
Automatically translated with AI from the original post. Read the English original

גלו מדוע שילוב של מערכות קבצים של Windows ו-Linux בתוך Windows Subsystem for Linux (WSL) יוצר צווארי בקבוק משמעותיים בביצועים. למדו את הכללים החיוניים לשמירת תיקיות הפרויקט שלכם בצד הנכון של גבול מערכת ההפעלה, כדי להאיץ משמעותית משימות בנייה כבדות בדיסק, התקנות חבילות ופעולות git.
עיקרי הדברים
- אחסון קבצי פרויקט של Linux בכוננים של Windows (דרך /mnt/c/) גורם להידרדרות חמורה בביצועים, בשל עלויות התרגום בחציית הגבול.
- תיקיות עצים גדולות מאוד, כמו node_modules, סובלות במיוחד מחציית גבול מערכת ההפעלה במהלך בנייה ועדכונים.
- ההמלצה הרשמית של Microsoft היא לשמור את הקבצים באותה מערכת הפעלה כמו הכלים שבהם אתם עורכים ומהדרים אותם.
- ל-VS Code יש תוסף Remote WSL שמאפשר לערוך קבצים המאוחסנים ב-Linux דרך ממשק Windows, ללא פגיעה בביצועים.
- כללי הרגישות לאותיות גדולות וקטנות שונים מאוד בין מערכות הקבצים של Windows ל-Linux, ולכן מיקום נכון של התיקיות חיוני כדי להימנע מבאגים בלתי צפויים.
הבנת החלוקה בין מערכות הקבצים של Windows ו-Linux
אחת הטעויות הנפוצות ביותר שמפתחים נתקלים בהן בעת אימוץ Windows Subsystem for Linux היא מיקום שגוי של קבצים. Windows ו-Linux מנהלים את האחסון הבסיסי שלהם לפי פרדיגמות ארכיטקטוניות שונות לחלוטin. כאשר אתם מריצים WSL 2, אתם משתמשים בליבת Linux אמיתית הפועלת בתוך מכונה וירטואלית קלת משקל. משמעות הדבר היא שהתפוצה שלכם ב-Linux מתחזקת מערכת קבצים מקומית ומבודדת משלה, הפועלת לפי תקני POSIX.
לעומת זאת, סביבת Windows הרגילה שלכם מסתמכת על NTFS, ומשתמשת באותיות כונן כמו הכונן C:. כדי לגשר על הפער, WSL מרכיב אוטומטית את כונני Windows שלכם בתוך סביבת Linux, תחת התיקייה /mnt/ – למשל, הכונן C מופיע כ-/mnt/c. אמנם זה מאפשר לקרוא ולכתוב כל קובץ במחשב המארח מתוך הטרמינל של Linux, אך הדבר יוצר מס ביצועים נסתר ויקר מאוד, המכונה נתיב התרגום החוצה-גבולות.
מדוע גישה לקבצים חוצת גבולות היא איטית
בכל פעם שכלי Linux קורא או כותב קובץ הנמצא בצד Windows של המערכת, הבקשה חייבת לעבור את הגבול בין המכונה הווירטואלית הקלת משקל לבין מארח Windows. עבור קובץ טקסט בודד או סקריפט קטן, תקורת התרגום הזו בלתי מורגשת. עם זאת, זרימות עבודה מודרניות בפיתוח תוכנה כמעט אף פעם לא כוללות קובץ אחד בלבד.
שקלו מה קורה כאשר מריצים פקודה כמו npm install או git clone על תיקיית פרויקט הנמצאת בתוך /mnt/c/my-project. פעולות אלו יוצרות אלפי בקשות ליצירה ולשינוי של קבצים קטנים בזה אחר זה. כל אחד מהקבצים הקטנים הללו משלם את עלות החציה. התוצאה המצטברת היא שפעולות שאמורות להימשך שניות יכולות להתארך לדקות, ומפתחים רבים טועים לחשוב ש-WSL עצמו איטי מטבעו, בעוד שהגורם האמיתי הוא פשוט מיקום לא נכון של התיקיות.
רגישות לאותיות ותנגשויות הרשאות
גם מעבר בין מערכות ההפעלה לא פוגע רק בביצועים. כללי מערכת הקבצים הבסיסיים מתנגשים גם הם, באופן שעלול לשבור יישומים. מערכת הקבצים המקורית של Linux רגישה לאותיות גדולות וקטנות בצורה מחמירה. שני קבצים בשם Script.js ו-script.js נחשבים לשני ישויות נפרדות לחלוטין. ב-NTFS של Windows, כברירת מחדל, אין הבחנה בין אותיות גדולות לקטנות.
יתרה מכך, כלי שורת הפקודה של Linux מסתמכים בעיקר על דגלי בעלות והרשאות שמנוהלים על ידי כלים כמו chmod ו-chown. מערכות הקבצים של Windows אינן ממפות הרשאות אלה באופן מקורי בצורה שכלי Linux מצפים לה. כשמריצים קוד על פני הגבול בין המערכות, קישורים סימבוליים עלולים שלא להיפתר כראוי, וסקריפטים של בנייה עלולים להציג שגיאות לא ברורות, משום שהם לא יכולים להחיל את ההרשאות שסביבת הריצה דורשת.
שיטות עבודה מומלצות לתהליכי עבודה מהירים ב-WSL
כדי להימנע ממלכודות הביצועים האלה ולשמור על חוויית פיתוח חלקה ככל האפשר, כדאי לאמץ שתי הרגלים יסודיים. ראשית, יש להחזיק תמיד את פרויקטי Linux שלכם בתוך מערכת הקבצים המקורית של Linux (במקום כלשהו בתיקיית הבית, למשל ~/projects/), ואת הפרויקטים שמבוססים על Windows בלבד להשאיר בצד של Windows.
שנית, יש לנצל את העוצמה של כלים מודרניים כדי לגשר על ממשק המשתמש בלי להקריב את מהירות ההרצה. אין צורך לוותר על עורכי הקוד האהובים עליכם ב-Windows. באמצעות התוסף Remote - WSL עבור Visual Studio Code, ניתן לפתוח פרויקט השמור כולו במערכת הקבצים המקורית של Linux, ולהנות מממשק גרפי מגיב ומוכר של Windows. העורך פועל ב-Windows, אבל הרצת הקוד, הבדיקות וניהול החבילות מתבצעים במהירות מרבית בתוך סביבת Linux.
סיכום והצעדים הבאים
שליטה בגבולות מערכת הקבצים היא הצעד החשוב ביותר בהפיכת WSL מניסוי מתסכל לכלי העבודה היומיומי שלכם. כשהכלים והקבצים שלכם מיושרים בצד הנכון של הפער בין מערכות ההפעלה, אתם מבטלים השהיות ומונעים שגיאות הרשאות לא ברורות.
למבט רחב יותר על האופן שבו התכונה הזו משתלבת בתהליכי פיתוח ובענן מודרניים, האזינו לפרק המלא של M365 FM Podcast. צללו לשיחה המלאה כדי לגלות קיצורי דרך להתקנה, השוואות גרסאות, וכיצד WSL מגשר על הפער בין מכונות מקומיות לתשתית הענן של Azure!
שאלות נפוצות
היכן כדאי לאחסן את קבצי הפרויקט שלי בעת שימוש ב-WSL?
כדאי לאחסן את קבצי הפרויקט בתוך מערכת הקבצים המקורית של Linux (למשל בתיקיית הבית, לדוגמה ~/my-project), ולא בכונני Windows המחוברים (כמו /mnt/c/), כדי להבטיח מהירות קריאה וכתיבה מרבית.
מדוע הרצת npm install איטית בכונן Windows תחת WSL?
מנהלי חבילות כמו npm או pip יוצרים אלפי קבצים קטנים במהלך ההתקנה. כשהקבצים האלה נכתבים דרך הגבול בין מערכות ההפעלה אל כונן NTFS של Windows, לכל קובץ נוספת תקורת תרגום, וזה גורם לצווארי בקבוק משמעותיים בביצועים.
האם ניתן להשתמש ב-Visual Studio Code כדי לערוך קבצים השמורים במערכת הקבצים של Linux?
כן. על ידי התקנת התוסף Remote - WSL עבור Visual Studio Code, ניתן לפתוח, לערוך ולנפות שגיאות בקבצים שנמצאים בתוך הפצת Linux של WSL, תוך שימוש בממשק העורך הסטנדרטי של Windows.
מה ההבדל בין האופן שבו Windows ו-Linux מטפלים בשמות קבצים?
מערכות הקבצים של Linux רגישות לאותיות גדולות וקטנות בצורה מחמירה (ומתייחסות אל File.txt ו-file.txt כאל שני קבצים שונים), בעוד ש-NTFS של Windows אינו מבחין בין אותיות גדולות לקטנות כברירת מחדל. הרצת כלי Linux על תיקיות המאוחסנות ב-Windows גורמת לעיתים קרובות לכישלונות בבנייה, בשל ההבדלים ההתנהגותיים האלה.