איחוד פשוט של מספר מערכות קבצים בלינוקס

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

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

אז אם לא פתרון ברמת הבלוקים, נשאר פתרון ברמת מערכת הקבצים.
mhddfs הוא פתרון כזה בדיוק.
הרעיון הוא שמאחדים כמה מערכות קבצים, אחת על השניה בoverlay. כשפותחים קובץ הקובץ שיפתח יהיה הקובץ במחיצה הראשונה (אם במקרה אותו קובץ מופיע באותה באותה ספריה ביותר ממערכת קבצים אחת, נראה רק את הראשון (שיסתיר את כל האחרים).
כשכותבים קובץ, mhddfs עושה משהו מעניין:
כשיוצרים קובץ, המערכת תבחר אוטומטית את המחיצה עם הכי הרבה מקום בשבילו. בנוסף, אם במהלך כתיבת הקובץ נגמר המקום, הקובץ מוזז בצורה שקופה למחיצה עם מקום (כמובן שאם אין כזו מחיצה, האפליקציה מקבלת את השגיאה הרגילה).
אחד היתרונות הוא שהקבצים עדיין נגישים דרך המחיצות המקוריות, ככה שגם אם hddfs לא עובד משום מה, הנתונים עדיין שם ונגישים.
mhddfs ממומש כמערכת קבצים במרחב המשתמש (FUSE), מה מה שנותן לה יתרונות נוספים, למשל – משתמשים יכולים להשתמש בה חופשי בלי שמנהל המערכת יגדיר מראש את התצורה בקובץ fstab.

[code]
# mhddfs /mnt/500gb/,/mnt/200gb,//mnt/160gb /storage -o allow_other
[/code]

יוצר מערכת קבצים חדשה ב/storage, בנפח כולל של 775GB עם מקום פנוי כסכום המקום הפנוי בשלושת המחיצות:
[code]
# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sdc1 459G 258G 179G 60% /mnt/500gb
/dev/sdb2 159G 17G 142G 11% /mnt/200gb
/dev/sda3 158G 138G 21G 87% /mnt/160gb
/mnt/500gb;/mnt/200gb;/mnt/160gb 775G 412G 341G 55% /storage
[/code]

כדי להגדיר את זה בfstab, נשתמש בשורה המוזרה הבאה (תחביר סטנדרטי לfuse) בfstab:
[code]
mhddfs#/mnt/500gb,/mnt/200gb,/mnt/160gb /storage fuse defaults,allow_other 0 0
[/code]

דרך חבילת הדביאן היומית.

קיצודרך לUndo close tab

גיליתי בפוקס שאם לוחצים CTRL+SHIFT+T בפיירפוקס 3 הוא פותח מחדש את הלשונית האחרונה שסגרתם.
מכירים עוד קיצורי דרך נסתרים ושימושיים בפיירפוקס?

רשיונות קוד פתוח

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

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

כדאי לשים לב שהרשיון מדבר על הפצה ולא על שימוש. מותר לכל אחד לקחת קוד ששוחרר תחת GPL, ולהשתמש בו כרצונו בלי הגבלות ובלי חובות כל עוד התוצר לא מופץ. לכן זה בסדר להשתמש בקוד ברשיון GPL לשימוש פנימי בחברה (ולא בגלל שאף אחד לא יגלה, אלא כי זה ממש בסדר). כמו כן, אפשר להשתמש חופשי בקוד GPL בצד השרת, בלי לחשוש – גם אם השרת משרת משתמשים חיצוניים לארגון.
יש לציין שתוצרים של תוכנית ששוחררה תחת GPL לא נדבקים בGPL, למעט במקרים מאוד מיוחדים בהם התוצרים מכילים חלקים מהתוכנית המקורית (כמו למשל YACC – תוכנית לייצור קוד לפענוח שפות).
הגרסא הנפוצה ביותר של GPL היא גרסא 2, וממש לאחרונה יצאה גרסא שלוש של GPL, שנועדה להתמודד עם השינויים שהתרחשו בעולם התוכנה מאז שוחרר GPL2 ב1991 – למשל הפריחה של תעשיית הפטנטים; בנוסף, GPL 2 נכתב תוך מחשבה על חוק זכויות היוצרים האמריקאי, ולכן הוא לא מאוד מתאים לשימוש מחוץ לארצות הברית.
patents growth

LGPL
Lesser GPL הידוע גם בשם Library GPL הוא רשיון דומה לGPL, בהבדל חשוב אחד:
אם משתמשים בקוד בלי לשנות אותו ומפיצים את האפליקציה – היא לא "נדבקת" בGPL.
לעומת זאת, אם תבצעו שינויים בקוד LGPL ותפיצו אותו (כחלק מהאפליקציה שלכם), הכל ישוחרר תחת GPL. הרשיון הזה שימושי בעיקר לספריות קוד שמפתחיהן רוצים לקבל תרומות קוד חזרה מפרוייקטים מסחריים שמשתמשים בספריה. ברגע שחברה מסחרית מבצעת שיפור לספריית LGPL, יש לה מוטיבציה גבוהה מאוד לתרום את השינוי כדי שהוא יהפוך לחלק מהגרסא הבאה של הספריה.

רשיונות "עשה מה שאתה רוצה"
הרשיונות הבאים נופלים לקטגוריה של "עשה מה שאתה רוצה", כדאי לקרוא את הרשיון עצמו לפני השימוש, אבל בגדול המגבלות שהם מטילים הם מינימליים אם בכלל, וקל לעמוד בהם (דברים מסוג של לצרף עותק של הרשיון למוצר הסופי ו/או לציין שנעשה שימוש בקוד מסויים).
Apache license , שווה לקרוא את הFAQ שמסביר בדיוק מה מותר ומה אסור בשפת בני אנוש.
BSD license, אחד הרשיונות הפשוטים והמתירנים ביותר.
Mozilla public license – הרשיון של ארגון מוזילה, שמשחרר בדרך כלל תחת MPL, GPL וLGPL את הקוד שלו (הרשיון לבחירת המשתמש). עדכון: לא ממש מתאים לקטגוריה הזו (תודה לצפריר).
Eclipse public license, הFAQ
: Public domain נחלת הציבור. רשיון "העשה מה שבא לך" האולטימטיבי.
באופן מפתיע, לפעמים הוא מתירני מדי – Eclipse למשל מסרבים לקבל קוד תחת הרשיון הזה כי הם לא יכולים להבטיח שכולו נקי מזכויות יוצרים. (הטענה הזו מבוססת על נסיון שלי עם Eclipse, שרוצים לקלוט קוד שכתבתי שמסתמך על קוד תחת הרשיון הזה (ANTLR V2)

שידרוג סיבובי

יש לי שני מחשבים:
מחשב עבודה בחדר, שבו אני משתמש באופן שוטף לתכנות משחקים גלישה וכו', ומחשב בסלון, שמשמש כשרת/מדיה סנטר.
המחשב בחדר הוא החזק מבין השניים, כי עליו אני עובד יותר ובעיקר כי הוא משמש גם למשחקים, והוא התברך במעבד פנטיום D דו ליבתי, 2 ג'יגה זכרון מהיר וכרטיס מסך ג'יפורס 7900GT שהיה בצעירותו – לפני שנתיים שלמות – ממש מהיר, אבל לא סוחב בכבוד את המשחקים של ימינו. בנוסף יש לו מסך 19" CRT שכבר עבר זמנו.
המחשב בסלון הוא חלש יותר, ומכיל מעבד אתלון 3200XP, כרטיס מסך מצ'וקמק במיוחד(הכי זול שמצאתי עם יציאת S-Video מתישהו לפני ארבע שנים), ו512 מגה זכרון איטי במיוחד.
המחשב הזה משמש כמכונת מדיה (הוא מחובר לטלווזיה ואני רואה עליו סרטים וסדרות), שרת דואר, שרת ג'אבר, שרת HTTP, שרת MySQL שרת הורדות (מוריד סדרות סדרתי), וכו' וכו'. עם הזמן הוא התחיל לקרטע יותר ויותר בעיקר עקב חוסר זכרון, למול דרישות הולכות וגדלות שלי ממנו.
שני המחשבים כבר לא כך כל עומדים בדרישות שלי, ולכן הגיע הזמן לשדרג.
בדרך כלל אני קונה חומרה בצורה ספורדית ומתקין איפה שצריך (הרדיסק פה, צורב סידירום שם), אבל שידרוגים מלאים דורשים תוכנית יותר יסודית.
מטבע הדברים, לא הייתי רוצה שהמחשב בסלון יהיה יותר מהיר מהמחשב בחדר, ולכן אני תמיד משדרג את המחשב בחדר, מתקין את החומרה שהתפנתה במחשב בסלון ומוציא לגמלאות את החומרה מהמחשב בסלון.

אתמול (שישי) בבוקר הגיעה החבילה הגדולה במיוחד, והשימחה היתה גדולה.
boxed-in.jpg
החבילה המרשימה כוללת:
מחשב מורכב לאחותי, עליו לא נרחיב.
מסך BenQ 24 LCD G2400W
זכרון A-data 4GB DDR2 PC6400 800MHZ CL4
לוח אם Gigabyte GA-EP35-DS3R Intel® P35 Express Chipset LGA 775
מעבד Intel Core 2 Duo E8400 3GHz 1333FSB 6MB Box 45nm
כרטיס מסך INNOVISION Geforce 9800GTX 512MB DDR3 PCI-E
ספק כוח Corsair VX Series 550W PSU

כמובן שקודם כל התקנתי את המסך, רק בשביל לראות איך זה מסך 24". ככה זה:
monitor.jpg
התמונה חדה (לא רואים בצילום), והרזולוציה היא 1920X1200.
למרבה הצער גיליתי פיקסל שרוף (תקוע על כחול), ואני מתכוון להחליף את המסך.

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

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

השביזות גדולה, אבל צריך לבדוק מה קורה פה..
פירקתי את הכרטיסים, את ההרדיסקים, את המאוור של המעבד (שמנע גישה לחיבור החשמל הקטן – ATX 12V), ניסיתי שוב, ועדיין לא נדלק.
בשלב הזה זה יכול להיות או בעיה באחד החיבורים המעצבנים מהמארז אל לוח האם, או בעיה בספק, או בעיה בלוח האם.
שיחקתי עם החיבורים ללוח האם. עדיין לא נדלק.
חיברתי את הספק הישן, פתאום נדלק.
נראה שהספק אשם.
ניסיתי שוב את הספק החדש, ופתאום המערכת החליטה להידלק.
שמח וטוב לבב, הרכבתי מחדש את ההרדיסקים ואת הכרטיסים והפעלתי את המחשב.
נסיון ראשון נכשל עם שגיאה 17 מGRUB.
יש לי שני כוננים קשיחים במחשב הזה, אחד בחיבור IDE ואחד בחיבור SATA. מסתבר שהמחשב החליט שהוא מבצע BOOT מהSATA – מה שלא עובד כי הGRUB שם שבור.
כדי לוודא את זה, ניתקתי את כונן הSATA, וניסיתי. GRUB עלה הפעם – בחרתי בחלונות (עם כל הכבוד לדביאן, אני מעדיף לראות איך הכרטיס מסך מתפקד על חלונות), והוא עלה בהצלחה.
כמובן שחלונות לא מזהה את החומרה שעל לוח האם כמו שצריך. הוא לא רואה את בקר הSATA,כרטיס הרשת שעל לוח האם, טוב – אז צריך דרייברים, זה לא חדש.
למרבה הצער, הלוח אם החדש תומך רק בחיבור IDE אחד, מה שעושה לי קצת בעיה כי הצורב במחשב הזה הוא בממשק IDE, וכאמור גם ההרדיסק הראשי ממנו אני מבצע אתחול.
טוב, הכנסתי את הDVD (דרייברים על DVD!?) למחשב בסלון, והעתקתי את הכל לדיסק און קיי, חזרתי למחשב בחדר, התקנתי את הדרייברים.
העלתי את Assassins creed וראיתי כי טוב, המחשב סוחב כמו ענק.
ככה הוא נראה עכשיו, שימו לב לחוסר באבק – האבק התפזר עלי ועל שאר החדר.
new-comp1.jpg

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

ניהול מלאי חומרה

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

גיליתי את glpi, פרוייקט קוד פתוח מאוד נחמד למנהלי מערכת – אבל היא לא מתאים בדיוק:
הוא מתאים לניהול של מחשבים, ולא של רכיבים.

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

אנשי ברזל

אתמול בערב ראיתי את Iron man, ויש לי מילה אחת:
אכזבה.

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

רוצו בהמוניכם.
iron-man.jpg

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

bioshock_big_daddy_and_little_sister.jpg

מWin32 לCocoa, מאמר בארסטכניקה

פיטר ברייט במאמר מרתק בארס-טכניקה על המעבר שלו מפיתוח לWin32 לפיתוח Cocoa (הAPI של Max OS X).
המאמר כולל סקירה היסטורית והשוואה של XP לMaxOS X; דוט-נט – הנסיון של מייקרוסופט להפוך את הAPI שלה למודרני. ועוד.
עדיין לא קראתי את כולו, אבל בינתיים הוא מרתק.
המאמר מחולק לשלוש חלקים:
חלק ראשון
חלק שני
חלק שלישי