استرجاع ملفات ضائعة

واجهت واحدة من أكبر المشكلات التي يمكن أن تحدث لمستخدم للحاسوب الشخصي، إذ أعدت تهيئة القرص الصلب وفقدت المعلومات المحفوظة عليه! لكن، قبل عرض الطريقة التي استخدمتها لاستعادة معظم تلك المعلومات ، أعرض السبب الذي أدى إلى ضياعها...

لدي قرص صلب بسعة 4GB، قسمته إلى c: وd:، بسعة 2GB لكل منهما، مستخدماً أمر Fdisk، ثم ركبت نظام التشغيل ويندوز98 على السواقة c:، وحولت نظام الملفات الخاص بها إلى FAT32، وأبقيت السواقة d: بنظام الملفات FAT16. أردت بعد فترة، تهيئة السواقة c: بالأمر Format (لسبب ما!) فنسخت كافة الملفات المهمة من السواقة c: إلى :d، وأعدت تهيئة السواقة c:، وافترضت أن تصبح السواقة c: فارغة، وأن تبقى السواقة d: بدون تغيير. وكانت المفاجأة، أن النظام لم يعد يتعرف إلا على القرص c:، بسعة 2G فقط، أي أن حذف جدول التقسيم ( Partition Table) الذي أنشأه Fdisk سابقاً أحذفه. بدأت، بعد أن تداركت نفسي، بمحاولات استرجاع المعلومات المهمة جداً، التي كنت حفظتها على السواقة :d، باستخدام برنامج DiskEdit المتوفر في مجموعة برامج Norton Utilities، لأكتشف أن جدول FAT للسواقة d: بالإضافة إلى جدول التقسيم، محذوفان تماماً، أي أنهما استبدلا بسلسلة من الأصفار، مما أعادني إلى حالة الصدمة من جديد! وقبل أن أقول "حسبي الله"، وأعتبر أن الملفات التي ضاعت لن تعود، على الرغم من أنها أخذت من وقتي شهراً لإنجازها، فكرت في إجراء محاولة أخيرة، بعد أن جربت كل الطرق الممكنة التي أعرفها، (مثل تنفيذ UnFormat) فطلبت مساعدة العاملين في المجلة.. حصلت على مساعدة قيّمة جداً من السيد، أنس السيد، وتكللت المحاولة بالنجاح، إذ استطعت من خلالها، استعادة 99% من ملفاتي المهمة… وإليكم الخطوات:

استخدمت برنامج Norton Disk Doctor، الذي تعرف على جدول التقسيم القديم، واسترجعه بشكلٍ صحيح، لكن بدون أن يسترجع جدول توضُّع الملفات (FAT)، أو بنية الأدلة (Dir)، وأصبح لدي سواقتان، بسعة 2G لكل منهما، لكنهما فارغتان تماماً، (يجب الانتباه إلى عدم استخدام الأمر fdisk، وإلا سيزداد الوضع سوءاً). بدأت عملية الاسترجاع بالاستعانة ببرنامج DiskEdit من Norton Utilities، حيث اخترت القائمة Object، ثم Drive ، وتأكدت أن الخيار (Physical disk) فعال، ثم اخترت السواقة الفيزيائية المطلوبة.

أولاً: استرجاع الأدلة ( Directory):

1- اخترت في برنامج Diskedit، القائمة View، ثم as Directory .

2- اخترت القائمة Tools، ثم Find Object، ثم SubDirectory، ليبدأ البرنامج بالبحث عن أي بنية شبيهة بالدليل على السواقة، وعندما وجد دليلاً أرغب باسترجاعه، سجّلت المعلومات المتعلقة بموقع هذا الدليل الرئيسي، على القرص، وهي معلومات Cyl وSide وSector.

3- كررت العملية السابقة، لكل فهرس أريد استرجاعه، ويجب الإشارة إلى أن هذه العملية تستغرق وقتاً طويلاً جداً.

4- اخترت من القائمة Objects، Physical Sector و أدخلت في صندوق الحوار المعلومات (Cyl,Side,Sector) التي سجلتها في الخطوة 2، ليتم وضع رأس القراءة للقرص الصلب في الموقع الفيزيائي الذي حددته.

5- سجلت رقم الكلستر (Cluster) المعبر عن بداية الدليل المطلوب تماماً، أي رقم الكلستر لأول سطر من الدليل الظاهر على الشاشة.

6- اخترت Object، ثم Drive، ثم Logical Disk وحددت السواقة التي عليها المعلومات الضائعة.

7- اخترت من قائمة Tools، الأمر Configuration، وأزلت إشارة x عن الخيار Read Only .

