4.8 إدارة الأقراص | كتاب لينكس الشامل | >> |
يستطيع لينكس التعامل مع عدد كبير جداً من أنظمة الملفات بمرونة وسهولة ذلك أنه يرتكز على قالب عام يسمى نظام الملفات الإفتراضي VFS - Virtual File System يمكنه التعامل مع نظام ملفات بواسطة loadable module فإذ كنت تريد أن يتعامل لينكس مع أي نظام جديد فقط حصل على ال module الخاصة به. كما أن نظام الملفات به يحتوي ملفت افترضية وهمية مثل proc . كان الحد الأعلى في لينكس 2.2 لحجم كل قرص هو 2 تيرا-بايت (التيرا هي 1024 غيغا) ولكنه تجاوز هذا الحد في الإصدارات الحديثة بشكل كبير جداً.
إذا عرفت الاختصار macro التالي
_FILE_OFFSET_BITS=64
عند تصنيف برامج سي بواسطة gcc فإنها ستستعمل على وظائف LSF
وتتجاوز حدود 2 غيغا للملف الواحد و 2 تيرا للقرص الواحد مثلاً
gcc -d _FILE_OFFSET_BITS=64 myfile.c -o myfile
bash# mkswap /dev/hdb7 bash# swapon /dev/hdb7
bash# mkswap if=/dev/zero of=/swapfile bs=1m count=32 bash# mkswap /swapfile bash# swapon /swapfile
bash# swapoff /swapfile
الأقراص هي block device
نعرف هذا من حرف b على يسار الأذونات عند عرض ملف
الجهاز بأمر ls -l /dev/hda
هذا يعني أن البيانات مقسمة فيها إلى أجزاء متساوية الحجم
(مثلاً كل جزء 512 بايت)
وليست بايت بايت كما لوحة المفاتيح أو الطرفية.
فأنت تستطيع أن تقرأ الجزء رقم كذا دون المرور بالأجزاء لتي قبله
كما يمكن أن تقرأها بتسلسل معكوس
الجزء رقم 100 ثم 99 وهكذا.
هذا يعني أن القرص الصلب ليس مثل خزان
تضع فيه البيانات من جهة وتحصل عليها من جهة
أخرى بل هو مثل صناديق(بريد مثلاً) مرقمة
تخزن البيانات في الصندوق رقم كذا .. استرجع البيانات من صندوق
رقم كذا. كما أننا لا نريد أن نتعامل مع أرقام ولا نريد أن تكون
كل الملفات مستاوية الحجم؛ لهذا يوجد نظام الملفات
وهو طريقة وهمية لتوصيف تلك الأرقام. كيف.
نخصص جزء من هذه الصناديق ليكون فهرساً نحتفظ فيه بمعلومات
عن الملف (اسمه وتاريخه وحجمه ورقم أول صندوق) الآن
في كل صندوق نخزنن جزء من الملف ورقم الصندوق الذي يليه
(أي الذي به البقية وهكذا)
هذه الطريقة في الترتيب هي نظام الملفات وعملية تحديد
نظام ملفات قرص تمسى تهيئة.
لاحظ أن ملف حجمه واحد بايت لا ينقص من حجم القرص واحد بايت بل أكثر ؛ذلك هو حجم وحدة التخزين الدنيا جرب ذلك بنفسك.
هناك مجموعة من الأدوات للتعامل مع كل نوع من الملفات مثلاً mkfs.msdos و mkfs.minix ... و fsck.minix ... إلخ الجزء الأول هو وظيفة الأداة والثاني أي نظام ملفات نظام الملفات الأكثر شيوعاً في لينكس هو ext3 ولكن هناك من يفضل reiserfs و xfs (الأخير من SGI وخاضع لرخصة GPL يمكنه أن يضع 32 مليون ملف في مجلد واحد قد يصل الملف إلى حدود التيرا-بايت انظر http://oss.sgi.com/projects/xfs ) أما النظام المفضل لعمل أقراص الإنقاذ هو minix ولعمل قرص الرام الاستهلالي هو ext2 الأول لأن مزايه القليلة تجعله يوفر بعض المساحة أما الثاني لأنه مدعوم دون أي module. ويجب أن نشير إلى أن ext3 متوافق مع ext2 فأدوات الثاني تصلح للأول (ربما يجب أن أقول الثالث!) ، أما النظام msdos فهو النظام fat المستخدم في DOS وويندوز الذي لا يسمح لطول اسم الملف أن يزيد عن 12 حرف فهناك 8 للمقطع الأول ثم نقطة ثم 3، النظام vfat هو النظام الخاص بويندوز وهو متوافق مع msdos ومطور منه لكي يسمح بأسماء طويلة ومسافات. على الرغم من هذا لتطوير يفتقر هذا النظام إلى الوصلات وملفات الأجهزة والأذونات وملفات FIFO . فلا يمكن تركيب لينكس على vfat ولكن تم عمل نظام اسمه umdos يسد ذلك النقص في fat لينزل عليه لينكس بطريقة متوافقة مع fat. يتركز حديثنا على ext3 و ext2 ولن يكون صعباً عليك أن تتلمس طريقك للباقيات.
مثل البنية التحتية. يقوم المصنع بتهيئة للقرص من نوع آخر يحدد فيها عدد القطاعات (المقصود بالقطاع هنا ليس القطاع الدائري كله بل الخط الخارجي منه) وعدد المسارات (المسار هو حلقات دائرية متحدة المركز مختلفة الأقطار) وكم بايت يمكن أن يحتوي كل قطاع. بتعبير آخر هو تحديد موقع كل بايت الفيزيائي على القرص. هذه العملية كما قلن يتولها المصنع فقط. ولكن يمكنك أن تجرب ذلك على قرص مرن (لا يوجد في حدود علمي أداة للقرص الصلب).
bash# fdformat /dev/fd0u1440
bash# fdformat /dev/fd0u1760
/dev/fd0
أما الباقيات فعليك ذكر الجهاز
صراحةً مثلاً ب /dev/fd0u1722
كما يحب أن تنتبه أنه ليس كل السواقات/المشغلات تستطيع
التعامل مع كل هذه الهيئات.
بعد ذلك عليك وضع نظام ملفات على القرص بعملية التهيئة.
لا يحتاج لينكس إلى أن تعرف القرص الصلب في البايوز BIOS ولكن لا يعمل ويندوز وقد لا يعمل lilo/grup بشكل جيد إذا لم يعرف بشكل جيد في البايوز. يكون هذا التعريف بذكر عدد الأسطونات cyl و عدد المسارات tracks و عدد القطاعات sec وهذه القيم مكتوبة على الظهر القرص وتستطيع البايوزات الحديثة معرفتها تلقائياً. على أي حال هذه قد لا تكون حقيقية بسبب وجود بعض الحدود التاريخية عن تصميم اللوحات الأم للحواسيب لهذا تستخدم قيم غير واقعية ويستخدم نظام منطقي للتحويل يسمى LBA أي Logical Block Addressing إن لم تخني الذاكرة. يجب وضع هذا الخيار مفعّل في البايوز كما يجب تفعيله في lilo/grup.
قلنا في فصل تركيب لينكس أن هناك 3 فوائد لعمل أقسام هي
برامج التقسيم منه ما هو سهل ومنها من هو معقد من البرامج السهلة الرسومية diskdrake في ماندريك و diskdruid في ريدهات واستعمالهما كأي برنامج آخر. وربما يعجب البرنامج النصي cfdisk الذي يمكنك التعامل معه بالأسهم لفوق وتحت لاختيار القسم ثم لليمين واليسار لتحديد ماذا تريد أن تفعل به. على النقيض نجد البرنامج fdisk الذي يعتمد على ادخال حروف أوامر حيث يظهر محث
bash# fdisk -l /dev/hda display a report bash# fdisk /dev/hda Command (m for help): m a tuggle bootable flag c tuggle dos compitability flag d delete l list m this help n new partition o new dos partition table p print table q quit without saving t change type u unit (sec/cyl) v verify w write table x extra expert options
إذا كان لديك دوس أو ويندوز فإن فلسفة التقسيم كما يلي: القسم الأول hda1 هو قسم أولي primary و قابل للإقلاع bootable أما القسم الثاني hda2 فهو القسم الممتد extended وهو يحتوي بقية الأقسام (مساحته تساوي مساحة بقية الأقسام ولا يجوز ضمه) ثم تأتي الأقسام الأخرى تسمى منطقية logical. بكلمت أخرى الأقسام 1-4 هي إما أولية primary أو ممتدة أما فوق 4 فهي منطقية. لهذا يجوز أن يوجد 4 أقسام كلها أولية primary ولكن هكذا لا تستطيع إضافة المزيد من الأقسام، فإذا كان هناك 3 أولية استطعت عمل واحد ممتد تضع فيه أي عدد من المنطقية. كما يجب أن يعلّم أحد الأولية على أنه bootable
+128M
ثم نحدد نوعه ليكون linux swap فنضغط t ثم 6 ثم يعرض لنا
أنواع منها linux swap وهي رقم 82 فندخل رقمه فإذا لم يكن موجوداً
[ENTER] ليعطيك صفحة أخرى
ثم نضيف قسم آخر بنفس الطريقة ولكن نعطيه الرقم 7 ونكتب
[ENTER] عندما يسأل عن الحجم ليجعله الحد الأعلى
ونحدد النوع
linux native ذات الرقم 83 ثم نخرج إذا شعرنا أن هناك مشكلة ما
وإلا ندقق ثم نخزن ثم نخرج
v و w و q.
لا تغير تقسيمية قرص مضموم إذ كنت تريد تغيير تقسيمة القرص الجذر أقلع من قرص إنقاذ مرن أو من قرص التركيب في طور الإنقاذ أو من توزيعة حية.
-s
مثلاً
parted -s /dev/hda resize 1 0 1023
تجعل القسم الأول يبدأ من 0 وينهي عند 1023 (الوحدة هي ميغا) ،
ويجعله الخيار -i
متفاعلاً أكثر.
شغله بالأمر التالي
parted -i /dev/hdb
ليقوم بتقسيم hdb
parted يقوم بالتخزين فور كتابة الأمر على عكس السابقات لذا لا تلعب به فلا يوجد خروج دون تخزين.
parted
جرب الأوامر التالية
bash# parted /dev/hdb GNU parted X.YY.ZZ WARNING .... (parted) print Minor Start End Type Filesystem Flags 1 0.0 5010.7 primary FAT boot (parted) help (parted) help check (parted) check 1 (parted) resize 1 0 1023 (parted) print Minor Start End Type Filesystem Flags 1 0.0 1023 primary FAT boot (parted) mkpart primary ext2 1023 5010.7 (parted) print Minor Start End Type Filesystem Flags 1 0.0 1023 primary FAT boot 1 1023 5010.7 primary ext2
"primary"
و "logical"
و "extended"
وأنظمة الملفات التي تهمك هي "FAT"
و "ext2"
و "linux-swap"
.
عند استعمال الأمر print
فإن أول عمود هو رقم minor
وهو الرقم
الذي يمثل القسم الذي تريد العمل عليه.
الأمر mkpart
لا يقوم بتهئية fortmat
للقسم لذلك عليك فيما بعد
عمل mkfs
على الصيغة mkfs MINOR FSTYPE
أو عمل القسم وتهيئته دفعة واحدة باستعمال mkpartfs
بنفس صيغة mkpart
.
أنظمة الملفات هيext2 ext3 FAT hfs jfs linux-swap ntfs reiserfs hp-ufs sun-ufs xfs
rm MINOR
وأحياناً قد تحب نسخ الملفات منه إلى قسم آخر
cp MINOR1 MINOR2
إذا حذفت كل الأقسام أو استلمت قرص من المصنع يمكنك عمل
جدول تقسيم جديد من الصفر بالأمر
mklabel TYPE
حيث TYPE
هي msdos
أو GPT
أو loop
يجب أن لا تخلط بينه وبين name MINOR NAME
التي تعطي القسم اسماً.
الاستخدام الأساسي لهذا البرامج هو تحجيم الأقسام
resize MINOR START END
ولكن يمكن نقل الأقسام move MINOR START END
.
إذا كان هناك أكثر من قرص فيزيائي قبل كل شيء نفذ
select DEVICE
حيث DEVICE
هو الجهاز مثل /dev/hda
قبل تحجيم/تقليص قسم يجب أن تفحصه
بأمر dosfsck
أو e2fsck
لأقسام FAT
و ext2
ثم تفحصها داخل parted
بأمر check
.
كما يجب تحويل أقسام ext3
إلى ext2
.
إذا كان القرص كبيراً فإن أنظمة BIOS
الحديثة تستعمل
خياراً اسمه LBA
تأكد من أنه فعال (من أجل ويندوز) ،
وتأكد من أن أقسام ويندوز تحمل علامة LBA
يمكن وضعها داخل parted
بالأمر set 1 lba on
حيث 1 هو رقم القسم.
ext2
والتحذير نفسه
ينطبق هنا أيضاً.
بعد تقسم أي قرص فإن عليك تهيئته بنظام ملفات. أو عند تغيير تقسيم سابق فإنك بحاجة لتهيئة الأقسام المتأثرة.
لديك قرص مرن تريد مسح كل الملفات منه
bash# mkdosfs -v /dev/fd0u1440
هذا يعني أنه يمكن استرجاع هذه البيانات
ما لم تمحى. لا تعتمد على هذا فهذا مربع تحذير.
بكلمات أخرى إذا كنت تريد إخفاء ملفات êن الوجود
فهذا الحل غير كافي. ربما تنفيذ هذا الأمر قبل التهيئة يفيدك:
dd if=/dev/zero of=/dev/hdb1 bs=1m
bash# mke2fs -v /dev/hda7
bash# mke2fs -Cv /dev/hda7
bash# tune2fs -j /dev/hda7
tune2fs -O ^has_jornal /dev/hda7
وهذا مهم قبل تقليص حجم القرص.
إذا أردت تحويل قسم من ext2 إلى ext3 فعليك إلغاء
الضم أو على الأقل جعله للقراءة فقط
mount /dev/hda7 -o remount,ro
ثم التأكد من أنه نجح في ذلك بكتبة mount
دون معاملات وملاحظة وجود ro مقابل ذلك القسم ثم تنفيذ tune2sf
-L
متبوعاً بالاسم أو باستعمال e2label.
لفحص قسم معين نستخدم الأمر fsck التي يتعرف على نظام الملفات تلقائياً وعليه يتصرف أو يمكنك استعمال الأداة الخاصة بذلك النظام تحديداً مثل e2fsck
قبل فحص قسم فعليك إلغاء
الضم أو على الأقل جعله للقراءة فقط
mount /dev/hda7 -o remount,ro
ثم التأكد من أنه نجح في ذلك بكتبة mount
دون معاملات وملاحظة وجود ro مقابل ذلك القسم ثم تنفيذ tune2sf
bash# e2fsck /dev/hda7 e2fsck: /dev/hda7 is clean bash#
-f
إذا وجد شيء خطأ فإنه يسألك أن تضغط y للتصليح و n للتجاهل
دون مفتاح ENTER
fix [yn]:
-a
فهو سيقوم بالإصلاح المطلوب إذا لم يكن
هناك مخاطر. فإن وجد أن هذا قد يؤدي لفقد كثير من
البيانات فإنه يقول لك نفذ البرنامج دون a.
إذا كنت تريده أن يوافق على كل الأسئلة y حتى لو كانت
خطرة استعمل الخيار -y
أي
e2fsck -y /dev/hda7
قلنا أنه ربما هناك خطر على بعض البيانات أن تفقد.
هذه الملفات المفقودة والتي استطاع fsck
ترميمها جزئياً تجدها في مجلد /lost+found
ولكن دون أسماء على شكل أرقام وربما داخل مجلدات فرعية عنه تشير للمجلد
الذي كانت فيه. تأتي الآن مهمتك أن تضعها في مكانها.
قلنا في تحذير سابق أن الأقسام المهيئة
يمكن استرجاها لأنها لا تمهد بمدحلة كما يتخيل لبعض
بالطريقة نفسها يمكنك أن تستنتج أن الملفات المحذوفة
يمكن استرجاعها. لا نقول هذا لإعطائك ثقة زائدة عند حذف الملف
بأن هناك أمل بعودته، بل لتحذر عند حذف ملف
حساس مثل passwd بأن أحدهم يمكن أن يستعده.
شغل برنامج mc ثم اكتب cd /#undel:hda7
وستجد
دليل وهمي يحتوي الملفات المحذوفة
(ولكن بدل أسمائها تظهر أرقام)
تستطيع تمييز الملف من محتوايته بضغط F3
يمكنك استعادة الملف بنسخه إلى مكان آخر.
هل تفكر بحل؟ أول ما يخطر بالبال هو الطريقة التالية لحذف ملف اسمه mysecrit وحجمه 1ميغا :
bash# dd if=/dev/zero of=mysecrit bs=1k count=1024 1024+0 records in 1024+0 records out bash# rm mysecrit
bash# dd if=/dev/urandom of=mysecrit bs=1k count=1024 1024+0 records in 1024+0 records out bash# sync bash# rm mysecrit
sync هو أمر يجبر النظام على كتابة ما هو موجود في ال buffer/cache وإرسالها إلى القرص فيزيائياً. يفيد هذا الأمر إذا شعرت أن النظام على وشك أن يعلق وتريد إفراغ محتويات buffer/cache إلى القرص حتى لا تفقد. وبهذا عندما يعمل النظام مجدداً ويفحص لن يفقد الكثير. هذا إضافة للفائدة غير التقليدية السابقة.
bash# shred mysecrit
هل لديك ملفات iso (صورة لنظام ملفات القرص لمدمج) يمكنك الدخول لمحتوياته دون وضعها على قرص مدمج!! والتعامل معها وهي لا تزال صورة يكون ذلك بواسطة جهاز الحلقة المغلقة loop back device فنعد هذا الجهاز ليكون الصورة ثم نضمه ويمكن عمل هذا بطريقة ضمنية كما يلي
bash# mount -o loop,ro /home/ahmad/cd_image.iso /mnt/cdrom
bash# losetup /dev/loop0 /home/ahmad/cd_image.iso bash# mount -o ro /dev/loop0 /mnt/cdrom
umount
لذلك الجهاز. هذا لا يكفي لتحريره إذا
/etc/mtab
وصلة وعليك تحرير الجهاز
بأمر losetup -d /dev/loop0
بعد إلغاء الضم.
bash# umount /dev/loop0 bash# losetup -d /dev/loop0
ps ax | grep 'loop'
أو fuser ،
ويمكنك أن تعرف إن كان مضموماً بأمر
losetup /dev/loop0
.
يمكن عمل صور لنظام ملفات من أنوع وليس فقط iso ووذلك إما بأمر dd بحيث يكوون القرص/القسم هو الدخل والملف هو الخرج كما
bash# dd if=/dev/hdb1 of=/misc/hdb1.img.vfat bs=4K
bash# dd if=/dev/zero of=/misc/img.ext2 bs=1M count=32 32+0 records in 32+0 records out bash# mke2fs -v /misc/img.ext2 mke2fs: /misc/img.ext2 is not block device, continue ? y
يمكن عمل تحويل مجلد معين إلى قرص مضغوط يتم ضمه بجهاز الحلقة المغلقة loop back device باستعمال نظام ملفات cramfs. بعد إنشاء النظام تتمكن من قراءته فقط. المميز في هذا النظام هو سرعة القراءة. هذا مثال يوضح كيف تعمل النظام وتضمه
bash# mkfs.cram -v /home/ali/mytree /misc/img.cram bash# mount -o loop,ro -t cramfs /misc/img.cram /mnt/cramfs
يكون ذلك بكل بساطة باستعمال جهاز الحلقة المغلقة مرة خرى
loop back device ولكن مع الخيار -e
عند
إعداده بأمر losetup متبوع بطريقة التشفير
مثل twofish و blowfish و cast128 و serpent و aes انظر إلى محتويات
/proc/crypto
لتعرف الطرق المحملة حالياً
ويمكنك إضافة أخرى بواسطة insmod
ثم الاسم وهو موجود في مجلد
/lib/module
ثم رقم النواة ... إلى آخر المسار.
وثيقة Loopback-Encrypted-Filesystem-HOWTO تقترح serpent
والكثير من الوثائق الأحدث تقترح aes وهي الطريقة المعتمدة لدى المؤسسة الوطنية (الأمريكية) للمعايير والتكنولوجيا NIST.
هذا مثال يشرح
كيف تعمل قرص مشفر بحجم 64 ميغا بطريقة aes.
يتم إعدادها كما يلي: (الأمر الأول للتأكد من أن رقم صفر غير محجوز)
# losetup /dev/loop0 /dev/loop0 does not exists # dd if=/dev/zero of=/misc/secrit bs=1M count=64 64+0 records in 64+0 records out # losetup -e aes-256 /dev/loop0 /misc/secrit password:******* # mke2fs /dev/loop0 # losetup -d /dev/loop0
/misc/secrit
بحجم 64 ومشفر وفق aes و مهيء وفق ext2
(لمزيد من الحماية ضع urandom مكان zero حتى لا يميّز المخرب المساحة الخالية)
يمكن تمرير كلمة السر(المفتاح) لبرنامج losetup من خلال أنبوب ‘|‘ أو ملف ‘<
‘
# losetup -e aes /dev/loop0 /misc/secrit password:******* # mount -t ext2 -o rw /dev/loop0 /mnt/secrit
# umount /mnt/secrit # losetup -d /dev/loop0
/dev/hdb1
مثلاً مكان /misc/secrit
(دون تحديد الحجم count في أمر dd)
وحتى تجعل العملية شبه أتوتوماتيكية يمكنك إضافته إلى fstab ولكن في عمود الخيارات
أضف نوع التشفير encryption=aes-256
.
أما لتعقيد الأمر يمكنك جعل كلمة السر عبارة عن ملف عشوائي موجود على قرص فلاش USB/FLASH واستعمال أمر كالتالي
# losetup -e aes /dev/loop0 /misc/secrit < /mnt/flash/mykey
عمل قرص مشفر يجعل المخرب يعلم أنه مشفر ويبدأ بالتحزير وعمل crack ولكن هناك نظام ملفات يشفر ويضع نظام ملفات وهمي لخداع المخرب Steganographic File System انظر http://stegfs.sf.net
هي Logical Volume Management والمقصود بها أن مجموعة من الأقراص(أو الأقسام) تظهر منطقياً وكأنها قرص واحد وإذا أضفت قرص جديد للمجموعة فإنه يضاف لمساحة هذا القرص المنطقي وبهذه الطريقة تكون المساحة الجديدة متاحة لكل الأدلة بدلاً من الدليل الذي يضم إليه. انظر LVM-HOWTO
رايد هي اختصار لمنظومة الأقراص المستقلة والتي تحتوي على بيانات زائدة/فائضة عن الحاجة. Redundant Array of Indepenant Disks. وهي بكلمات غير مشفرة مجموعة من الأقراص الصغيرة (الرخيصة) ، التي تتصرف وكأنه قرص واحد وهي نوعان إما عتادية Hardware أي تحضر هذا الصندوق (الكبير عادةً) وتوصله عبر مقبس scisi أو usb . النوع الآخر هو برمجي أي جهاز لينكس ومجموعة من أقراص ide أو حتى مجموعة من الأقسام تجعلها تبدو كقرص واحد. السؤال الذي يحيرك الآن ماذا تختلف عن سابقتها أو لماذا يرغب أحدهم بتقسيم قرص ثم دمج الأقسام وهمياً في قرص واحد؟ سنجيب عليها بعد معرفة اصناف رايد.
رايد يصنف حسب طريقة توزيع البيانات على الأقراص منها التالية:
level 0 - stripping S=sum(si)
level 1 - mirroring S=s1=s2...=sn
level 5 - parity checking S=sum(si)-s1
<< السابق | كتاب لينكس الشامل | التالي >> |