טיפים לדביאן #1

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

 /etc/default/changetrack

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

apt-get install changetrack

ואם רוצים לשחק קצת בהגדרות, אז:

vim  /etc/default/changetrack


איך הופכים את לינוקס לחלונות XP?

מה!? אני שומע את הזעזוע בקול שלכם.
אה, מכירים את חלזונות XP? יש בו דבר אחד שהוא בכלל לא חלזוני : העליה אחרי ביעוט.
מהיר מאוד, כנראה בילי החליט שאם כבר עושים כל כך הרבה איתחולים, אז לפחות שהמערכת תעלה מהר.
אז מה זה קשור למערכת האליטיסית שלנו, שלא צריכה לעשות בוט לעולם, אתם שואלים?
אה, הנה התשובה:
initng – יעני, איתחול – הדור הבא, בא לעזור לסגור את הפער הטכנולוגי.
initng ממקבל את תהליך האיתחול, בצורה די חכמה, מה שמקצר משמעותית את זמן האיתחול.
ההתקנה בדביאן:

apt-get install initng

אחר כך, יש לערוך את קובץ ההגדרות של grub:

vim /boot/grub/menu.lst

ולהוסיף לשורת הקרנל את :

init=/sbin/initng

למשל
kernel          /boot/vmlinuz-2.6.12-1-386 root=/dev/hda3 init=/sbin/initng

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

הערה:
initng עדיין בפיתוח. אם יש בעיות, אפשר לקבל עזרה ב 
initng@irc://freenode.irc.net# 

שחזור מידע מדיסק שקרס.

בחודשיים האחרונים התברכתי במגוון תקלות מופלאות בכוננים קשיחים, דיסק אחד קיבל לי מגזרים רעים (bad sectors) דיסק שני קיבל, וחזר בו אחרי שהנתונים שבו הושמדו סופית.
מכל הסיפורים האלו, הפכתי למומחה לא קטן לשיחזורים של מידע מדיסקים אבודים.
לא שהיו לי אחוזי הצלחה טובים מדי, לעזזל, על הדיסק הראשון אני עדיין עובד, אחרי חודשיים (!), אבל בכל זאת, הנסיון הוא המורה הכי טוב, וכרגע יש ל י נסיון בערך כמו לאיזו מעבדת שחזורים קטנה.
אז כמה פנינות חוכמה, מבעל נסיון:

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

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

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

אז מה נשאר? להשתמש בLVM בתוך אותו דיסק בלבד, לדאוג שלכל דיסק יהיה volume group משלו, ושלא יהיה יותר מדיסק אחד בתוך כל volume group. זו תצורה די בטוחה, אבל היא משאירה אתכם עם רווח מאוד שולי מהLVM: תוכלו לשנות דינמית את הגודל של המחיצות בתוך הדיסק.ביננו, אפשר לעשות את זה גם בלי LVM אם מאוד רוצים, ולכן המסקנה : עזבו את זה, זה לא שווה את הכאב הרב שזה יוצר.
ותאמינו לי, זה יוצר כבר, אני יושב בערוץ הIRC של LVM כבר שבוע, וכל מה שאני רואה זה קורבנות שבאים ומבקשים עזרה בשחזור. ולא, אף אחד לא עונה להם.

