מבוא ל-LVM

כתריאל טראום

katriel@penguin.org.il

היסטוריית גירסאות
גירסה 1.0 05-04-2007 כתריאל טראום
הומר מפורמאט ישן לוויקי

זכויות יוצרים ורשיון

כל הזכויות שמורות © 2005, כתריאל טראום, הרשות ניתנת להעתיק, לשנות ולהפיץ מדריך זה תחת התנאים של רשיון ה-GFDL

Linux הוא סימן מסחרי רשום של Linus Torvalds.

הסרת אחריות

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

משוב

תגובות, תלונות, הערות והארות לכתובת הנ”ל

דרישות קדם

מדריך זה נכתב על Red Hat 9, ו- LVM בגירסא 1.
כעקרון, מערכת ההתקנה של RedHat 9 מאפשרת יצירה של מחיצות LVM כבר בשלב ההתקנה, אך מדריך זה לא יסביר כיצד לעשות זאת. תהליך היצירה בעת ההתקנה הוא די פשוט, ויכול לפשט דברים מאוד בניהול עתידי של המקום הפנוי ( או הלא פנוי לצורך העיניין) שלכם.
מדריך זה מסביר כיצד ליצור ולנהל מחיצות LVM, ושכזה דורש שתהיה תמיכה ל - LVM בקרנל, ב-RH9 כמובן שאין בעיה עם זה. בנוסף, יש לוודא כי מותקן RPM בשם lvm-1.0.3, שמספק את כלי הניהול של LVM. כמו כן, רצוי שיהיו מחיצות פנויות או כאלו שרוצים להמיר ל- LVM, כדי שיהיה לנו במה להתעלל.

מבוא

מה זה LVM?

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

ישנן 2 גרסות כיום ל- LVM, גירסא 1 שנמצאת בגירסא 2.4 של הקרנל, וגירסא 2 שנכנסה לקרנל 2.6, אך קיימים טלאים לקרנל 2.4 שמאפשרים שימוש ב LVM 2.

בהפשטה “פראית”, Logical Volume Management מחלק את הדיסק לבלוקים בגדלים שווים, בלוקים אלו משמשים לבניית קבוצות בלוקים. את קבוצות הבלוקים אלו ניתן לפרמט למערכות קבצים רגילות, כמו ext3 או reiserfs. השימוש בבלוקים הוא שמעניק את הגמישות לשנות גדלים, להעביר נפח ממחיצה למחיצה וכו.

יותר על אבני הבניה של LVM בפרק הבא.

למה שארצה להשתמש ב LVM?

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

קחו לדוגמא את יוסי, שקנה דיסק של 20G, ולאחר שמילא אותו בסרטים ומוזיקה שקנה ושמר לצורך גיבוי אישי, נגמר לו המקום ב /home, שם שמר את כל המידע. יוסי החליט לקנות דיסק חדש של 40G, והחליט להעביר את home אליו. במקרה כזה יצטרך יוסי לפרמט את הדיסק, ולהעביר את /home אליו. אבל עכשיו הוא נתקע עם מקום פנוי בדיסק הראשון. כדי להשתמש במקום פנוי זה, בטח יצטרך להסתבך עם symbolic links. ומה יקרה כשיתמלא גם הדיסק הנוכחי?
אם יוסי היה משתמש ב LVM מראש, הוא היה יכול להוסיף את הדיסק החדש למחשב, להוסיף אותו למערכת LVM, ובקלות, להגדיל את המקום של /home. לחילופין, הוא היה יכול בקלות לנייד את /home לדיסק החדש, ולהרחיב את מחיצת ה root שלו (/) למקום הפנוי שנשאר על הדיסק הראשון.

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

אבני הבניה של LVM

אבני הבניה של LVM

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

  • Volume Group (VG) - זוהי יחידה ניהולית שמאגדת Logical Volume ו- Physical Volumes ומאפשר את ניהולן.
  • Physical Volume (PV) - זה בד”כ הדיסק הקשיח או התקן שמייצג דיסק קשיח, כמו Raid Array ודומיו.
  • Physical Extents (PE) - כל יחידה “פיסית” מחולקת לבלוקים של מידע, שנקראים Physical Extents, בלוקים אלו משמשים לבניית מחיצות. גודל כל בלוק יהיה זהה לגודל של ה Logical Extents באותו ה Volume Group.
  • Logical Extents (LE) - אלו הם יחידות הבניה שבונות את המחיצה הלוגית, זו שמערכת ההפעלה רואה ויכולה להשתמש בהן. גודל כל יחידות ה- LE זהה בכל ה Volume Group.
  • Logical Volume (LV) - שווה הערך למחיצה רגילה שניתן לפרמט ולהשתמש כמקום אחסון קבצים.
