לדלג לתוכן

Lesson 06 - Asset A: Instructor Reference (Book-Book)

1. מהפיכת APFS (The APFS Revolution)

1. High-Level Theory & History

המעבר ל-APFS (Apple File System) בשנת 2017 מסמן את אחת המהפכות השקטות והקריטיות ביותר בהיסטוריה של מחשבי ה-Mac. במשך כמעט 20 שנה הסתמכה Apple על פורמט ה-HFS+ (Mac OS Extended) המיושן, שעוצב במקור לעידן של כוננים מכניים (Spinning HDDs). בעוד ש-HFS+ התבסס על Journaling בלבד, מערכות מודרניות מבוססות Flash Storage ו-SSD דרשו גישה חדשה. ה-APFS נבנה מהיסוד על עיקרון ה-Copy-on-Write, שמפחית דרמטית כתיבות מיותרות, מונע שחיתות נתונים (Data Corruption) ומאפשר ביצוע פעולות קריטיות כמו שכפול קבצים (Cloning) וצילומי מסך של הדיסק (Snapshots) בשברירי שנייה ובלי לתפוס מקום נוסף. מהפכה משמעותית נוספת היא ניהול השטח הדינמי: במקום מחיצות קשיחות (Partitions) ומוגדרות מראש כמו ב-HFS+, ה-APFS משתמש ב״מכולות״ (Containers) שחולקות מקום פנוי בצורה שקופה בין מספר רב של כרכים (Volumes).

2. Deep Technical Architecture

ברמה הארכיטקטונית, מבנה ה-APFS בנוי בשתי שכבות עיקריות: ה-Container (המכולה) וה-Volumes (הכרכים) שבתוכה.

  • ה-Container: זהו אוסף האחסון הראשי המכסה את המחיצה הפיזית בדיסק. הוא מנהל את כל השטח הפנוי (Free Space) עבור הכרכים שלו.
  • ה-Volumes: כרכים מרובים יכולים להתקיים בתוך אותו Container, וכולם חולקים את אותו המקום הפנוי. כאשר כרך אחד גדל, הוא פשוט נוגס ממאגר השטח הכללי של המכולה ללא צורך בהגדרה מראש של גודל (מעקף הבעיה ההיסטורית של Repartitioning).
  • Copy-on-Write (CoW): בניגוד למערכות ישנות שכותבות מידע מחדש על גבי המידע הקיים או דורשות Journaling מורכב, APFS מגן על נתונים כך ששינוי בקובץ או במטא-דאטה מתבצע תמיד על ידי כתיבה לבלוקים חדשים. רק לאחר שהכתיבה החדשה מסתיימת בהצלחה, המצביע (Pointer) מועבר לנתונים החדשים. דבר זה מבטיח שאפילו במקרה של קריסה או הפסקת חשמל במהלך שמירה, הקובץ המקורי לא ייפגע.
  • Clones (שכפולים סמויים): אחת מהתכונות המהפכניות ביותר ב-APFS (המוזכרת בהרחבה בתיעוד הרשמי של Apple Developer). כאשר קובץ או תיקייה משוכפלים בתוך אותו Volume (על ידי שימוש ב-Finder או על ידי ה-API של המערכת clonefile()), המערכת לא באמת מעתיקה את הנתונים ולא ממתינה לזמן כתיבה. במקום זאת, APFS יוצר באופן מיידי "Clone" – מצביע שני בדיוק לאותם הבלוקים בדיסק.
  • התוצאה היא ששכפול קובץ של 10GB קורה בשבריר שנייה ולא תופס אפילו בייט אחד נוסף (Zero-storage overhead).
  • רק כאשר המשתמש משנה את אחד מהעותקים, ה-Copy-on-Write מופעל ורק השינויים (ה-Delta) נכתבים לבלוקים חדשים ותופסים מקום. פקודת cp -c בטרמינל מאפשרת אכיפה ידנית של יצירת Clone.
  • Sparse Files: קבצים "דלילים" שמוקצה להם מקום רק כשנכתב אליהם מידע ממשי.

