clientaddr הוא אחת מאפשרויות העיגון שמועתקות לשורת פקודה הרבה אחרי שהסיבה עבורן נעלמה. הוא אומר לשרת NFSv4.0 לאן לקרוא ללקוח בחזרה. הוא לא בוחר את השרת, לא קושר כל בקשה לכתובת מקור, ולא דוחף תעבורה למנהרה. במחשב נייד עם כמה כתובות, כדי להחליט אם היא חלה בכלל דרושות שלוש שאלות.

שלושה תנאים קובעים אם האפשרות חשובה

הראשון הוא גרסת המשנה שנקבעה, מפני ש־4.1 ו־4.2 מטפלים בקריאות חוזרות אחרת. השני הוא אם השרת יכול להגיע לכתובת שהייתם מכריזים עליה; מנהרה מנותבת בדרך כלל מאפשרת זאת ונתיב מתורגם בדרך כלל לא. השלישי הוא אם הכשל שאתם רודפים אחריו הוא בכלל כשל קריאה חוזרת.

ConditionIf yesIf no
Version is 4.0The option can matterSkip it; inspect the session instead
Server can reach the addressAdvertise itFix reachability first
Failure is a callbackDiagnose callback pathLook at mount and export

מענה עליהן שלא כסדר הוא הדרך שבה אנשים מוסיפים כתובת קריאה חוזרת לעיגון 4.2 ומסיקים שהאפשרות שבורה.

קראו קודם את גרסת המשנה

nfsstat -m

עבור עיגון קיים, זה מדפיס את פרטי העיגון והדגלים, כולל הגרסה האפקטיבית כמו vers=4.0, vers=4.1 או vers=4.2. הערה שאומרת רק “NFSv4” מחמיצה את הפרט היחיד שקובע אם האפשרות הזאת רלוונטית. קראו את המספר, לא את המילה.

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

עבור 4.0, הכריזו על כתובת שהשרת יכול להגיע אליה

ייתכן ששרת NFSv4.0 זקוק לחיבור נפרד חזרה ללקוח, למשל כשהוא קורא חזרה האצלה. עם כמה ממשקים או טבלת ניתוב לא שגרתית, גילוי אוטומטי של כתובת קריאה חוזרת עלול לבחור בכתובת שהשרת לא יכול להשתמש בה.

mount -t nfs -o vers=4.0,clientaddr=10.8.0.6 10.8.0.1:/export /mnt/share

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

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

4.1 ו־4.2 לא משתמשים באפשרות

Linux NFSv4.1 ו־4.2 נושאים קריאות חוזרות על גבי חיבורים שהלקוח הקים, ו־4.1 קורא למתקן הזה backchannel. הם לא תלויים בכך שהשרת יפתח חיבור חדש לכתובת מוכרזת, ולכן clientaddr לא מתקן נתיב קריאה חוזרת של 4.1 או 4.2.

זה לא אומר של־4.1 ו־4.2 אין בעיות קריאה חוזרת. זה אומר שהאבחון שונה: בדקו את הסשן שהוקם ואת מצב ה־backchannel שלו במקום לחפש פורט קריאה חוזרת נכנס שמעולם לא נועד להתקיים. כלל כניסה חסר הוא המצב הצפוי, לא תקלה לתקן.

הפרידו כשל עיגון מכשל קריאה חוזרת

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

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

שורש NFS באתחול מוקדם הוא סביבה נפרדת עם דרישות מוקדמות משל עצמה: ה־initramfs זקוק לכלים ולרשת לפני שהעיגון יכול להתרחש. עיגון שעובד אחרי התחברות לא מוכיח דבר על הרצף הזה, והכשל באתחול ממעט להזכיר את ה־initramfs או את הרשת.

מאמרים קשורים