אז מה עושים?
דיסק שלכם קיבל מגזרים רעים? הדבר הראשון לעשות זה להרים את העוגן, מה שנקרא בלשון העם unmount. אתם לא רוצים שהמערכת הפעלה תתעסק עם הדיסק הזה בזמן שאתם מנסים לשחזר אותו. אם זה הדיסק הראשי שלכם תזמינו גרר מעכשיו. (דיסק בוט של קנופיקס הוא מאוד שימושי בזמנים כאלו).
מגזרים רעים הם בדרך כלל בעיה פיזית, נדיר שהיא נגרמת מתוכנה, אבל קיים. כמעט כל כונן קשיח היום מצוייד במערכת אוטומטית למיפוי מחדש של מגזרים רעים. זה אומר שאם סקטור מסויים נדפק, לא תדעו מזה כי הדיסק ימפה את הנתונים שעליו לסקטור אחר, שהוא שומר במחסן למקרה כזה בדיוק, ויפסיק לגשת לסקטור השבור.
ברגע שאתם מתחילים להרגיש את הבעיה, המצב כבר בקרשים – כי כל הספיירים שהדיסק שמר נגמרו, מה שאומר שהדיסק מחורבן לגמרי, ובדרך כלל במצב הזה הסקטורים הרעים רק מתרבים מיום ליום.
הסיבה שאני עובד כל כך הרבה זמן על  שחזור של הדיסק הראשון שנדפק לי לפני חודשיים היא בדיוק זו. אני סורק את השטח שלו, מסמן את הסקטורים הרעים, ואז עובר שוב, והופה – יש עוד שלא תפסתי במעבר הקודם. ממש כמו הידרה – תורידו ראש אחד, יצמחו 2 במקום. בנוסף, הסריקה הזו מאוד איטית כי ברגע שהדיסק לא תקין קריאה של סקטור בודד יכולה לקחת דקה עד שמגיעה  השגיאה המיוחלת.
ללינוקס כלי פשוט לסימון סקטורים רעים: badblocks.
לbadblocks שני מצבי סריקה מרכזיים:
קריאה-כתיבה לא הרסני.
כתיבה הרסני.
הראשון איטי, השני מהיר. אל תשתמשו בשני כי הוא משמיד את הנתונים, אלא אם – כמובן, אין נתונים, למשל אם הדיסק חדש ואתם רוצים לבדוק אותו.
badblocks לא עושה לדיסק שום דבר חוץ מלקרוא ולכתוב עליו, הוא לא מסמן את הסקטורים הרעים בשום מקום, במקום זה הוא יוצר קובץ שאליו הוא כותב את המספרים של הסקטורים הרעים. הקובץ הזה משמש כקלט לתוכניות לתיקון מערכת הקבצים (ככה הן יודעות על איזה סקטורים לא כדאי להן לדרוך). וזה מביא אותנו למוקש:
מה קורה אם badblocks חושב שגודל בלוק הוא 1024 בתים והתוכנית לתיקון מערכת הקבצים, נניח reiserfsck חושבת שגודל בלוק הוא 4096 בתים?
זה בדיוק המצב אם לא תגידו לbadblocks להשתמש בגודל בלוק הנכון, אז לשים לב.
אחרת יקרה לכם מה שקרה לי : תסרקו את הדיסק שבועיים, רק כדי לגלות שצריך להתחיל מחדש.
עוד משהו, בגלל הטבע הנבזי והחמקני של בלוקים רעים, אתם רוצים לסרוק כמה פעמים לפני שתכריזו על  סיום. בשביל זה יש לbadblocks פרמטר שאומר לה כמה מעברים נקיים היא צריכה לפני שהיא מסיימת.

badblocks -vsno badblocks-output-file -p 4 -b 4096 /dev/sda1

  אז ככה : 
v- זה בשביל שbadblocks תדפיס הרבה (זה משעמם לחכות שבועיים בלי לקבל הדפסות).
s-  זה בשביל לקבל הדפסת התקדמות.
n-  זה בשביל מצב קריאה-כתיבה לא הרסני.
o- זה בשביל קובץ פלט.
p- זה בשביל מספר המעברים הנקיים לפני שמסיימים.
b- זה בשביל גודל הבלוק, ברירת המחדל היא 1024, אבל לפחות עבור reiserfs היא לא מתאימה (תבדקו במערכת הקבצים שלכם מה הגודל הנכון).
ואחרון זה השם של ההתקן לבדוק.

אחרי שהחלטתי סוף סוף שסרקתי מספיק את הדיסק (לקח לי חודש וחצי, ומצאתי בו בסביבות 50,000 בלוקים רעים), ניסיתי לתקן את מערכת הקבצים עם reiserfsck.

reiserfsck –rebuild-tree -B badblocks–output-file /dev/sda1

אפשר לראות שכפרמטר אני מעביר אם הקובץ שיצרה badblocks.
הבעיה היא, כמו שהסתבר לי, שהדיסק היה רע מדי מכדי שreiserfsck תצליח לתקן את הנתונים עליו. כבר כמעט וויתרתי על הכל, אבל חיפוש קצר בגוגל גילה שיש תקווה.
קוראים לתקווה dd_rescue.
dd, למי שלא מכיר, היא תוכנה קטנה ושימושית שמעתיקה בלוקים. הבעיה איתה, שכמו כל תוכנה טובה, היא מדווחת ברגע שיש לה בעיה, ומפסיקה את הפעולה. רק שזה לא טוב לנו פה. אם ננסה להעתיק את הנתונים של הדיסק למקום אחר כדי לנסות לשחזר אותם שם, dd תפסיק להעתיק ברגע שהיא תדרוך על סקטור רע.
ומי בה להצלה? ניחשתם, dd_rescue.
הפקודה להעתקה של הנתונים היא מאוד פשוטה :