דוגמא לצורך המחשה

דוגמא, שנלקחה מה-LVM-HOWTO, שתעזור לחבר את כל החלקים יחד:
נניח שיש לנו Volume Group שנקרא VG1, ל VG הזה יש יחידות physical extents בגודל של 4M. ל- VG1 אנחנו מקשרים 2 מחיצות, /dev/hda1 ו - /dev/hdb1. מחיצות אלו יהפכו להיות Physical Volumes, נקרא להם PV1 ו- PV2 (שמות “קריאים” והגיוניים יותר ניתן לתת ע”פי שיקול דעת מנהל המערכת). ה PV's המדוברים יהיו מחולקים ליחידות של 4M, כי כך הוגדר בהגדרות של ה Volume Group. נניח שהדיסקים הם בגודל שונה, ואנחנו מקבלים 99 יחידות ב- PV1 ו- 248 יחידות ב- PV2. כעת אנחנו יכולים ליצור לנו Logical Volume שיהיה שמיש ע”י מערכת ההפעלה. גודל ה LV יכול להיות בין 1 ל- 347 יחידות פיסיות (99 + 248). כאשר ה-LV נוצר, נוצר מיפוי בין יחידת לוגיות (Logical Extents) ובין יחידות פיסיות (Physical Extents). לדוגמא, LE מספר 1 של ה- LV יכול להיות ממופה ל PE מספר 57 ב- PV1. הלכה למעשה, מידע שנכתב ל - LE הראשון של המחיצה הלוגית, יכתב ל PE מספר 57, ב- PV1.

ניתן לראות כיצד זה מקנה גמישות, כאשר אפשר ליצור Logical Volume מכמה Logical Extents שרוצים, שמקושרים לאיזה Physical Extents שנרצה, מתוך כל Physical Volume שחבר ב- Volume Group.

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

ניהול מחיצות עם LVM

יצירה וניהול של Volume Group

מצב הפתיחה שלנו הוא מערכת, עם דיסק אחד של 30G, כאשר 4G הוקצה למחיצת השורש (/), 100M למחיצת /boot, 256M הוקצה ל- Swap, ושאר המקום הוקצה למחיצה שלא בשימוש (hda4). הנה תיאור הדיסק:

[root@chew root]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/hda2 3.9G 600M 3.1G 17% /
/dev/hda1 99M 14M 80M 15% /boot
none 125M 0 125M 0% /dev/shm

[root@chew root]# fdisk -l /dev/hda

Disk /dev/hda: 30.7 GB, 30735581184 bytes
255 heads, 63 sectors/track, 3736 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

Device Boot Start End Blocks Id System
/dev/hda1 * 1 13 104391 83 Linux
/dev/hda2 14 523 4096575 83 Linux
/dev/hda3 524 556 265072+ 82 Linux swap
/dev/hda4 557 3736 25543350 8e Linux LVM

יש לנו עוד כ 25G פנויים, שאותם נהפוך למחיצת LVM. בשלב מאוחר יותר, נרחיב אותה בשטח מדיסק נוסף, ואף נוסיף עוד מחיצת LVM. שימו לב, כי המחיצה המיועדת (hda4) היא מסוג “Linux LVM”, את זה יש לקבוע בזמן יצירת המחיצה, ע”י קביעת סוגה כ “8e”. הסבר נרחב יותר ליצירת מחיצות, ניתן למצוא בתוכנה fdisk.

צעד ראשון לפני שמתחילים לעבוד עם LVM (רק בפעם הראשונה), נריץ את הפקודה vgscan, כדאי לאתחל ולסרוק את מערכת ה LVM:

[root@chew root]# vgscan
vgscan -- reading all physical volumes (this may take a while...)
vgscan -- "/etc/lvmtab" and "/etc/lvmtab.d" successfully created
vgscan -- WARNING: This program does not do a VGDA backup of your volume group

