السلام عليكم ورحمة الله وبركاته
كيف يمكننا زيادة حجم البارتشن عندما نحتاج لذلك ؟ بالعامية لما يصير البارتشن full ومحتاج مساحة زايدة من أي بارتشن آخر ، متى يمكنني الاستفادة من تلك المساحة واضافتها للبارتشن المطلوب ؟
اجابة هذا السؤال سهلة بشرط ان يكون البارتشن مهيأ لذلك ، بمعنى آخر يجب ان يكون البارتشن Logical Volume ويستخدم تقنية LVM لأعادة تحجيمة سواء بزيادة أو نقصان.
سأشرح في هذا الموضوع طريقة عمل هذا النوع من البارتشن ( 8e ) بالاضافة الى طريقة اعادة التحكم واضافة بارتشن جديد وما اليه من أمور تهم المستخدم ، وسيكون السيناريو كما يلي.
سنعمل 4 بارتشنات من نوع ( 8e ) ثم نربطهم جميعا ببارتشن جديد لنتحكم بحجمه كما نريد ، للتوضيح أكثر نقول أن البارتشنات الاربعه تسمى ( PV ) ، بعد ذلك يجب ربط الـ PV's الاربعه في بارتشن واحد يسمى ( VG ) للدلاله على انه يجمع عدة بارتشنات ، واخيرا سنقوم بعمل بارتشن من المساحة المتوفرة في ( VG ) الى بارتشن جديد يسمى ( LV ) وهو محور حديثنا.
تعريف الاختصارات
كود:
PV = Physical Volume الاربع البارتشنات الحقيقية
VG = Volume Group مجموعة تضم تلك البارتشنات وحجمها مجموع الاحجام
LV = Logical Volume بارتشن حقيقي يمكننا من اعادة تحجيمة بسهولة
هذه هي الخطوات فنحن سنقوم بانشاء عدد 4 بارتشن من نوع 8e يمكننا باستخدام الاداة fdisk ومن لا يعرف استخدامها لا انصحه بتطبيق الدرس ، يكتفي بالقراءة معي ، لان انشاء بارتشن جديد يجب ان يكون شي بديهي لمدير النظام ، ويمكنك الحصول على شرح للاداة ممن هنا و هنا ايضا
بعد ذلك نقوم بجمع هذه البارتشنات تحت مجموعة واحدة VG ، ثم نستخرج من هذه المجموعة بارتشن جديد نستطيع اعادة تحجيمة ان احتجنا لذلك
ستكون العملية أسهل عندما نتذكر التسمية المختصرة كما كتبتها أنا ، لان جميع الاوامر التي سنستخدمها ستبدأ بنفس التسمية كما سنرى في هذا الموضوع
قبل كل شي ، يجب علينا اضافة المودل المطلوب للكيرنل بالنسبة لردهات ، هذا يعني اضافة مايلي في ملف /etc/modprobe.conf
كود:
alias block-major-58 lvm-mod
alias char-major-109 lvm-mod
ثم احفظ الملف
بعد انشاء البارتشنز المطلوبة وبعد اعادة التشغيل ، ناتج الامر fdisk -l يجب ان يحتوي على مايلي
كود:
[root@ex4mple init.d]# fdisk -l
Disk /dev/hda: 80.0 GB, 80026361856 bytes
255 heads, 63 sectors/track, 9729 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/hda1 * 1 255 2048256 83 Linux
/dev/hda2 256 2805 20482875 83 Linux
/dev/hda3 2806 4080 10241437+ 83 Linux
/dev/hda4 4081 9729 45375592+ 5 Extended
/dev/hda5 4081 4203 987966 fd Linux raid autodetect
/dev/hda6 4204 4326 987966 fd Linux raid autodetect
/dev/hda7 4327 4449 987966 fd Linux raid autodetect
/dev/hda8 4450 4572 987966 fd Linux raid autodetect
/dev/hda9 4573 5181 4891761 83 Linux
/dev/hda10 5182 5304 987966 8e Linux LVM
/dev/hda11 5305 5427 987966 8e Linux LVM
/dev/hda12 5428 5550 987966 8e Linux LVM
/dev/hda13 5551 5673 987966 8e Linux LVM
انظر لنوع البارتشنات لدي من hda10 حتى hda13 هو Linux LVM
نجعل هذه البارتشنات ( PV ) كما ذكرنا ، بالامر pvcreate كمايلي
كود:
[root@ex4mple init.d]# pvcreate /dev/hda10 /dev/hda11 /dev/hda12 /dev/hda13
Physical volume "/dev/hda10" successfully created
Physical volume "/dev/hda11" successfully created
Physical volume "/dev/hda12" successfully created
Physical volume "/dev/hda13" successfully created
[root@ex4mple init.d]#
بعد ذلك نجمعها داخل مجموعة ( VG ) كما أسلفت سابقا ، بالامر vgcreate
كود:
[root@ex4mple init.d]# vgcreate lvmhard /dev/hda10 /dev/hda11 /dev/hda12 /dev/hda13
Volume group "lvmhard" successfully created
[root@ex4mple init.d]#
لاحظ اسم المجموعة lvmhard كما كتبته انا ويمكنك كتابة أي اسم تريد
الان ننشئ البارتشن النهائي ( LV ) بالامر lvcreate على النحو التالي
كود:
[root@ex4mple init.d]# lvcreate -L 1G -n lvmpart lvmhard
Logical volume "lvmpart" created
[root@ex4mple init.d]#
لاحظ الامر بعد الخيار (L-) قمت بتحديد الحجم 1 قيقا
وبعد الخيار (n-) قمت بتحديد اسم البارتشن lvmpart ، والمجموعة التي ينتمي اليها lvmhard التي أنشأناها قبل قليل.
هذه هي الصيغه ، ويمكنك تحديد الحجم الذي تريد حسب مجموع الاحجام في البارتشنات الحقيقية ( PV ) لو كان كل واحد فيهم 1 قيقا هذا يعني يمكنك استخدام حتى 4 قيقا لان هذا هو حجم المجموعة بعد ضم البارتشنات لها
الان يصبح مكان البارتشن هنا
كود:
/dev/lvmhard/lvmpart
على حسب التمسية التي اعطيت ، ولا يحتاج هذا البارتشن الا لفورمات فقط ليصبح نظام الملفات فيه ext3 نكتب الامر التالي
كود:
[root@ex4mple init.d]# mke2fs -j /dev/lvmhard/lvmpart
mke2fs 1.35 (28-Feb-2004)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
131072 inodes, 262144 blocks
13107 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=268435456
8 block groups
32768 blocks per group, 32768 fragments per group
16384 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376
Writing inode tables: done
Creating journal (8192 blocks): done
Writing superblocks and filesystem accounting information: done
This filesystem will be automatically checked every 37 mounts or
180 days, whichever comes first. Use tune2fs -c or -i to override.
[root@ex4mple init.d]#
بعد ذلك أعمل mount له كما تعلمنا من هذا الدرس
كود:
[root@ex4mple ~]# mount /dev/lvmhard/lvmpart /root/lvm
[root@ex4mple ~]#
نتحقق من عمل البارتشن الجديد بالامر df
كود:
[root@ex4mple ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/hda2 20G 6.2G 13G 34% /
/dev/hda1 2.0G 38M 1.8G 3% /boot
/dev/hda3 9.7G 57M 9.1G 1% /home
/dev/hdc 5.0M 5.0M 0 100% /media/cdrom
/dev/md0 2.8G 37M 2.7G 2% /root/raid
/dev/mapper/lvmhard-lvmpart 1008M 34M 924M 4% /root/lvm
يعمل كما يجب مثل مانشوف في السطر الاخير
ولجعل ال mount دائم نضيف هذا السطر في ملف fstab
كود:
[root@ex4mple ~]# nano /etc/fstab
/dev/lvmhard/lvmpart /root/lvm ext3 defaults 1 2
ثم نكتب الامر
كود:
[root@ex4mple ~]# mount -a
هذا كل ماعلينا فعله لانشاء بارتشن LVM ، وسأشرح الان كيف يمكننا اعادة تحجيمة بالاوامر المناسبة
ويمكننا رؤية حالة البارتشن وحجمه ومعلومات اخرى من خلال الامر lvdisplay قم بكتابتة وانظر للخانه LV Size
كود:
[root@ex4mple ~]# lvdisplay
--- Logical volume ---
....
....
LV Size 1.00 GB
....
[root@ex4mple ~]#
كما ترى ان حجم البارتشن 1 قيقا
لزيادة حجم البارتشن lvmpart نفعل ذلك بالامر lvextend كمايلي
كود:
[root@ex4mple ~]# lvextend -L +1G /dev/lvmhard/lvmpart
Extending logical volume lvmpart to 2.00 GB
Logical volume lvmpart successfully resized
قمنا باضافة 1 قيقا للبارتشن واصبح حجمه 2 قيقا ، تحقق من ذلك باستخدام الامر lvdisplay مره اخرى
ولتصغير حجم البارتشن /dev/lvmhard/lvmpart نفعل ذلك بالامر lvreduce على النحو التالي
كود:
[root@ex4mple ~]# lvreduce -L 1.5G /dev/lvmhard/lvmpart
WARNING: Reducing active and open logical volume to 1.50 GB
THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce lvmpart? [y/n]: y
Reducing logical volume lvmpart to 1.50 GB
Logical volume lvmpart successfully resized
بحيث ان 1.5 قيقا هو الحجم الجديد بدلا من 2 قيقا ، يمكنك التحقق من ذلك باستخدام الامر lvdisplay مره ثالثه
كود:
[root@ex4mple ~]# lvdisplay
--- Logical volume ---
LV Name /dev/lvmhard/lvmpart
VG Name lvmhard
LV UUID 34Hqdd-Yqk3-qCnv-U4bm-7WQJ-z8ba-oT2729
LV Write Access read/write
LV Status available
# open 1
LV Size 1.50 GB
Current LE 384
Segments 2
Allocation inherit
Read ahead sectors 0
Block device 253:0
طبعا عند زيادة الحجم او انقاصها يجب علينا تنفيذ الامر التالي ، حتى تصبح التغيرات مفعله بشكل نهائي بالامر ext2online
كود:
ext2online -d /dev/lvmhard/lvmpart
بعد ذلك تحقق من صحة الحجم ، بالامر df -h
لاضافة بارتشن جديد للمجموعة :
نقوم بعمل البارتشن باستخدام الاداة fdisk من نوع 8e ثم نجعله (PV) بالامر pvcreate ، ثم نضيفة للمجموعة بالامر vgextend.
تبدو العملية طويله ولكنها قصيره بالنظر الى اللون الاحمر فقط من مسلسل الاوامر التالية
كود:
[root@ex4mple ~]# fdisk /dev/hda
The number of cylinders for this disk is set to 9729.
There is nothing wrong with that, but this is larger than 1024,
and could in certain setups cause problems with:
1) software that runs at boot time (e.g., old versions of LILO)
2) booting and partitioning software from other OSs
(e.g., DOS FDISK, OS/2 FDISK)
Command (m for help): n
First cylinder (5674-9729, default 5674):
Using default value 5674
Last cylinder or +size or +sizeM or +sizeK (5674-9729, default 9729): +1GB
Command (m for help): t
Partition number (1-14): 14
Hex code (type L to list codes): 8e
Changed system type of partition 14 to 8e (Linux LVM)
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
WARNING: Re-reading the partition table failed with error 16: Device or resource busy.
The kernel still uses the old table.
The new table will be used at the next reboot.
Syncing disks.
[root@ex4mple ~]# init 6 <-- لاعادة تشغيل الجهاز
[root@ex4mple ~]# pvcreate /dev/hda14
Physical volume "/dev/hda14" successfully created
[root@ex4mple ~]# vgextend lvmhard /dev/hda14
Volume group "lvmhard" successfully extended
[root@ex4mple ~]#
كما ترى قمت بانشاء البارتشن وحددت نوعه فأعدت تشغيل الجهاز ثم طبقت عليه الامر pvcreate ثم الامر vgextend على اعتبار ان hda14 هو البارتشن الجديد للمجموعة lvmhard
لازالة البارتشن من المجموعة نستخدم الامر vgreduce كما يلي
كود:
[root@ex4mple ~]# vgreduce lvmhard /dev/hda14
Removed "/dev/hda14" from volume group "lvmhard"
[root@ex4mple ~]#
وسلامتكم ،،،
بعد فهم السيناريو وقرائته مرتين على الاقل ، وطريقة تطبيق الاوامر ، يمكنك تذكر كل شي بسهولة بعد قراءة السطور التاليه
لانشاء ( PV ) استخدم الامر pvcreate
لانشاء ( VG ) استخدم الامر vgcreate
لانشاء ( LV ) استخدم الامر lvcreate
لمعرفة معلومات عن ( PV ) اكتب الامر pvdisplay
لمعرفة معلومات عن ( VG ) اكتب الامر vgdisplay
لمعرفة معلومات عن ( LV ) اكتب الامر lvdisplay
لاضافة بارتشن للمجموعه ، نجعله ( PV ) ثم نستخدم الامر vgextend
لازالة بارتشن من المجموعة ، نستخدم الامر vgreduce
لزيادة حجم البارتشن ( LV ) استخدم الامر lvextend
لتصغير حجم البارتشن ( LV ) استخدم الامر lvreduce
لاعادة التحجيم يمكنك استخدام الامر e2fsadm وطريقته اسهل ، لكنه لم يعمل معي لذا لم أكتب عنه واستخدمت الاوامر المذكورة في الموضوع
هذا المقال خالص لوجه الله تعالى فللجميع حق التعديل عليه بتحديثه ليكون افضل ، علماً أنه أول مقال عربي يتحدث عن هذه التقنية في أنظمة لينوكس.