3. Terminal Commands, Plists & Logs

  • Terminal Commands:

  • diskutil list – הצגת היררכיית הכוננים, המכולות (Containers) והכרכים (Volumes) של APFS.

  • diskutil apfs list – צלילה לעומק תצורת ה-APFS, הצגת קבוצות הכרכים, סטטוס ההצפנה ומידע על שיתוף המקום.
  • diskutil apfs addVolume diskX APFS NewVolName – הוספת כרך חדש (שחולק מקום באופן דינמי) למכולה קיימת בזמן אמת בלי צורך לפרמט.
  • Plists & Logs:

  • ניתן לקרוא תהליכי שירות של APFS (כמו fsck_apfs) וקריסות כוננים ב-Console.app תחת ה-Subsystem של com.apple.apfs או בחיפוש מונחי מפתח ב-system.log.

4. Edge Cases & Troubleshooting

  • Edge Case - APFS Container Overload: משתמש מוסיף Volumes ללא בקרה ומוצא את עצמו במצב שבו "כונן א' מלא" כיוון ש"כונן ב'" גזל את כל המקום הפנוי המשותף.
  • Troubleshooting: שימוש ב-Quota (הגבלה עליונה) או Reserve (הבטחת מינימום שטח) בעת יצירת הכרך באמצעות פקודות כמו diskutil apfs addVolume diskX APFS "MyVol" -quota 50g.
  • Edge Case - fsck_apfs Stuck: קריסות פתאומיות עשויות לעורר ריצת fsck_apfs ארוכה מאוד ברקע בבוט הבא, מה שיראה למשתמש כאילו המחשב תקוע על ה-Apple Logo.
  • Troubleshooting: מעבר ל-Verbose Mode (Cmd+V בזמן ההפעלה, תלוי ארכיטקטורה) או בוט למצב Recovery והרצת First Aid דרך ה-Disk Utility. חשוב לזכור ש-First Aid פשוט מריץ fsck_apfs עם דגלים ספציפיים על ה-Container וה-Volumes שלו מלמעלה למטה.

2. הפרדת המערכת (SSV) (System Separation)

1. High-Level Theory & History

עם המעבר ל-macOS Catalina ואילך (ובצורה מהודקת ב-Big Sur), מערכת ההפעלה התפצלה גיאוגרפית ולוגית כדי לשמור על האמינות והאבטחה. המהלך יצר את ה-System Volume Group (SVG) – קבוצת כרכים המורכבת משני כרכים נפרדים המחוברים יחד. המטרה היתה ליצור חומת אש פנימית שתמנע מנוזקות (Malware) או אפילו מטכנאים להשחית בטעות את קבצי הליבה של macOS. בעבר, הכל שכב יחד על מחיצה אחת (Macintosh HD), אך כיום מחיצת המערכת (System) סגורה הרמטית לקריאה בלבד וחתומה קריפטוגרפית (SSV - Signed System Volume), ואילו מידע המשתמשים ואפליקציות צד-שלישי שוכנים במחיצה גמישה ונפרדת (Data). כדי שהמשתמש והאפליקציות לא ירגישו בהבדל, הומצא מנגנון ה-Firmlinks, ה"תופר" את שתי המחיצות הללו ל-Macintosh HD אחד ואחיד.

2. Deep Technical Architecture

  • System Volume Group (SVG): הארכיטקטורה מאחדת שני Volumes פנימיים (ה-System וה-Data) הממופים תחת קבוצה אחת.
  • The Signed System Volume (SSV): ב-macOS Big Sur ומעלה, מחיצת ה-System לא רק שהיא מוגדרת כקריאה בלבד, אלא היא גם חתומה ומוצפנת ברמת הבלוק (Sealed and Signed). המערכת עצמה עושה בוט (Boot) למעשה מתמונת מצב (Snapshot) מהימנה, המאומתת באופן רציף מול חתימות קריפטוגרפיות קשיחות. אם אפילו בייט אחד של מערכת ההפעלה ישתנה באופן לא מורשה, המערכת תזהה את השבירה ותסרב לעלות.
  • Firmlinks: להבדיל מסתם Symlinks המהווים הפניות חד-כיווניות ושבריריות (שלעיתים חושפות את הנתיב האמיתי למשתמש ועלולות להימחק), ה-Firmlinks הם קישורים דו-כיווניים עמוקים הכלולים ברמת ה-APFS עצמו. הם מתפקדים כ"חורי תולעת" (Wormholes) שמחברים ספריות מסוימות במחיצת ה-System (כמו /System/Applications) לתיקיות במחיצת ה-Data (כמו /Applications), כך שעבור ה-Finder או בטרמינל הן נראות כתיקייה אחת הרמונית. את הרשימה המלאה של ה-Firmlinks במערכת ניתן לראות בקובץ סטטי הממוקם בנתיב מוגדר ב-usr.