כדי לצור מחיצת LVM, דבר ראשון שנצטרך לעשות הוא לצור Volume Group (מעתה, VG) כדי שנוכל לשייך אליו Physical Volumes (מעתה PV). על מנת לאתחל דיסק או מחיצה כדיסק או מחיצת LVM, נהשתמש בפקודה pvcreate. כדי לאתחל דיסק שלם, נשתמש בפקודה:

[root@chew root]# pvcreate /dev/hda

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

[root@chew root]# dd if=/dev/zero of=/dev/hda bs=1 kcount=1

שוב, אני מדגיש, זו פעולה מסוכנת שמוחקת את כל המחיצות מהדיסק!

במקרה שלנו, ומכיוון שאנו רוצים לאתחל רק מחיצה ספציפית אחת מהדיסק (hda4) נשתמש בפקודה:

[root@chew root]# pvcreate /dev/hda4
pvcreate -- physical volume "/dev/hda4" successfully created

עכשיו כשאיתחלנו את המחיצה, נוכל לצור VG, ולשייך אותה אליו. נשתמש בפקודה:

[root@chew root]# vgcreate data_vg /dev/hda4
vgcreate -- INFO: using default physical extent size 4 MB
vgcreate -- INFO: maximum logical volume size is 255.99 Gigabyte
vgcreate -- doing automatic backup of volume group "data_vg"
vgcreate -- volume group "data_vg" successfully created and activated

שימו לב: LVM מודיע לנו כי גודל המחיצה מקסימלי שנוכל ליצור הוא 256G. גודל זה משתנה בהתאם לגודל ה PE. ניתן ליצור עד כ ~64K PE's ואם תכפילו זאת ב 4M (גודל ברירת המחדל של PE), תקבלו 256G. במקרה ונצטרך מחיצות גדולות, ניתן לציין בזמן יצירת ה VG עם vgcreate גודל אחר, ולקבל תקרה גדולה יותר. man vgcreate יסביר כיצד לעשות זאת. הגבלה זו הוסרה ב-LVM2.

כדי לקבל קצת יותר מידע על ה- VG שהרגע יצרנו, נשתמש בפקודה vgdisplay:

[root@chew root]# vgdisplay data_vg
--- Volume group ---
VG Name data_vg
VG Access read/write
VG Status available/resizable
VG # 0
MAX LV 256
Cur LV 0
Open LV 0
MAX LV Size 255.99 GB
Max PV 256
Cur PV 1
Act PV 1
VG Size 24.36 GB
PE Size 4 MB
Total PE 6235
Alloc PE / Size 0 / 0
Free PE / Size 6235 / 24.36 GB
VG UUID kicnt9-KHrq-z59y-ucbb-Yz6D-1Dk6-KnmvP6

ניתן לראות שיש לנו VG, שגודלו הכללי הוא 24G, הוא מורכב מ PV אחד (Cur PV) והוא מחולק ל 6235 Physical Extents (מעתה PE), שגודל כל אחד 4M. ניתן לראות שאין אף PE בשימוש (Alloc PE).

אחרי שיצרנו את ה-VG, נצטרך להפוך אותו לזמין. אנו מבצעים פעולה זאת עכשיו כדי שנוכל לעבוד עם ה VG, ולצור בו Logical Volumes. לא צריך לבצע את ההפעלה בכל עליית מערכת, RedHat כבר דואג לעשות את זה בשבילנו.

[root@chew root]# vgchange -a y data_vg
vgchange -- volume group "data_vg" successfully activated

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

יצירה וניהול של Logical Volume

כעת שיש לנו VG אחד פעיל, שאליו משוייך PV אחד (hda4), נוכל להמשיך הלאה, וליצור בו Logical Volumes (מעתה LV).

כאשר יוצרים LV, ישנן 2 שיטות: Linear ו- Stripped. כדי לצור Striped LV, יש צורך ביותר מ PV אחד, ולכן לא אדגים זאת. יצירת Stripped LV אומר שה Logical Extents (מעתה LE) שלו יחולקו על כל ה PV's שקיימים ב VG, כך נקבל פעולה מהירה יותר מכיוון שנכתוב ונקרא מדיסקים שונים חלקים מהמידע, ולא את כל המידע מדיסק אחד. השיטה הלינארית אומרת שה LV יהיה על סידרה לינארית של LE's.

