كيف يمكن لقطاعات مادية من قرص على الملفات التي تحتوي عليها على وحدة تخزين HFS+ على Mac OS X

StackOverflow https://stackoverflow.com/questions/1384436

سؤال

لقد استعادت قرصًا صلبًا باستخدام DD_RESCUE, ، والتي توفر لي قائمة بجميع قطاعات الأجهزة التي لا يمكنها نسخها بسبب أخطاء الأجهزة.

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

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

هل كانت مفيدة؟

المحلول

إذا كنت ترغب في تعيين موقع بيانات الملف إلى كتلة فعلية (قطاع) ، فيمكنك استخدام fcntl (2) اتصل مع الأمر f_log2phys. لا تدعم جميع أنظمة الملفات هذا الأمر ، لكن HFS+ لا. ما عليك سوى استخدام LSEEK لاختيار إزاحة الملف ويمكنك استعادة مجموعة DISKOFFSET من F_LOG2PHYS (يتم إرجاعها في struct log2phys في حقل L2P_Devoffset). انظر fcntl.h لمزيد من التفاصيل.

نصائح أخرى

لا يوجد واجهة برمجة تطبيقات مكشوفة للتشجيع من خلال أنظمة ملفات HFS+ ، ولكن مصدر نظام الملفات متاح من Apple كجزء من Kernel Xnu. تحقق أيضا من HFSDEBUG الأداة التي قد تساعد على فهم FS.

إنه سؤال قديم ، ولكن نظرًا لأنه لا يزال من بين أفضل الزيارات عند البحث في الموضوع ، إليك كل من بحث:

منذ Mac OS X 10.6 FSCK_HFS (8) يمكن تعيين القطاعات الفعلية للملفات (انظر الخيار -b). ملاحظة حول الاستخدام: لن تنجح المطابقة إلا إذا تم إجراء التحقق من الكتالوج بالفعل. لذلك قد تضطر إلى فرض التحقق من الخيارات -l أو -f.

راجع للشغل ، HFSDEBUG باعتباره ثنائي PPC يعتمد على Rosetta وبالتالي لن يعمل على الأسد أو أحدث.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top