3. Terminal Commands, Plists & Logs

  • Terminal Commands:

  • הרצת פקודת ה-mount הבסיסית כדי לראות את ההפרדה: mount

  • diskutil apfs list – כאן ניתן לראות תחת ה-Container את ה-Volumes המתויגים תחת התפקיד (Role) כ-System ו-Data, וכמו כן את ה-Snapshot שדרכו בוצע הבוט האקטיבי.
  • Plists & Logs:

  • רשימת ה-Firmlinks הרשמית (והקבועה) שמערכת macOS יוצרת: הקובץ המצוי ב- /usr/share/firmlinks. ניתן לצפות בו על ידי: cat /usr/share/firmlinks. כל שורה מכילה קישור שמחבר נתיב מה-System אל ה-Data.

4. Edge Cases & Troubleshooting

  • Edge Case - Orphaned Data Volume: במקרי שחזור מערכת לא תקינים או מחיקות שגויות ב-Disk Utility, נוצר נתק בין ה-System volume ל-Data Volume, ומשתמשים מוצאים את עצמם עם כוננים בשם Macintosh HD - Data שאינם מחוברים לאף מערכת הפעלה וצוברים נפח.
  • Troubleshooting: אין דרך מובנית ופשוטה "לתפור" אותם מחדש עם Firmlinks דרך הממשק הגרפי. לרוב יש לגבות את המידע הקריטי מתוך ה-Orphaned volume, למחוק את כל קבוצת הכרכים הבעייתית (ה-Volume Group כולה) דרך ה-Disk Utility במצב Recovery, ולבצע התקנה מלאה ונקייה המייצרת System/Data טריים.
  • Edge Case - Unable to modify "System" folders: משתמשים בעלי הרשאות root (sudo) שמנסים לכתוב קבצים ל-/System או /usr/bin מקבלים הודעת Read-only file system למרות ביטול ה-SIP (System Integrity Protection).
  • Troubleshooting: המצב תקין ומכוון - ה-SSV סגור הרמטית. שינויים ניתן לעשות רק באזורים השייכים ל-Data (כמו /usr/local/bin), לשם מנותבים התוספים השונים בהתאם לארכיטקטורת ה-Firmlinks.

3. מרחבי מערכת הקבצים (File System Domains)

1. High-Level Theory & History

מערכת הקבצים ב-macOS מחולקת רעיונית ל"מרחבים" (Domains) שונים כדי להפריד בין קבצי מערכת קריטיים, קבצים מקומיים הרלוונטיים לכלל המשתמשים, נתונים אישיים של משתמש ספציפי, ונתוני רשת. חלוקה זו (המוסברת בהרחבה במסמך DeepDive_File_System_Domains) מסייעת לשמור על יציבות המערכת (שכן משתמש רגיל לא יכול לפגוע בקבצי ליבה) ומאפשרת ניהול הרשאות יעיל ברמה הארגונית.

2. Deep Technical Architecture

  • User Domain (מרחב המשתמש): מכיל משאבים ספציפיים למשתמש המחובר (Home Directory). מיוצג לרוב על ידי תו הטידל (Tilde) ~ (לדוגמה: ~/Library). במרחב זה יושבות תיקיות כמו Desktop, Documents, Downloads, ועוד. המשתמש מחזיק בשליטה מלאה במרחב זה ללא צורך בסיסמת מנהל.
  • Local Domain (מרחב מקומי): מכיל משאבים הזמינים לכל המשתמשים במחשב אך אינם קריטיים להפעלת הליבה של macOS. למשל, תיקיית האפליקציות הכללית (/Applications) או ספריות משותפות (/Library). שינוי במרחב זה דורש הרשאות Administrator.
  • Network Domain (מרחב רשת): מכיל משאבים המשותפים לכל המשתמשים ברשת המקומית, כגון שרתי קבצים (NFS/SMB) המנוהלים על ידי מנהל הרשת (/Network).
  • System Domain (מרחב המערכת): כאן שוכנים קבצי הליבה שסופקו על ידי Apple (/System). מרחב זה, כאמור בסעיף ה-SSV, נעול הרמטית ואפילו מנהל מערכת (Administrator) אינו יכול לשנות בו קבצים.