נשתמש בפקודה lvcreate כדי ליצור את ה LV שלנו. נצור 2 Logical Volumes: אחד למוזיקה, והשני לעבודה. נחלק את ה 24G שיש לנו כך - 10G עבודה, 14G מוזיקה:

[root@chew root]# lvcreate -L10G -n music data_vg
lvcreate -- doing automatic backup of "data_vg"
lvcreate -- logical volume "/dev/data_vg/music" successfully created

שיטה נוספת ליצירת LV, היא ציון מספר ה- LE's שאנחנו רוצים להשתמש בו. קודם נברר כמה PE's פנויים יש לנו, ואז נצור את ה- LV:

[root@chew root]# vgdisplay data_vg | grep Free
Free PE / Size 3675 / 14.36 GB
[root@chew root]# lvcreate -l3675 -n work data_vg
lvcreate -- doing automatic backup of "data_vg"
lvcreate -- logical volume "/dev/data_vg/work" successfully created

כמו שהוסבר בפרק על מבנה LVM, ה- LV שיצרנו, הוא בעצם מחיצה (יותר נכון Block Device) שניתן ליצור עליה FileSystem. כדי לראות את ה Block Devices שנוצרו, נריץ את הפקודה: [root@chew root]# ls -l /dev/data_vg/

total 0
crw-r----- 1 root disk 109, 0 Apr 14 14:58 group
brw-rw---- 1 root disk 58, 0 Apr 14 15:48 music
brw-rw---- 1 root disk 58, 1 Apr 14 15:58 work

ניתן לראות כי יש לנו את שתי ה- Block Devices שיצרנו הרגע: music ו- work.

אם נסתכל שוב במידע שיש לנו על ה VG:

[root@chew root]# vgdisplay data_vg
--- Volume group ---
VG Name data_vg
VG Access read/write
VG Status available/resizable
VG # 0
MAX LV 256
Cur LV 2
Open LV 0
MAX LV Size 255.99 GB
Max PV 256
Cur PV 1
Act PV 1
VG Size 24.36 GB
PE Size 4 MB
Total PE 6235
Alloc PE / Size 6235 / 24.36 GB
Free PE / Size 0 / 0
VG UUID kicnt9-KHrq-z59y-ucbb-Yz6D-1Dk6-KnmvP6

נראה כי Cur LV עכשיו מראה כי יש לנו 2 LV's מקושרים ל-VG, וכי ה-Free PE ירד ל- 0.

כד לבדוק את נתוני ה-LV שיצרנו, נריץ את הפקודה lvdisplay:

[root@chew root]# lvdisplay /dev/data_vg/work
--- Logical volume ---
LV Name /dev/data_vg/work
VG Name data_vg
LV Write Access read/write
LV Status available
LV # 2
# open 0
LV Size 14.36 GB
Current LE 3675
Allocated LE 3675
Allocation next free
Read ahead sectors 1024
Block device 58:1

השלב הבא, יהיה יצירת File System על ה- LV's שיצרנו, כדי שנוכל לעגון (to mount) אותן, ולהתחיל להשתמש בהן.

שימו לב: הגמישות שמקנה LVM בשינוי גודל ה-LV, חייבת להיות מתורגמת ל- File System שאותו נבחר. לא נוכל, לדוגמא, להקטין את גודל ה- LV, בלי קודם להקטין את גודל ה- FS שיושב עליו. נכון לכתיבת מדריך זה, ניתן לשנות את הגודל של ext2/3 ו- reiserfs בלבד (את xfs ו- jfs אי אפשר לשנות אחרי יצירה). לצורך ההדגמה, נשתמש ב ext3:

[root@chew root]# mke2fs -j /dev/data_vg/work
mke2fs 1.32 (09-Nov-2002)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
1884160 inodes, 3763200 blocks
188160 blocks (5.00%) reserved for the super user
First data block=0
115 block groups
32768 blocks per group, 32768 fragments per group
16384 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208

Writing inode tables: done
Creating journal (8192 blocks): done
Writing superblocks and filesystem accounting information: done

This filesystem will be automatically checked every 30 mounts or
180 days, whichever comes first. Use tune2fs -c or -i to override.

ונבצע פעולה דומה ל /dev/data_vg/music הפקודה mke2fs עם האופציה -j, גורמת ל FileSystem מסוג ext3 להיווצר על /dev/data_vg/work.

פעולה הבאה, תהיה לעגון (mount) את המחיצה החדשה שלנו, ולראות שאפשר באמת להשתמש בה:

[root@chew root]# mount /dev/data_vg/work /data/work/
[root@chew root]# mount /dev/data_vg/music /data/music/

/dev/hda2 on / type ext3 (rw)
none on /proc type proc (rw)
usbdevfs on /proc/bus/usb type usbdevfs (rw)
/dev/hda1 on /boot type ext3 (rw)
none on /dev/pts type devpts (rw,gid=5,mode=620)
none on /dev/shm type tmpfs (rw)
/dev/data_vg/work on /data/work type ext3 (rw)
/dev/data_vg/music on /data/music type ext3 (rw)

[root@chew root]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/hda2 3.9G 601M 3.1G 17% /
/dev/hda1 99M 14M 80M 15% /boot
none 125M 0 125M 0% /dev/shm
/dev/data_vg/work 15G 33M 14G 1% /data/work
/dev/data_vg/music 9.9G 33M 9.4G 1% /data/music

אפשר לראות ששתי המחיצות החדשות שלנו עגונות וזמינות לשימוש.

עכשיו מתחיל הכיף

עד עכשיו, עשינו פעולות בסיסיות של יצירה והוספה. נניח שלמשתמש שלנו נגמר המקום על ה-LV שנקרא work, והוא החליט להוסיף דיסק חדש. הוא קנה דיסק חדש של 20G, והחליט להוסיף עוד 10G ל-work. בנוסף, הוא החליט להעביר את music למקום הפנוי על הדיסק החדש. השלבים שהוא יצטרך לעשות הם: יצירת מחיצות מסוג Linux LVM (קוד 8e) על הדיסק החדש, הוספת מחיצה אחת ל- data_vg הקיים והרחבת המחיצות וה-FileSystems הקיימים. את ה-LV שנקרא music, נעביר למחיצה שניה בדיסק החדש, בעזרת pvmove. במקום שיפונה לנו על hda4, ניצור LV חדש בשם kids. אחרי החלוקה של הדיסק, הוא יראה כך:

[root@chew root]# fdisk -l /dev/hdb

Disk /dev/hdb: 20.5 GB, 20520493056 bytes
255 heads, 63 sectors/track, 2494 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

Device Boot Start End Blocks Id System
/dev/hdb1 1 1217 9775521 8e Linux LVM
/dev/hdb2 1218 2494 10257502+ 8e Linux LVM

כדי לאתחל את המחיצות כמחיצות LVM, נריץ עליהן את pvcreate:

[root@chew root]# pvcreate /dev/hdb1
pvcreate -- physical volume "/dev/hdb1" successfully created

[root@chew root]# pvcreate /dev/hdb2
pvcreate -- physical volume "/dev/hdb2" successfully created

עכשיו נשייך את hdb1 ל- data_vg:

[root@chew root]# vgextend data_vg /dev/hdb1
vgextend -- INFO: maximum logical volume size is 255.99 Gigabyte
vgextend -- doing automatic backup of volume group "data_vg"
vgextend -- volume group "data_vg" successfully extended

כדי לוודא שבאמת ה VG שלנו הורחב, נדלה עליו קצת מידע מהקרנל:

[root@chew root]# vgdisplay data_vg
--- Volume group ---
VG Name data_vg
VG Access read/write
VG Status available/resizable
VG # 0
MAX LV 256
Cur LV 2
Open LV 2
MAX LV Size 255.99 GB
Max PV 256
Cur PV 2
Act PV 2
VG Size 33.67 GB
PE Size 4 MB
Total PE 8620
Alloc PE / Size 6235 / 24.36 GB
Free PE / Size 2385 / 9.32 GB
VG UUID kicnt9-KHrq-z59y-ucbb-Yz6D-1Dk6-KnmvP6

אפשר לראות כי ה Cur PV שלנו עלה ל-2, כלומר ה-VG מורכב מ- 2 מחיצות פיזיות (אם אפשר לקרוא להן כך). כמו כן ניתן לראות שמספר ה- PE's הפנויים עלה, וכרגע יש לנו עוד כ- 10G פנויים.

שלב הבא, יהיה להגדיל את ה- LV הנחוץ. פעולה ראשונה שנבצע, היא בירור כמה PE's פנויים יש לנו מהוספת הדיסק האחרונה:

[root@chew root]# vgdisplay data_vg | grep Free
Free PE / Size 2385 / 9.32 GB

