باعتباره نظام تشغيل متعدد المستخدمين ومتعدد المهام، فإنه بمجرد حذف الملفات الموجودة على Linux، يصعب استعادتها. على الرغم من أن أمر الحذف يحدد فقط عقدة الملف للحذف ولا يقوم فعليًا بمسح محتوى الملف، إلا أن المستخدمين الآخرين وبعض العمليات التي تكتب على القرص سوف تقوم بالكتابة فوق البيانات بسرعة.
1. مقدمة مختصرة عن بنية نظام الملفات Ext2
في نظام الملفات Ext2 الذي يستخدمه Linux، يتم تخزين الملفات في كتل بشكل افتراضي، حجم كل كتلة هو 1K، ويتم تمييز الكتل المختلفة بأرقام الكتل. يحتوي كل ملف أيضًا على عقدة تحتوي على مالك الملف وأذونات القراءة والكتابة ونوع الملف ومعلومات أخرى. بالنسبة لملف أصغر من 12 كتلة، يتم تخزين رقم الكتلة الخاص بكتلة بيانات الملف مباشرة في العقدة. إذا كان الملف أكبر من 12 كتلة، تقوم العقدة بتخزين رقم الكتلة للكتلة غير المباشرة بعد 12 رقمًا للكتلة، في الكتلة المقابلة لرقم الكتلة غير المباشر هذا، يتم تخزين أرقام الكتلة المكونة من 256 كتلة بيانات ملف (كل كتلة في Ext2fs). يشغل الرقم 4 بايت، وبالتالي فإن رقم الكتلة الذي يمكن تخزينه في كتلة هو 1024/4=256). إذا كانت هناك ملفات أكبر، فستظهر أيضًا الكتل الثانوية غير المباشرة والكتل غير المباشرة ** في العقدة.
2. طرق استعادة الملفات المحذوفة عن طريق الخطأ
توفر معظم توزيعات Linux أداة تصحيح الأخطاء التي يمكن استخدامها لتحرير نظام الملفات Ext2. ولكن قبل استخدام هذه الأداة، لا يزال هناك بعض العمل الذي يتعين القيام به.
أولاً، قم بإعادة تحميل القسم الذي يوجد به الملف المحذوف عن طريق الخطأ في وضع القراءة فقط. استخدم الأمر التالي: (بافتراض أن الملف موجود في القسم /usr)
يشير mount -r -n -o remount /usr -r إلى التثبيت للقراءة فقط؛ ويشير -n إلى عدم الكتابة إلى /etc/mtab. إذا كنت تقوم باستعادة الملفات على /etc، فأضف هذه المعلمة. إذا أخبرك النظام أن القسم xxx مشغول، فيمكنك استخدام أمر المصهر للتحقق من العمليات التي تستخدم الملفات الموجودة على هذا القسم:
المصهر –v –m /usr
إذا لم تكن هناك عمليات مهمة، قم بإيقافها باستخدام الأمر التالي:
فوزر -k –v –m /usr
يمكن بعد ذلك إعادة تركيب أنظمة الملفات هذه.
إذا تم تثبيت جميع الملفات في قسم كبير، فيمكنك استخدام Linux Single للدخول في وضع المستخدم المفرد في موجه التمهيد لتقليل فرصة معالجة النظام لكتابة البيانات إلى القرص الصلب، أو ببساطة تعليق القرص الصلب في موقع آخر على الجهاز. بالإضافة إلى ذلك، لا تكتب البيانات المستردة إلى / أعلى لتجنب إتلاف تلك البيانات المفيدة. إذا كان هناك دوس/ويندوز على الجهاز، يمكنك الكتابة إلى هذه الأقسام:
Mount –r –n /dev/hda1 /mnt/had
ثم يمكنك تنفيذ تصحيحات الأخطاء: (بافتراض أن Linux موجود في /dev/hda5)
#debugfs /dev/hda5
سوف تظهر debugfs موجه debugfs:
استخدم الأمر lsdel لسرد معلومات حول العديد من الملفات المحذوفة:
التصحيح:lsdel debugfs: تم العثور على 2692 رمزًا محذوفًا. حجم وضع مالك Inode يحجب الوقت المحذوف 164821 0 100600 8192 1/ 1 الأحد 13 مايو 19:22:46 2001 36137 0 100644 4 1/ 1 الثلاثاء 24 أبريل 10:11:15 2001 196829 0 100644 149500 38/ 38 الاثنين 27 مايو 13:52:04 2001 |
هناك العديد من الملفات المدرجة (تم العثور على 2692 هنا) الحقل الأول هو رقم عقدة الملف، والحقل الثاني هو مالك الملف، والحقل الثالث هو أذونات القراءة والكتابة، متبوعًا بحجم الملف، وعدد الكتل المشغولة، و وقت الحذف.
ثم يمكننا تحديد ما نحتاجه بناءً على حجم الملف وتاريخ الحذف. على سبيل المثال، نريد استعادة الملف بالعقدة 196829:
يمكنك أولاً إلقاء نظرة على حالة بيانات الملف:
التصحيح: القانون <196829> Inode: 196829 النوع: عادي الوضع: 0644 أعلام: 0x0 الإصدار: 1 المستخدم: 0 المجموعة: 0 الحجم: 149500 ملف ACL: 0 دليل ACL: 0 الروابط: 0 عدد الكتل: 38 القطعة: العنوان: 0 الرقم: 0 الحجم: 0 ctime: 0x31a9a574 - الاثنين 27 مايو 13:52:04 2001 atime: 0x31a21dd1 - الثلاثاء 21 مايو 20:47:29 2001 mtime: 0x313bf4d7 - الثلاثاء 5 مارس 08:01:27 2001 dtime: 0x31a9a574 - الاثنين 27 مايو 13:52:04 2001 الكتل: 594810 594811 594814 594815 594816 594817 المجموع: 38 |
ثم يمكنك استخدام أمر dump لاستعادة الملف:
تصحيح الأخطاء: تفريغ <196829> /mnt/hda/01.sav
سيؤدي هذا إلى استعادة الملف. الخروج من تصحيحات الأخطاء:
التصحيح: إنهاء
هناك طريقة أخرى وهي تحرير inode يدويًا:
التصحيح: مي <196829> الوضع [0100644] معرف المستخدم [0] معرف المجموعة [0] الحجم [149500] وقت الإنشاء [0x31a9a574] وقت التعديل [0x31a9a574] وقت الوصول [0x31a21dd1] وقت الحذف [0x31a9a574] 0 عدد الروابط [0] 1 عدد الكتل [38] علامات الملف [0x0] محفوظة1[0] ملف التحكم بالوصول [0] دليل الوصول إلى الوصول [0] عنوان الجزء [0] رقم القطعة [0] حجم القطعة [0] الكتلة المباشرة رقم 0 [594810] الكتلة الثلاثية غير المباشرة [0] |
بعد استخدام الأمر mi، يتم عرض سطر واحد من المعلومات للتحرير في المرة الواحدة، بالنسبة للأسطر الأخرى، يمكنك الضغط مباشرة على Enter للتأكيد، وتغيير وقت الحذف إلى 0 (غير محذوف)، وتغيير عدد الارتباطات إلى 1. بعد إجراء التغييرات، قم بالخروج من تصحيح الأخطاء:
التصحيح: إنهاء
ثم تحقق من /dev/hda5 باستخدام fsck
fsck /dev/hda5
سيقول البرنامج أنه عثر على كتلة البيانات المفقودة ووضعها في Lost+found. الملفات الموجودة في هذا الدليل هي ما نريده.