3. Terminal Commands, Plists & Logs

  • Terminal Commands:
  • שימוש בקיצור הטידל לנווט במהירות למרחב המשתמש: cd ~/Desktop במקום cd /Users/username/Desktop.
  • חיפוש כפילויות של העדפות (Preferences) בין מרחב המשתמש למרחב המקומי (לדוגמה, בדיקת /Library/Preferences לעומת ~/Library/Preferences).

4. Edge Cases & Troubleshooting

  • Edge Case - התקנת פונטים (Fonts) או פלאגינים: משתמש מתקין פונט מיוחד בארגון, אך כשהוא פותח משתמש שני באותו מחשב (למשל לצורך הדגמה), הפונט חסר!
  • Troubleshooting: הבנה של מרחבי המערכת פותרת את התעלומה מיד - הפונט הותקן כברירת מחדל ב-~/Library/Fonts (User Domain) ולכן רק המשתמש המקורי רואה אותו. הפתרון הטכני הוא להעביר אותו אל /Library/Fonts (Local Domain) כדי שיהיה זמין לכלל משתמשי ה-Mac.

4. מנוע החיפוש Spotlight

1. High-Level Theory & History

מנוע ה-Spotlight שולב לראשונה ב-Mac OS X Tiger ככלי חיפוש גלובלי שמיינדקס (מקטלג) באופן מיידי כמעט כל קובץ, אימייל, ואפליקציה ב-Mac. לאורך השנים, מנוע זה הפך לתשתית שחולשת על שירותים רבים ב-macOS, ולא רק "סרגל חיפוש". איתור מהיר של קבצים ב-Finder, תוצאות ה-Mail, חיפושי תוכן מסמכים ואפילו יצירת תצוגות מקום פנוי ("About This Mac" / "Storage") מסתמכות על הקטלוג העמוק של Spotlight. כדי לא להאט את ביצועי המחשב בעת ביצוע חיפוש, Spotlight מבוסס על מסד נתונים סמוי (אינדקס) שמתעדכן ברקע כאשר קבצים נכתבים או משתנים.

2. Deep Technical Architecture

  • The Indexing Process: התהליך מנוהל בעיקר על ידי תהליכים נסתרים בשם mds (Metadata Server) ו-mds_stores, בשילוב עם תהליכי העזר mdworker (Metadata Worker).
  • MDImporters: כדי ש-Spotlight ידע "לקרוא" תוכן של קבצים ספציפיים (כמו מסמכי PDF, מסמכי Word או תמונות), הוא עושה שימוש בפלאגינים (Plug-ins) מיוחדים הנקראים mdimporter. תהליך ה-mdworker שואב את התוכן דרך הפלאגין ומזין אותו לאינדקס המרכזי.
  • The .Spotlight-V100 Directory: האינדקס עצמו נשמר במאגר תיקיות סמוי בתיקיית השורש של כל כונן (Volume), תחת השם .Spotlight-V100.
  • Live Text & Image Analysis: במערכות מודרניות (Sequoia), מתבצע ניתוח מורכב ברקע של תוכן תמונות וסרטונים דרך שירותים כגון photoanalysisd, והמידע הזה (OCR) מוזרק חזרה לאינדקס של Spotlight. לכן סריקת תוכן מתקדם עשויה לקחת זמן ממושך (עבודה מרובה של ליבות ה-Efficiency במעבדי Apple Silicon).