כעת נרחיב את מערכת הקבצים: ext3. שלב זה אינו מסובך, אל עלול להיות מסוכן. מומלץ בחום לגבות את המידע שעל ה LV לפני שמרחיבים את מערכת הקבצים שלו.
כעקרון, כדי להרחיב את מערכת הקבצים שלנו, היינו צריכים להריץ lvextend על ה-LV, ואז את הפקודה resize2fs כדי להגדיל את מערכת הקבצים עצמה. LVM מספק כלי שנקרא e2fsadm שמבצע את 2 הפעולות בשבילנו:

[root@chew root]# umount /data/work/
[root@chew root]# e2fsadm -l+2385 /dev/data_vg/work
e2fsck 1.32 (09-Nov-2002)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
/dev/data_vg/work: 11/1884160 files (0.0% non-contiguous), 67337/3763200 blocks
lvextend -- extending logical volume "/dev/data_vg/work" to 23.67 GB
lvextend -- doing automatic backup of volume group "data_vg"
lvextend -- logical volume "/dev/data_vg/work" successfully extended

resize2fs 1.32 (09-Nov-2002)
Begin pass 1 (max = 75)
Extending the inode table XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Begin pass 2 (max = 1)
Relocating blocks XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Begin pass 3 (max = 115)
Scanning inode table XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Begin pass 5 (max = 105)
Moving inode table XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
The filesystem on /dev/data_vg/work is now 6205440 blocks long.


e2fsadm -- ext2fs in logical volume /dev/data_vg/work successfully extended to 23.67 GB

השלבים שמבצע e2fsadm הם קודם כל fsck (או FileSystem Check), כדי לוודא שהמחיצה תקינה ואחידה. שלב הבא הוא הרחבת ה-LV, ולבסוף, הגדלת מערכת הקבצים כדי שתמלא את המקום הפנוי החדש.
שימו לב: למרות שמערכת הקבצים שלנו היא ext3, אנו משתמשים בכלים של ext2. זאת מכיוון ש ext3 הוא בעצם ext2 “משודרג” (לא משנה איך כרגע), וכלי הניהול של ext2 יודעים לנהל אותו.

נבדוק שהמחיצה אכן הוגדלה כמובטח:

[root@chew root]# mount /dev/data_vg/work /data/work/
[root@chew root]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/hda2 3.9G 604M 3.1G 17% /
/dev/hda1 99M 14M 80M 15% /boot
none 125M 0 125M 0% /dev/shm
/dev/data_vg/music 9.9G 33M 9.4G 1% /data/music
/dev/data_vg/work 24G 33M 23G 1% /data/work

אפשר לראות כי work גדלה מ 15G ל- 24G.

שלב הבא ואחרון בהתעללות שלנו יהיה העתקת ה LV שנקרא music מהדיסק הקודם לחדש (hda4 →hdb2). נתחיל בהוספת המחיצה ל VG שלנו:

[root@chew root]# vgextend data_vg /dev/hdb2
vgextend -- INFO: maximum logical volume size is 255.99 Gigabyte
vgextend -- doing automatic backup of volume group "data_vg"
vgextend -- volume group "data_vg" successfully extended

אבל יש לנו בעיה. גודלה של music הוא 2560 PE's, ואילו עכשיו נוספו לנו עוד 2503 PE's בלבד.

[root@chew root]# vgdisplay data_vg | grep Free
Free PE / Size 2503 / 9.78 GB
[root@chew root]# lvdisplay /dev/data_vg/music | grep Allocated
Allocated LE 2560

מה עושים? מתעללים. לצורך העתקת המחיצה, נצטרך קודם להקטין את music. כמו בהגדלת LV, כעקרון, ישלהשתמש ב-resize2fs כדי להקטין את מערכת הקבצים ואז ב-lvreduce כדי להקטין את ה LV. פה נכנסת שוב לתמונה e2fsadm, שיבצע את 2 השלבים בשבילנו.
שימו לב: הקטנת LV היא לא פעולה מסובכת, אבל עלולה להיות מסוכנת. יש לוודא כי המחיצה אינה מלאה עד סופה, וכי יש בה מספיק מקום פנוי כדי להקטינה לגודל הרצוי. לפני ביצוע הפעולה מומלץ בחום לגבות את ה-LV!.

כדי להקטין את music ב- 60 PE's, נריץ את הפקודה הבאה:

[root@chew root]# e2fsadm -l-60 /dev/data_vg/music
e2fsck 1.32 (09-Nov-2002)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
/dev/data_vg/music: 11/1310720 files (0.0% non-contiguous), 49345/2621440 blocks
resize2fs 1.32 (09-Nov-2002)
Begin pass 3 (max = 80)
Scanning inode table XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
The filesystem on /dev/data_vg/music is now 2560000 blocks long.

lvreduce -- WARNING: reducing active logical volume to 9.77 GB
lvreduce -- THIS MAY DESTROY YOUR DATA (filesystem etc.)
lvreduce -- doing automatic backup of volume group "data_vg"
lvreduce -- logical volume "/dev/data_vg/music" successfully reduced

e2fsadm -- ext2fs in logical volume /dev/data_vg/music successfully reduced to 9.77 GB


כדי לבדוק שמערכת הקבצים שעל music נשארה שלמה, נעגון אותה ונראה שהיא נגישה:
[root@chew root]# mount /dev/data_vg/music /data/music/
[root@chew root]# df -h /data/music/
Filesystem Size Used Avail Use% Mounted on
/dev/data_vg/music 9.7G 33M 9.1G 1% /data/music

במקרה שלנו: No output, is good output. אם מערכת הקבצים לא הייתה שלמה, mount היה זורק לנו שגיאה שמערכת הקבצים אינה תקינה, ולא היה מסכים לעגון אותה.

שלה הבא יהיה הזזת ה-PE's מהדיסק הנוכחי, לדיסק החדש.
שימו לב: זוהי פעולה די איטית, ועלולה לקחת לא מעט זמן, כמובן בהתאם לגודל ה-LV שאתם מעבירים. נשתמש בפקודה pvmove. הפקודה מאפשרת העתקה של PE's לפי מחיצת מקור ו/או לפי ציון טווח ה- PE's להעביר. לדוגמא: /dev/hda4:1-2500 יעביר לנו את music. עוד שיטה, היא ציון LV המקור ומחיצת היעד, מה שיהיה יותר נוח לנו, במקום לציין כמה PE's להעתיק:

[root@chew root]# pvmove -n music /dev/hda4 /dev/hdb2
pvmove -- moving physical extents in active volume group "data_vg"
pvmove -- WARNING: if you lose power during the move you may need
to restore your LVM metadata from backup!
pvmove -- do you want to continue? [y/n] y
/dev/data_vg/group::/dev/data_vg/music: 0304 8576, 0342 8576
/dev/data_vg/group::/dev/data_vg/music: 0304 16768, 0342 16768
/dev/data_vg/group::/dev/data_vg/music: 0304 24960, 0342 24960
....
/dev/data_vg/group::/dev/data_vg/music: 0304 20464000, 0342 20464000
/dev/data_vg/group::/dev/data_vg/music: 0304 20472192, 0342 20472192
/dev/data_vg/group::/dev/data_vg/music: 0304 20480384, 0342 20480384
pvmove -- doing automatic backup of volume group "data_vg"
pvmove -- 2500 extents of physical volume "/dev/hda4" successfully moved

כדי לוודא ש-music יושב עכשיו על hdb2 ולא על hda4, נריץ את lvdisplay עם האפשרות -v, שתתן לנו יותר מידע:

[root@chew root]# lvdisplay -v /dev/data_vg/music | head -18
--- Logical volume ---
LV Name /dev/data_vg/music
VG Name data_vg
LV Write Access read/write
LV Status available
LV # 1
# open 1
LV Size 9.77 GB
Current LE 2500
Allocated LE 2500
Allocation next free
Read ahead sectors 1024
Block device 58:0

--- Distribution of logical volume on 1 physical volume ---
PV Name PE on PV reads writes
/dev/hdb2 2500 89049 195500

אפשר לראות בשורה האחרונה, כי ה-PE's שמוקצים לנו, הם מ-hdb2. וכשנריץ pvdisplay על hda4, נראה שיש לו עכשיו 2350 PE's פנויים, שאותם העברנו:

[root@chew root]# pvdisplay /dev/hda4 | grep Free
Free PE 2560

שימו לה שכל פעולת ההעתקה נעשתה ללא הפרעה לפעילות המשתמשים כלל. לא היה צורך לעשות unmount ל music בזמן ההעתקה.

