לינוס, ZFS וכמה נקודות בנושא

הכל התחיל במייל שכתב לינוס טורבאלד, ה"אבא" של ליבת לינוקס (אוקיי, יש כאלו שיתעקשו שנקרא לזה GNU/LINUX) – הוא התייחס לנקודה ישנה וקצת כואבת, שאי אפשר להכניס קוד של ZFS ללינוקס על ה-Kernel של לינוקס. הרשיונות לא ממש תואמים. (בעיה ידועה שאנשים מעשיים לא מתייחסים אליה כיום, למען האמת: אם לקוח מגיע אליי ומבקש ממני לבנות לו מפרט לשרת לצרכי AI, מטבע הדברים אני אכלול כרטיסים של nVidia אבל הדרייבר ל-NVIDIA הוא בינארי לחלוטין, האם לפסול את הכרטיסים בגלל שהדרייבר הוא כזה? כמובן שלא, כי הכרטיסים המתחרים מציעים בערך מחצית מהביצועים).

לינוס מוסיף בסוף המייל כי ZFS זה "באזז" והוא מבקש "אל תשתמש ב-ZFS".

זכותו המלאה, כמובן, של לינוס להביע את דעתו, אבל כדאי לפעמים שהוא קצת יעדכן את דעתו היקרה..