3. Terminal Commands, Plists & Logs

  • Terminal Commands: פקודת העל לניהול וניטור Spotlight היא mdutil (Metadata Utility).
  • sudo mdutil -s / – הצגת סטטוס האינדקס (מופעל/כבוי) עבור כונן המערכת.
  • sudo mdutil -E / – פקודת מפתח בעת צרות: מוחקת (Erases) את האינדקס ודוחפת את המערכת לבנות אותו מחדש מאפס עבור הכונן כולו.
  • mdimport -L – רשימה של כל ה-MDImporters (הפלאגינים הפעילים במערכת).
  • mdimport -t -d3 /path/to/file – כלי מצוין לטכנאים לבדיקה אילו נתוני מטא-דאטה שואב Spotlight מקובץ ספציפי (לאיתור תקלות של "למה מסמך ה-PDF הזה לא מופיע בחיפוש").
  • Plists & Logs:

  • הגדרות מחיצות שאין לאנדקס נשמרות בחלון ה-Spotlight Privacy ב-System Settings, אך ניתן גם לשלוט בהן עמוקות דרך תהליכי קונפיגורציה.

  • קריסות של ה-mdworker ניתנות לאיתור ב-Console תחת חיפוש mdworker או בדיווחי קריסות.

4. Edge Cases & Troubleshooting

  • Edge Case - Finder Search Not Finding Known Files: משתמשים מחפשים קובץ שוודאות קיים על הדיסק, אך הוא אינו עולה בחיפוש, או שרשימת המקום הפנוי מזייפת ומציגה ערכים לא הגיוניים (לדוגמה: "System Data" שתופס כביכול טרה-בייט).
  • Troubleshooting: הבעיה נובעת לרוב מאינדקס מושחת. ניתן לבנות אותו מחדש בדרך ידידותית: הוספת הדיסק הראשי (Macintosh HD) לרשימת ה-Privacy ב-System Settings > Spotlight, המתנה קלה, והסרתו משם (פעולה שלמעשה מוחקת את האינדקס הישן ומריצה mds חדש). לחלופין, הרצת הטרמינל sudo mdutil -E /.
  • Edge Case - Runaway Indexing: לאחר שדרוג מערכת או הוספת דיסק עמוס בנתונים, תהליכי mds_stores ו-mdworker חונקים את ה-CPU (אם כי ב-Apple Silicon התהליך מופנה לרוב לליבות ה-E החסכוניות) למשך ימים. המחשב עלול שלא להירדם (Sleep).
  • Troubleshooting: המתנה היא לעיתים קרובות הפתרון הנכון, במיוחד כאשר ישנם קבצים רבים שדורשים עיבוד Live Text. ניסיון לכפות מחיקת אינדקס בשלב זה רק יאתחל את כל התהליך המייגע מההתחלה. אם נדרש בידוד, אפשר להשתמש ב-Safe Mode המנטרל זמנית את התהליכים ומאפשר לראות אם ישנו קובץ ספציפי שתוקע את האינדקס (למשל על ידי mdimport פרטני).

5. תיבול ארגוני (Enterprise Seasoning)

1. High-Level Theory & History

לארכיטקטורות ה-APFS, ה-SSV וה-Spotlight ישנה השפעה ישירה ומיידית על עבודת מחלקת ה-IT בארגון. כלי אבטחה ישנים כדוגמת אנטי-וירוסים של צד-שלישי (Third-Party AVs), מערכות לגיבוי ענן ולניהול גרסאות היו רגילים בעבר "להתלבש" על תיקיות המערכת ולחפור בהן ללא גבולות (באמצעות Kernel Extensions). המעבר ל-Volume Groups המופרדים ול-SSV החתום קריפטוגרפית מחייב את מפתחי הכלים הללו להסתמך על APIs חדשים (כמו Endpoint Security Framework) שנמצאים במרחב המשתמש (User Space). עבור ה-IT המשמעות היא שכלי ניהול אינם צריכים – ואינם יכולים – לסרוק שוב ושוב את מחיצת המערכת בחיפוש אחר וירוסים, מה שחוסך משאבים ומוריד מהמורכבות של עבודת הניהול השוטפת.