dd_rescue /dev/data_vg/data /mnt/data.img

רק מה, באופן טבעי הפעולה לוקחת זמן לפחות כמו סריקה עם badblocks, וכמו שאמרתי, לסרוק דיסק דפוק לוקח ימבה זמן.
אז נשאלת השאלה, למה להשתמש בbadblocks בכלל, אם אפשר ישר להעתיק את הנתונים למקום אחד ולבנות את מערכת הקבצים שם מחדש?
השאלה מצויינת, ואם הייתי שואל את עצמי אותה לפני חודשיים אולי כבר הייתי משחזר את הנתונים ושולח את הדיסק המזויין להחלפה.
בקיצור, התהליך המומלץ הוא להשתמש בdd_rescue קודם כל, כדי להעתיק את הנתונים (ברמת הבלוקים) למקום בטוח ויציב, ורק אז לנסות לשחזר.
כמובן שצריך מקום פנוי בגודל של המחיצה שאתם רוצים להעתיק.

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

גרגרן

גרגריוס, להלן גרגרן, הוא אספן רסיסים מבוסס רשת (שכתוב בPHP), שמתוכנן לרוץ על השרת שלך, ולאפשר לך גישה נוחה ומאוחדת למקורות הרסס (להלן ממטרות) שלך מכל מקום.
אתמול התקנתי את הגרגרן על פיירפנג, לשימושי הפרטי בינתיים – כי הוא לא תומך עדיין בריבוי משתמשים.
הוספתי את הבלוגים שאני קורא, מקורות חדשות וכו' לשם, ועכשיו אני יכול לקרוא אותם ממקום אחד, בלי מאמץ.
כמו רוב התוכנות, הגרגרן לא מסתדר מי יודע מה עם עברית.
רסיסים בעברית מופיעים בעימוד לשמאל, מה שדי מציק.
התלוננתי בערוץ הIRC של הגרגרן, הסברתי לחבר'ה את הבעיה, הצעתי פתרון, צולע למדי, אבל עדיין התחלה טובה:
לבדוק את המילה הראשונה ברסיס, ואם היא בעברית להניח שזה רסיס עברי ולעמד אותו לימין בעזרת שתילתו בתוך div בעימוד ימני.
אחד המפתחים שם, תחת הכינוי sameerd, הרים את הכפפה וכתב פלאגין קטן שעושה בדיוק את זה ואפילו עובד לא רע (למרות שהזיהוי צריך עוד עבודה).
נפלאות הקוד הפתוח, נראה אותכם מוציאים פיצ'ר חדש ממיקרוסופט תוך שעה.

וסלטה לאחור

הסיבה שהקטנתי את מחיצת השורש היא כדי לפנות מקום ולהעביר אותו לשליטה של LVM.
LVM זה קיצור של Logical volume managment, וזה מאפשר שינוי דינמי של מחיצות (בלי איתחול), וכן יצירה של מחיצות לוגיות שפרושות על פני כמה דיסקים שרוצים.
נשמע טוב, מחיצה אחת גדולה של 350GB, שתכיל את כל הסרטים והמוסיקה שלי.
אז עשיתי את זה, הקטנתי, הגדלתי, פירמטתי, יצרתי, הזזתי, העתקתי ואז הכל עבד.
היתה לי מחיצת ענק של 350GB, שנפרשה על פני שני הדיסקים.
ואז חשבתי, מה אם אחד מהדיסקים ימות?
מסתבר שהתוצאה של דבר כזה, היא שכל המידע במחיצה, גם בחלקים שעל הדיסק שלא ניזוק, ילך קפוט.
הסיבה לזה היא שחתיכות ממערכת הקבצים יעלמו, וגם, אופציונלית, חתיכות מקבצים שעל הדיסק שלא ניזוק. כנראה אפשר לשחזר את זה, אבל ברור שהנזק יהיה גדול יותר מאשר אם המחיצה לא תשב על שני דיסקים.
אז החלטתי לבצע סלטה כמעט מלאה לאחור :
העתקתי, הזזתי, יצרתי, פירמטתי, הגדלתי והקטנתי ועכשיו המצב די דומה למה שהיה לפני כל הסיפור, כל מחיצה על דיסק בודד. אבל יש לי את הגמישות לשחק איתן כן הן תחת LVM.
אז מה יצא מכל הסיפור?
עכשיו אני מכיר את LVM יותר טוב, ובנוסף בזבזתי די הרבה זמן.
בהזדמנות אני אכתוב הסבר על איך מקטינים מחיצות על דיסק קיים בלינוקס.