8- بحثت عن أول مدخل غير مستخدم، أي أول سطر على الشاشة فيه عبارة Unused Directory Entry، على أن يكون في بداية قطاع، إذ يظهر في بداية القطاع عبارة < Physical Sector …. > باللون الأصفر، ثم جعلته فعالاً. وأدخلت في خانة Name، الاسم الذي أريده لهذا الدليل، وأدخلت في خانة Ext مسافات، وفي خانة Cluster رقم الكلستر الذي سجلته في الخطوة 5، وفي خانة Dir كلمة Dir، وتركت بقية الخانات كما هي. اخترت بعد ذلك، الأمر Write Changes، من قائمة Edit، وأكدت الأمر .

9- اخترت من قائمة Link، Cluster Chain (FAT)، ثم ضغطت على المفتاح E في لوحة المفاتيح، لأحدد نهاية الدليل EOF، واخترت Edit، مرة أخرى، ثم Write Changes.

سيظهر بعد انتهاء تلك الخطوات الدليل الذي تم استرجاعه، بكامل محتوياته من ملفات وأدلة فرعية. لكن الملفات التي يزيد حجمها على 32KB، (حجمها أكبر من قطاع واحد)، ظهرت كلها وكأنها بحجم 32KB، فقط، مع إهمال الزيادة، فاتبعت الخطوات التالية، لاسترجاع تلك الملفات:

ثانياً : استرجاع الملفات التي يزيد حجمها على 32KB (1 Cluster) :

1- اخترت من قائمة View، الخيار as Directory.

2- اخترت من القائمة Objects، Physical Sector وأدخلت في صندوق الحوار، المعلومات (Cyl,Side,Sector) التي سجلتها في الخطوة 2 (من أولاً)، عن الدليل الذي يتضمن الملف المطلوب استرجاعه، فعرض البرنامج الدليل المطلوب، وسجلت اسم الملف المطلوب ( تحت الخانة Name)، وحجمه (تحت الخانة Size)، ورقم الكلستر الذي يبدأ منه (تحت الخانة Cluster).

3- كررت الخطوة 2 لكلملف أريد استرجاعه يزيد حجمه على 32KB .

4- استخدمت آلة حاسبة لحساب عدد الكلسترات التي يشغلها الملف، حسب المعادلة التالية:

عدد الكلسترات(Clusters) = ] الحجم (Size) من الخطوة 2 [ ÷ 32768

5- أهملت القسم الكسري من الناتج، وأجريت العملية الحسابية التالية على القسم الصحيح، للحصول على آخر كلستر يشغله الملف:

الكلستر الأخير للملف = أول كلستر للملف( من الخطوة 2 ) + عدد الكلسترات التي يشغلها هذا الملف(من الخطوة 4)

6- اخترت من قائمة Tools، الخيار Configuration وأزلت إشارة x عن الخيار Read Only .

7- اخترت قائمة Object، ثم Drive، ثم الخيار Logical Disk، ثم السواقة التي سيتم العمل عليها.

8- اخترت قائمة Object ثم Cluster، وأدخلت في صندوق الحوار، رقم أول قطاع يشغله الملفStarting Cluster، والذي حصلت عليه من الخطوة 2، ورقم آخر قطاع Ending Cluster والذي حسبته في الخطوة 5.

9- اخترت من القائمة Tools الخيار Write Object to، ثم To a File، وأدخلت المسار الكامل للملف، الذي ستحفظ كتلة المعلومات عليه، فيتم حفظ الملف بطول يزيد على طوله الأصلي، لأن طوله سيكون من مضاعفات 32768، أي عدداً صحيحاً من الكلسترات.

10- اخترت قائمة Object، ثم Directory، واخترت الدليل الذي خزّنت الملف فيه، أثناء الخطوة 9.

11- أدخلت الطول الحقيقي للملف (من الخطوة 2) تحت الخانة Size، ( يجب أن يكون الطول المدخل هنا، أقل، أو يساوي الطول الموجود، أو أن في الحسابات خطأ.

ملاحظات :

ستنجح هذه الطريقة، في الحالة التي يكون فيها الملف الذي يزيد حجمه على 32KB، محفوظاً كسلسلة متتالية من القطاعات. أما إذا كانت القطاعات مبعثرة فلا سبيل لاسترجاع الملف، إلا إذا كانت إحدى نسختي FAT سليمة، أو يمكن استرجاعها، لذا يستحسن دائماً إجراء عملية إلغاء تجزئة القرص Defragmentation، بين حين وآخر، ليتم ترتيب الملف خلالها في قطاعات متسلسلة.

استخدمت الإصدارة 8.0.20 من DiskEdit .

إذا كان نظام التشغيل ويندوز مثبتاً على جهازك ، فعليك الإقلاع من نظام دوس، قبل تشغيل DiskEdit، أو استخدام الأمر التالي، الذي يسمح بالكتابة المباشرة على القرص الصلب، وتخطى نظام حماية ويندوز:

] اسم السواقة التي سيتم العمل عليها Lock [

هذه الطريقة طويلة ومعقدة، وقد يستغرق إتمامها أياماً، حسب عدد الملفات المطلوب استرجاعها، لكنها مكنتني من أستعدي خلال يومين، ملفات استغرقت مني أكثر من شهر من العمل! والأمر يعتمد على أهمية المعلومات الضائعة بالنسبة لك فإن لم تكن بتلك الأهمية فعليك بـأمري Fdisk وformat مباشرةً !

ويبقى السؤال الذي يحيرني لماذا: سبب FAT32 هذه المشكلة؟!

فادي سالم

fadis@emirates.net.ae

http://fadi.webjump.com

تعقيب :

التجربة التي خاضها القارئ، عصيبة، ويمكن أن يتعرض لها أي ممن لديه ملفات مهمة ، تكلف في إنشائها أياماً طويلة ..ودرهم وقاية خير من قنطار علاج، ولهذا ننصح بالوقاية وحفظ نسخ احتياطية من جميع الملفات المهمة. حاول القارئ في بداية التجربة السابقة فعل ذلك، لكنه عندما نفذ بعض العمليات الأخرى بواسطة أمر FDISK و أمر Format، وضع الملفات الاحتياطية في حالة خطر، حتى ولو كانت في جزء آخر من القرص الصلب. ولكي نفهم المشكلة، وكيف أمكن تدارك آثارها، يجب أن نذكر ببعض الأساسيات المتعلقة بنظام الملفات FAT.

نظام الملفات FAT بجميع أشكاله القديمة والحديثة FAT12, FAT16, FAT32، بسيط التركيب، إذ يتألف من قطاع الإقلاع Boot Sector، ثم نسختين من جدول مواقع الملفات FAT، ثم الدليل الأساسي للملفاتRoot Directory ، وهو الجذر الذي تتفرع منه كافة الملفات و الأدلة الفرعية. ويلي ذلك مكان توضع المعلومات الموجودة داخل الملفات، والأدلة الفرعية Sub Directory . ينطبق هذا على كل قسم Partition في القرص الصلب، بينما يتضمن جدول التقسيم Partition Table الموجود في أوله (Cyl:0 Head:0 Sec:1) المعلومات الأساسية عن عدد أقسام القرص، ومن أين يبدأ وأين ينتهي كل منها، وعدد القطاعات المحجوزة فيه.. الخ . يمكن استخدام الأمر Fdisk (من أوامر نظام التشغيل دوس)، لإدارة جدول التقسيم، بينما يستخدم الأمر Format لتشكيل قطاع الإقلاع، وجدول FAT، والدليل الأساسي، بالإضافة إلى أنه يكتشف الأجزاء غير الصالحة للكتابة، ويسجل في جدول FAT أرقام الكلسترات المخربة، لكي يبتعد عنها نظام التشغيل، عند كتابة الملفات .

ماذا يحتوي جدول مواقع الملفات ؟

يتألف القرص الصلب من عدة أقراص متمحورة فوق بعضها، و يتم تسجيل المعلومات فيها على القطاعات Sectors، داخل المسارات Tracks، والموزعة على سطحي كل قرص منها، لكن نظام FAT يفهرسها بشكل متصل، كأنها شريط، وهذا يؤدي إلى مشكلة أن عدد القطاعات في القرص الصلب كبير، فلا تكفي خانة واحدة مؤلفه من 16 بت، لعنونة كافة القطاعات، مما دعا إلى استخدام الكلستر Clustor، وهو مجموعة من القطاعات المتتالية التي تعنون بعنوان واحد. وتختلف سعة الكلستر حسب نوع القرص وسعته، وتحسب الطريقة التالية:

سعة الكلستر=512× عدد القطاعات في الكلستر الواحد. (حيث أن سعة القطاع 512 بايت).

ففي قسم من قرص صلب سعته 2GB (كحالة القارئ) يتضمن الكلستر 64 قطاعاً، أي أن سعة الكلستر هي 512×64 = 32768 بايت.

يسجل في جدول مواقع الملفات FAT، بالنسبة لكل ملف سلسلة مترابطة من أرقام الكلسترات، والتي تعين الكلسترات التي يحجزها على قسم معين من القرص الصلب، حتى الوصول إلى نهاية الملف، حيث يشير كل مدخل في الجدول إلى رقم الكلستر التالي، أو يكتب فيه رقم الرمز EOF، أي أن الملف ينتهي بهذا الكلستر.

تبدو المشكلة التي واجهها القارئ غريبة، إذ أن أمر Format لا يمكن أن يتجاوز القسم الذي يطلب منه تهيئته، إلا في حالة وجود تشوه في جدول التقسيم الذي يحدد ذلك القسم. ومن الأخطاء الشائعة عند حدوث مشكلة في تنفيذ هذا Format، الاعتماد على الآليين، لحل المشكلة. ولا نقصد في هذا الربوتات، لكن برامج تصحيح الأعطال، لأنها تحل أغلب الأعطال المعروفة، بينما لا يمكن التكهن بما يمكن أن تفعله عند التعامل مع أعطال غير متوقعة، إذ تزيد الأمر سوءاً في أغلب الأحيان! ولهذا تحتاج هذه الحالات إلى قرار إنساني، وأداة مناسبة، وتوفيق من رب العالمين …

على الرغم من كل ما حصل مع القارئ، فإن محتويات الملفات ذاتها لم تتأثر، لكن فقدت المعلومات التي تدل على وجودها وترابطها، فحاول أن يبحث عن أداة لاستعادة تلك المعلومات. وفعل خيراً بأنه لم يستخدم أياً من أدوات التصحيح المعروفة، إذ لا تعتبر الأداة البرمجية DiskEdit برنامجاً لتصحيح الأعطال، بل أشبه بمبضع الجراح الذي يكون دواءً مع الأيدي الخبيرة، أو أداة للتخريب مع الأيدي الجاهلة، و هنا تكمن خطورته!

اكتشف القارئ بواسطة هذه الأداة أن جدول مواقع الملفات قد تشوه، لكنه وجد بعملية البحث أن الفهرس الذي يحتوي على اسم الملفات المطلوبة و بداية موقع كل ملف هو بحالة سليمة. وكان هذا بداية بصيص أمل ...

فإذا كان الملف أقصر، أو يساوي سعة الكلستر في القرص (وهو في حالة قرصه بسعة 32768 بايت). يمكنه استرجاع الملف كاملاً مباشرة، إما إذا كان الملف أكبر ، فهذا يعني أنه يحتاج لأكثر من كلستر، وليس أمامه في هذه الحالة أن يأمل بأن يكون التالي.

كيف تم معرفة مكان توضع الملف في القرص ؟

عندما نعرض دليل الملفات Directory بأمر Dir، تظهر أسماء الملفات وأطوالها، وتاريخ ووقت أخر تعديل تم على كل منها، لكن تسجل معلومات أكثر من ذلك في الدليل، إذ يوجد أيضاً، رقم أول كلستر في الملف، وهو ما يسمح للنظام من الوصول إلى الملف. يمكن حساب عدد الكلسترات التي يحجزها الملف بالاعتماد على المعلومات المتوفرة في دليل الملفات بالطريقة التالية :

عدد الكلسترات= طول الملف/سعة الكلستر، وبما أن الملف لا يحجز جزءاً من كلستر، بل يحجز عدداً صحيحاً من الكلسترات، فيجب تدوير الرقم الذي نحصل عليه من المعادلة السابقة إلى أعلى، بدون إلغاء الكسور.

ولمعرفة رقم آخر كلستر في الملف نستخدم المعادلة التالية :
رقم أخر كلستر=رقم أول كلستر+ عدد الكلسترات –1 .
لاحظ وجود فرق بسيط بين المعادلة السابقة، ومعادلة القارئ، لكن لو تمعنا فيهما لوجدنا أنهما تؤديان إلى النتيجة ذاتها، باستثناء حالة واحدة، وذلك عندما يكون طول الملف من مضاعفات سعة الكلستر، وبالتالي لما كان لدينا أية كسور، وسيزيد رقم آخر كلستر واحد، لكن احتمال هذه الحالة نادر، ولم تحصل مع القارئ.

كيف عرفنا موقع الدليل ؟
لاحظ أن القارئ كان يبحث عن الأدلة فيزيائياً وليس حسب الكلسترات، فكيف عرف موقع الكلستر الذي يوجد فيه الفهرس الفرعي ؟ يظهر في الأدلة الفرعية عندما ننفذ الأمر Dir، دليلين هما "." نقطة و ".." نقطتين ، حيث يعبر الدليل "." نقطة عن الدليل الأب ذاته، وكافة المعلومات التي يدل عليها، هي ذاتها معلومات الدليل الأب بما في ذلك رقم الكلستر الأول .

أخيراً، لا نعتقد أن سبب المشكلة السابقة نظام التهيئة FAT32، إذ ربما يكون نتيجة لاستخدامه لبرنامج معين سابقاً، أو إجراء نفذه لم يلتفت إليه، ولا نستطيع أن نتكهن به، فربما أقلع بنظام DOS 6.22 مثلاً، وهو لا يتعرف على FAT32 الموجود في القسم التالي !…

أنس السيد