2. Deep Technical Architecture

  • SSV & Third-Party Security: מכיוון שמחיצת ה-System (ה-SSV) נעולה ומהווה Snapshot מהימן של מערכת שסופקה ישירות מהשרתים של Apple, אין שום אפשרות לתוכנות צד-שלישי לכתוב אליה או לשנות אותה. יתרה מכך, כאשר אנטי-וירוס ארגוני סורק את הדיסק, הוא למעשה מתמקד אך ורק ב-Data Volume שבו חיים נתוני המשתמש והאפליקציות. ה-SSV הופך ל"אזור מוגן וטהור", שסריקה אקטיבית שלו היא לרוב בזבוז משאבי I/O מיותר.
  • MDM & Spotlights: מערכות MDM לעיתים שולפות נתונים מהמערכת בטכניקות של Inventory Collection. חלקן עשויות להסתמך על יכולות החיפוש המהירות של Spotlight או פקודות מערכת ששולפות מטא-דאטה מבוסס אינדקס. כאשר ה-Spotlight עמוס (לדוגמה בזמן Runaway Indexing), ביצועי סוכן ה-MDM עשויים להיות מושפעים אם הוא מנסה לאסוף מידע עתיר משאבים.
  • Volume Management in Fleet: בעוד שמשתמש רגיל פחות מודע ל-Volumes ול-Containers, מערכות ה-MDM יודעות כיום לזהות אם דיסק מסוים מוצפן (FileVault), על איזה Volume בדיוק הן מותקנות, וכיצד לטפל בהשמדת נתונים ממוקדת באמצעות "Erase All Content and Settings" (הדורש התממשקות ל-APFS).

3. Terminal Commands, Plists & Logs

  • Terminal Commands:

  • לבדיקת סטאטוס חסימות האבטחה, כלי ארגוני עשוי להריץ csrutil status ו-csrutil authenticated-root status – זה האחרון מוודא שה-SSV חתום, פעיל ומונע שינויים זרים.

  • Plists & Logs:

  • אם כלי צד שלישי (DLP או Antivirus) מנסה לעקוף את ההגבלות האלו, שורות הלוג שלו יידחו ברמת מערכת ההפעלה וניתן יהיה לאתר שגיאות של Read-only file system מצד פלט ה-Daemon של חברת האבטחה דרך כלי ה-Console.app.

4. Edge Cases & Troubleshooting

  • Edge Case - Legacy AV Scanning the System Volume: אנטי וירוס או כלי DLP ארגוני ישן שלא עודכן במלואו עלול לנסות לסרוק את כלל ה-Volumes, כולל ה-System, להיתקע על Firmlinks שיוצרים לולאות (Loops) סורקות, ולגרום ל-Kernel Panics עקיפים.
  • Troubleshooting: הגדרת חריגים (Exclusions) בקונסולת הניהול של האנטי-וירוס (לדוגמא ב-CrowdStrike או Defender) כך שהיא תוציא במפורש תיקיות ליבה מסוימות או נתיבים הקשורים ל-System מתוך רשימת הסריקה השוטפת (On-Access Scans). תוכנות חכמות יודעות אוטומטית כיצד לפרש את ה-Firmlinks ולא להיכנס ללולאות אינסופיות, ולכן יש לוודא שהארגון עושה שימוש בגירסאות Agent מודרניות, התומכות ב-macOS Tahoe/Sequoia.
  • Edge Case - MDM Deployments Failing Due to Path Resolution: סקריפטים (Bash/Zsh) של אנשי IT ארגוניים המנסים לכתוב לוקאלית לתוך נתיבים שמראש היו קיימים, אך בגלל ה-SSV הועברו לתיקיות ספציפיות ב-Data Volume.
  • Troubleshooting: שימוש בנתיבים מבוססי Firmlink מאושרים (למשל usr/local/ במקום usr/bin/) בעת כתיבת סקריפטי הפצה. על טכנאי ה-IT בארגון להיות מודעים לחלוטין לניתוב הגיאוגרפי של הקבצים כדי להימנע מקריסת פקודות בשלב ה-Deployment.

Visual Aid from DeepDive: DeepDive Diagram

Visual Aid from DeepDive: DeepDive Diagram

Tahoe UI Reference: Tahoe UI Reference

Tahoe UI Reference: Tahoe UI Reference

Tahoe UI Reference: Tahoe UI Reference

Tahoe UI Reference: Tahoe UI Reference

Tahoe UI Reference: Tahoe UI Reference

Tahoe UI Reference: Tahoe UI Reference