והוא חזר!

קהל נכבד,
המשימה הוכתרה בהצלחה.
פיירפנג הקטין את מחיצת השורש, ולא ל30 ג'יגה, אלא ל20! (אופס).


Filesystem Size Used Avail Use% Mounted on
/dev/hde2 20G 6.0G 15G 30% /

מחר הסבר על למה זה היה טוב, ואיך זה הלך.

מעשה לולינות אימתני

קהל נכבד, קהל נכבד.
השרת שלפניכם, יבצע מהלך מסוכן מאוד, מהלך בעל השלכות פוטנציאליות קטסטרופליות.
לא רבים השרתים שיסכימו לבצע מהלך שכזה, מהלך מסוכן שעליו לא חלמתם גם בחלומותיכם האפלים ביותר!
פיירפנג האמיץ, הולך להקטין את מחיצת השורש שלו, מ180 ג'יגה בייט, טבין ותקילין (או כ200 ג'יגה בית, בלשון העם), לסך של 30 גי'גה בייט בלבד!
כל זאת, אם ירצה אלוהי השרתים, תוך ביעוט (boot) אחד בלבד.
אפילו השרתים של גוגל לא מעיזים לבצע דבר כזה, ולהם יש אחים רבים רבים שיתפסו את מקומם בלי להחסיר פעימה אם משהו ישתבש.
שימו לב, שימו לב, פיירפנג מתכונן. זה המצב לפני התרגיל המסוכן.


# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/hde2 186G 6.0G 180G 4% /

את המצב אחרי תדעו אם פיירפנג יצליח לבצע את המהלך.
החזיקו אצבעות usb, הנה זה מתחיל!

פיירפנג, מי זה פיירפנג?

פיירפנג הוא השרת שמריץ את הבלוג הזה.
התוכנית המקורית בשבילו היתה שהוא יהיה מחשב טלויזיה, כלומר, מחשב שיתחבא ליד הטלויזיה, ויאפשר לי לראות סרטים וסדרות שאני מוריד מהאינטרנט במסך הגדול, בנוחות של הסלון.
הוא מריץ מערכת דביאן (לינוקס), שתופסת סך הכל 1.1 ג'יגה, אם אני לא מתייחס לנתונים שמאוכסנים שם (סרטים, מוסיקה וכו').
מהר מאוד החלטתי להשתמש במחשב הזה בתור שרת, לא כי הוא כזה חזק (הוא לא, סמפרון 2000 בערך, די עגלה), אלא כי קל לי לשמור אותו פועל בלי הפסקה.
המחשב הראשי משמש אותי גם למשחקים (למרות שפחות לאחרונה), ומשחקים מחייבים בדרך כלל שאני אבצע ביעוט (Reboot) ואפעיל את החלונות. מכיון שכך, המחשב הראשי לא מתאים ממש להיות שרת.
אז הפכתי את פיירפנג לשרת, ולאט לאט האצלתי עליו יותר ויותר סמכויות:
שרת אינטרנט שמריץ את הבלוג הזה, ומאפשר גישה לסרטים ולמוסיקה שלי, לי ולכמה נבחרי/ות גורל בעלי/ות סיסמא.
בנוסף הפכתי אותו לשרת דואר לכל דבר, ועכשיו הדואר שלי מאוכסן אצלי, ואף אחד לא תוקע לי בו פרסומות כשאני קורא אותו.
באופן טבעי, צריך הרבה מקום כדי לשמור את הסרטים, אז, נכון לכרגע, יש בפיירפנג שני דיסקים של 200 ג'יגה, אחד מהם בן שבוע בערך.
נוח מאוד שמחשב כזה ישמש כשרת קבצים, כי הוא זמין תמיד, ויש לו הרבה מקום, אז הגדרתי לו גם סמבה וNFS כדי שהמחשב השני יוכל לגשת לקבצים בכל מצב (גם כשהוא בחלונות).
בנוסף, הוא משמש כשרת הCVS שלי, ככה אני יכול לגשת לקוד שלי מכל מקום, מה שיכול להיות נוח לפעמים).
פעם בלילה יש גיבוי מבוסס rsync, שמגבה למעשה את כל המערכת למחיצה בדיסק השני (ההנחה שלי היא שלא סביר ששני הדיסקים יתקלקלו בו זמנית).
כמובן, אני רואה עליו סרטים וסדרות, באמצעות תוכנה חביבה בשם פריבו (עוד על פריבו פה)
זה פיירפנג, שרת השעשועים שלי.