שלב אחרון יהיה יצירת LV חדש בשם kids במקום שנותר לנו ב-hda4.
בשלב ראשון נברר כמה PE's נשארו לנו עליו:

[root@chew music]# vgdisplay data_vg | grep Free
Free PE / Size 2563 / 10.01 GB

נשארו לנו 2563 PE's פנויים. נשתמש בהם ליצירת ה-LV החדש:

[root@chew music]# lvcreate -l 2563 -n kids data_vg
lvcreate -- doing automatic backup of "data_vg"
lvcreate -- logical volume "/dev/data_vg/kids" successfully created

השלב אחרון יהיה לצור על kids מערכת קבצים חדשה, ולעגון אותה:

[root@chew music]# mke2fs -j /dev/data_vg/kids
mke2fs 1.32 (09-Nov-2002)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
1314144 inodes, 2624512 blocks
131225 blocks (5.00%) reserved for the super user
First data block=0
81 block groups
32768 blocks per group, 32768 fragments per group
16224 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632

Writing inode tables: done
Creating journal (8192 blocks): done
Writing superblocks and filesystem accounting information: mkdir /datadone

This filesystem will be automatically checked every 35 mounts or
180 days, whichever comes first. Use tune2fs -c or -i to override.
/[root@chew music]# mkdir /data/kids
[root@chew music]# mount /dev/data_vg/kids /data/kids/

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

סיכום מילולי מהיר: ישנו VG, שמורכב מ- 3 מחיצות פיזיות: hda4, hdb1 ו- hdb2. עליהם יושבים 3 מחיצות LV, בחלוקה לא שווה: work, music ו - kids.

[root@chew music]# vgdisplay -v
--- Volume group ---
VG Name data_vg
VG Access read/write
VG Status available/resizable
VG # 0
MAX LV 256
Cur LV 3
Open LV 3
MAX LV Size 255.99 GB
Max PV 256
Cur PV 3
Act PV 3
VG Size 43.45 GB
PE Size 4 MB
Total PE 11123
Alloc PE / Size 11123 / 43.45 GB
Free PE / Size 0 / 0
VG UUID kicnt9-KHrq-z59y-ucbb-Yz6D-1Dk6-KnmvP6

--- Logical volume ---
LV Name /dev/data_vg/music
VG Name data_vg
LV Write Access read/write
LV Status available
LV # 1
# open 1
LV Size 9.77 GB
Current LE 2500
Allocated LE 2500
Allocation next free
Read ahead sectors 1024
Block device 58:0

--- Logical volume ---
LV Name /dev/data_vg/work
VG Name data_vg
LV Write Access read/write
LV Status available
LV # 2
# open 1
LV Size 23.67 GB
Current LE 6060
Allocated LE 6060
Allocation next free
Read ahead sectors 1024
Block device 58:1

--- Logical volume ---
LV Name /dev/data_vg/kids
VG Name data_vg
LV Write Access read/write
LV Status available
LV # 3
# open 1
LV Size 10.01 GB
Current LE 2563
Allocated LE 2563
Allocation next free
Read ahead sectors 1024
Block device 58:2


--- Physical volumes ---
PV Name (#) /dev/hda4 (1)
PV Status available / allocatable
Total PE / Free PE 6235 / 0

PV Name (#) /dev/hdb1 (2)
PV Status available / allocatable
Total PE / Free PE 2385 / 0

PV Name (#) /dev/hdb2 (3)
PV Status available / allocatable
Total PE / Free PE 2503 / 0

סיכום

בפרקים הקודמים נגענו רק בחלק מהפקודות שמנהלות את LVM, בחלקם לא היה צורך, וחלקם מתקדמות מדי למדריך זה. כדי לקבל את הרשימה המלאה של הכלים, עוד דוגמאות והסברים, מומלץ לפנות ל LVM-HOWTO הרשמי שנמצא בכתובת http://www.penguin.org.il/LDP/HOWTO/LVM-HOWTO/

אני חושב שהדוגמאות שהובאו במדריך זה ממחישות עד כמה LVM יכול להיות גמיש ומועיל, לא רק למנהל הרשת, אלא גם למשתמש הבייתי

מדריכים/מבוא_ל-lvm.txt · שונה לאחרונה ב: 2008/06/19 18:34 (עריכה חיצונית)
chimeric.de = chi`s home Creative Commons License Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0