נתחיל מהמציאות הפשוטה: ZFS על לינוקס אינו פרויקט נסיוני. גם בגירסה הנוכחית (0.8.2 נכון לכתיבת שורות אלו) ובגירסה הקודמת (0.7.13) אין שום באג ידוע שגורם לקריסת מערכות. המערכת יציבה ונמצאת במקומות שונים פה בישראל ובעולם כמובן – בפרודקשן. לא מדובר באיזה פרויקט שמורכב מ-2 אנשים שמתחזקים אותה בשעות הפנאי שלהם ועושים טובה לאנושות שהם עונים לפוסטים/מיילים. יש לא מעט חברות מעורבות בפרויקט שתורמות קוד ותיקוני באגים נון סטופ, וזו אחת הסיבות שעמותת OpenZFS החליטה יחד עם כל החברות המשתתפות בפיתוח ZFS לפני שנתיים – להעביר את כל הקוד לגירסה חדשה שתיקרא OpenZFS ושתהיה מבוססת על ZFS for Linux עם כל השינויים שקיימים לפלטפורמות אחרות (BSD, Illumos, Mac OS וכו') כך שברגע שתצא גירסת OpenZFS 1.0 – היא תהיה תואמת לכל הפלטפורמות וכל קוד שיכנס יקומפל אוטומטית מול כל הפלטפורמות ואם הקוד לא רץ על אחת מהפלטפורמות, מגיש הקוד יצטרך לתקן זאת.

ZFS היא, בניגוד למערכות File systems אחרות בלינוקס – אינה רק file system, היא הרבה יותר, היא מייתרת את הצורך בהגדרות Partitions, מייתרת את הצורך בהגדרות ושימוש LVM, מפשטת תהליכים בשיתופים דרך NFS, iSCSi, CIFS/SMB, מאפשרת snapshots בצורה הרבה יותר טובה ממה ש-LVM נותן, הוא כולל מערכת Cache טובה וכשזה מגיע לתחזוקה שוטפת, זו המערכת היחידה שיודעת לעשות תהליך resilver (תהליך בו המערכת עוברת על כל המידע בסקטורים השונים בדיסק, בודקת אם הכל תקין ומה שהיא מוצאת לו תקין – היא מעתיקה למקומות אחרים תקינים, והכל ברקע), ויש ל-ZFS עוד פונקציות רבות שלא תיארתי ופונקציות בהחלט מעניינות שמפותחות בימים אלו, והכי חשוב – הכל רץ על לינוקס.

יש כאלו שיציינו שיש את BTRFS שזו מערכת מעולה. צר לי, היא לא כזו מעולה, גם כיום, בכל מה שקשור ל-RAID-5/6 ויש רק הפצה אחת שמתקינה אותה כברירת מחדל: SuSE. הפצות שמקובלות בגופים גדולים כמו RHEL, CentOS, Ubuntu או שלא כוללים תמיכה ל-BTRFS (כל מה שמבוסס על רד-האט) או שתצטרך לעבוד ידנית כדי להגדיר BTRFS. בהפצה כמו אובונטו 18 ומעלה, תצטרך לעבור חתיכת תהליך (בהצלחה עם זה, ואגב, והתהליך לא כולל שום שימוש בכל הפונקציות הרציניות של BTRFS כמו sub volumes במאמר) כדי לבנות מערכת עם BTRFS.

יש כמובן גם FIle systems אחרים כמו EXT4 ו-XFS שהן טובות, אבל כשיש בעיות כלשהן שהמערכת לא מוכנה לעבוד עם ה-Journaling – הסיוטים מתחילים (במיוחד ב-XFS. רק לפני מס' שבועות קיבלתי פניה מיצרן שרתים שהתקין ללקוח שלו מערכת SAP כשכל המערכת וה-DATA יושבים מקומית ולאחר כמה חודשים, המערכת קרסה. הוא ביקש ממני להציץ, והמצב מבחינת XFS היה כל כך קטסטרופלי, שההמלצה שלי היתה פשוטה: תפרמט ותשחזר מאפס מגיבוי) וכאן ל-ZFS יש יתרון בכך שהוא בודק אחת לשבוע או אחת לחודש (כפי שתגדיר ב-crontab) את תהליך ה-resilver ואפשר תמיד לראות את המצב עם פקודת zpool פשוטה.

אינני טוען ש-ZFS מתאים לכל שימוש. על מכונות וירטואליות, על מכונות דסקטופ/לאפטופ עם דיסק יחיד – אין ממש יתרון גדול ל-ZFS (חוץ מהפונקציונאלית של snapshots אם אתה רוצה לשדרג חבילות או את כל המערכת לגירסה חדשה ומעוניין לחזור אחורה אם יש בעיות, דבר שדי בעייתי לעשות עם LVM – במיוחד בהפצות כמו ubuntu, Debian ששם כברירת מחדל בהתקנה לא משתמשים ב-LVM) ויש בהחלט מקום ל-File systems כמו EXT4 או XFS.

לסיכום: ZFS זו מערכת רצינית שמצריכה מעט למידה של המושגים. הפצה כמו אובונטו 19 מאפשרת לך לראשונה להתקין מערכת לינוקס עם ZFS ב-root עם הצפנה, העברת snapshots מוצפנים, אבל חשוב לשים לב שזה נסיוני (בגלל זה החלוקה המוזרה לשני pools – התמיכה ב-GRUB2), יש קהילה משגשגת ויש גם חברות שמוכרות מוצרים ותמיכה ל-ZFS על לינוקס (והפצות אחרות). ZFS לא מתאימה לכולם ולא מתאימה לכל מצב, אך יחד עם זאת, ZFS זה לא buzz.

פרוקסי קטן, אישי – ובזריזות

בפוסט זה אסביר דרך קצרה וזריזה ליצור לעצמך "פרוקסי" דרך חיבור למחשב מרוחק על מנת לגלוש ולהעביר את הנתונים דרך המחשב המרוחק.

כולם מכירים מה זה VPN. זו דרך מצוינת לגלוש לאתרים שונים כשאתה מעוניין לעקוף את תשתית הגלישה הרגילה שאתה משתמש בה, ויש לכך כל מיני סיבות – אתרים שונים חסומים לקהל הישראלי, אתה בונה אתר ואתה רוצה לראות איך זה נראה "מבחוץ" (במקרים שהאתר מציג לדוגמא שפה אחרת לגולשים) ועוד. פתרון ה-VPN הוא פתרון קל ומצוין למקרים כאלו.

אבל ישנם מקרים שאתה צריך פה ועכשיו לבדוק משהו באתר בלתי נגיש לך עקב כל מיני חסימות, ו-VPN במקרה כזה הוא לא הכי זריז לשימוש/התקנה: אם אין לך מנוי VPN אז אתה צריך לרכוש או להקים אחד (עם OpenVPN או Wireguard לדוגמא), להגדיר פרמטרים בשרת, להגדיר פרמטרים אצלך – וכל התהליך הזה יותר מתאים שצריך את הפתרון באופן קבוע או במקרים תכופים.

שיטה אחרת שיש היא SSH Tunneling. בשיטה זו, אם יש לך מכונת לינוקס פיזית/וירטואלית אצל אחד מספקי ה-Hosting בחו"ל או אצל אחד מספקי הענן הציבוריים, וכל עוד יש לך גישת SSH – אפשר להקים מעין "פרוקסי" בקלות.

איך עושים זאת? די פשוט.

התקן במחשבך תוכנת SSH Client (אם יש לך Windows 10 אתה יכול לעקוב אחרי ההוראות כאן ולאחר מכן לפתוח CMD ולהריץ פקודת ssh. אתה יכול גם ב-Windows להשתמש ב-Putty ולגמור עניין. בשאר מערכות ההפעלה – זה כבר מובנה פנימית, יש צורך פשוט רק לפתוח טרמינל.

הכנס את הפקודה הבאה:

ssh -D 2345 -q -C -N myuser@1.2.3.4

החלף את ה-myuser לשם המשתמש האמיתי שלך, ואת ה-1.2.3.4 לכתובת ה-IP או כתובת ה-DNS של השרת לינוקס שלך. שאר הפרמטרים, למעוניינים לדעת: D- מציין איזה פורט אנחנו נשתמש לשם הפרוקסי, q- זה שהמערכת "תשתוק" ולא תציג הודעות, C- זה להפעיל דחיסה בעת העברת הנתונים, N- אומר שלא להריץ שום פקודות, רק לבצע Forward של הפאקטות. המספר 2345 הוא סתם מספר פורט שבחרתי, אתם יכולים לבחור לכם כל מספר מ-1024 עד 65535.

אם הקלדת נכון והפעלת את הפקודה, החלון יראה כאילו הוא "נתקע". הוא לא, ה"פרוקסי" פעיל. שים לב שבחלק מספקי ה-Hosting וספקי הענן הציבורי, יכול להיות שתצטרך לפתוח את פורט 2345 החוצה דרך ניהול ה-Firewall בחשבון שלך.

עכשיו הזמן להגדיר את הדפדפן. בדפדפן כמו Firefox יש להיכנס ל-Options לחפש את המילה proxy וללחוץ על כפתור ה-Settings. בחלון שנפתח נלחץ על הכפתור (עיגול) Manual proxy configuration ובשורת ההגדרות SOCKS host נכתוב localhost וב-Port נכתוב 2345. ליד השורה Proxy DNS when using SOCKS v5 יש ריבוע, לחצו עליו, ולסיום לחצו על OK לאישור.

זהו, אתם יכולים לגלוש. אתם יכולים לוודא שאתם מחוץ לישראל אם תבדקו את כתובת ה-IP שלכם מבחינה גיאוגרפית כאן.

לפני שמתלהבים ומבצעים את הטריק החביב הזה, חשוב לזכור כמה נקודות:

  • זה לא יעבוד לכם אם אתם מחפשים לראות את התכנים ש-Netflix מנגישה לאמריקאים לדוגמא.
  • יכול להיות שהטריק הזה לא יפעל אצלכם בעבודה – אם ה-Firewall שלכם תנועה מבחוץ בפורטים לא מאושרים.
  • אל תהפכו את זה לשימוע קבוע – אם אתם שוכרים VPS או מכונה וירטואלית אצל ספקים שונים בחו"ל, יש מגבלת תעבורה ובעננים ציבוריים בשרותים כמו EC2 אתם משלמים עבור כל ביט יוצא. במקרים כאלו – לכו על פתרון VPN.