خارج المساحة على قرص NTFS بعد سلسلة من إنشاء/حذف الملفات ذات الحجم نفسه

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

سؤال

لقد واجهت مشكلة غريبة حقًا أثناء العمل في مشروع كبير. أنا أكتب حفنة من نفس الحجم الملفات الموجودة على قسم (جربت كل من أقراص ذاكرة الوصول العشوائي والأقراص الافتراضية التي تم إنشاؤها عبر diskmgmt.msc). عندما لا يكون هناك مساحة حرة كافية لتناسب ملف آخر (كما ذكرت بواسطة GetDiskFreeSpaceExW) ، أحذف واحدة (واحد فقط) من تلك التي تم إنشاؤها مسبقًا وكتابة واحدة جديدة. بعد ذلك ، أحذف ملفًا قديمًا آخر وأكتب موقعًا جديدًا ، لا نهاية لطف (لذلك ، قد تفكر في القسم باعتباره مخزنًا مؤقتًا للملفات ذات الحجم المتساوي). بعد سلسلة من الحماة المكتبات (من بضع مئات إلى قليلة الآلاف) ، واجهت أ no free space خطأ أثناء كتابة ملف جديد (قبل ذلك ، GetDiskFreeSpaceExW تقارير مساحة كافية). طلبت من عدد قليل من زملائي محاولة إعادة إنتاج المشكلة على أجهزتهم ، لكن المشكلة لم الظهور.

لتوضيح الأشياء قليلاً ، إليك الخوارزمية الدقيقة:

  1. اختر حجم الملف (على سبيل المثال ، S Bytes)
  2. تحقق من المساحة المجانية مع getDiskFreespaceExw
  3. إذا free_space> s: اكتب ملفًا جديدًا من Size S و Goto 2
  4. آخر: حذف ملف واحد و goto 2

من المهم أن نلاحظ أنني أكتب البيانات إلى الملفات في كتل من حجم 4096 بايت (قد تكون المشكلة أو لا تتردد في الحجم حسب حجم الكتلة). حجم الملف هو 5 ميجابايت. حجم قسم NTFS هو 21 MIB. حجم الكتلة هو 512 B (مرة أخرى ، يؤثر تغيير هذه المعلمات على النتائج). مع هذه المعلمات ، يحدث الفشل أثناء إنشاء الملف 684'TH. لا يعتمد على ما إذا كنت أستخدم قرص ذاكرة الوصول العشوائي أو قرص افتراضي (وبالتالي ، فهو ليس مشكلة في تطبيق معين).

لقد قمت بتحليل مقالب صورة القرص الناتجة بعد الفشل ووجدت أن الملفات مجزأة بشدة. تقارير Chkdsk أي مشاكل لا قبل أو بعد التجربة. لم يتم العثور على أخطاء في سجلات النظام.

ربما تكون المعلمات ذات الصلة من Netbook (Dell Inspiron 1110):

  • Pentium SU4100 ، CPU CPU بطيئة ثنائية النواة بطيئة نسبيًا (1.3 جيجا هرتز)
  • Windows 7 Ultimate X64 Edition
  • 2 جيجابايت ذاكرة الوصول العشوائي

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

UPD: تحدث المشكلة عندما أكتب بيانات الملف (أي write() يفشل) ، ليس عندما أقوم بإنشاء الملف. لذلك ، لا يبدو أنني أفتقر إلى إدخالات MFT.

UPD2: الإجابة على بعض الأسئلة التي تم طرحها

  • القسم هو واحد منسق حديثا ، وبالتالي ، لا توجد سمات محددة على الملفات ، لا بنية الدليل ، لا شيء
  • الأذونات افتراضية
  • لا .lnk ، لا توجد روابط صلبة - _only_ الملفات التي أكتبها
  • تتم كتابة جميع الملفات إلى Root Dir ، ولا يتم إنشاء أي دلائل أكثر
  • أسماء الملفات هي ببساطة الأرقام الترتيبية للملفات (أي 1 ، 2 ، 3 ، ...)
  • لا توجد تدفقات بيانات بديلة ، يتم إنشاء ملفات باستخدام `fopen ()` ، مكتوبة مع `fwrite ()` وإغلاقها مع `fclose ()` `
  • يتم إنشاء $ txf ، في الواقع
  • لا مجموعات سيئة ، هذا قرص افتراضي (أو ذاكرة الوصول العشوائي)
هل كانت مفيدة؟

المحلول

سؤال جيد NTFS وليس كل المعلومات هنا. ما هو هيكل المخرج؟ هل هناك أي ملفات رابط على هذا؟ هل تستخدم الضغط على محرك الأقراص؟ نسخ ظل المجلد؟

أنت لا تنفد من مساحة MFT ، نظرًا لوجود # ملفات / أدلة ثابتة. وهذا يعني أن MFT ثابت. كما ستكون مساحة احتياطي MFT في سيناريوهات الفضاء منخفضة القرص. لقد استخدمت كل مجموعة على حجم NTFS.

هناك العديد من التفسيرات حول ما يحدث:

1) قد يكون ملف السجل $ قد نما. هذا هو سجل لفة.

2) قد يكون ملف SII لمعلومات الأمان للملف قد نمت إذا كانت هناك أذونات غير موحدة على محرك الأقراص

3) إذا كان لدى بعض الملفات الموجودة على Volme ملفات .lnk/ اختصار تشير إليها ، فإن النظام يضع GUID لكل هدف في فهرس. (يمكنك الحصول على ملفات .lnk إذا كنت 2x انقر فوق ملف في Explorer - في المستندات الحديثة!)

4) بنية الدليل ليست ثابتة (أو أن أسماء الملفات ليست موحدة في الطول) قد تنمو حجم مؤشرات الفهرس $ من الدلائل.

5) إذا كان لديك وحدة تخزين System DirectRoy على محرك الأقراص هذا ، فقد يكون لديك نسخ ظلال وحدة التخزين وبيانات محددة OSE OS.

6) لا يتم عرض تدفقات البيانات البديلة في حجم الملف. هل يوجد أي؟

7) TXF - تحت VISTA وأعلى قد يكون هناك طبقة معاملات تشغل مساحة متغيرة.

8) مجموعات سيئة؟ يمكن أن تصبح المجموعات سيئة (لكن CHKDSK قد يلاحظ هذا ..)

9) تصبح الملفات مجزأة وقائمة الشظايا Alson مع بيانات التعريف الأخرى كبيرة جدًا بحيث لا تتناسب مع سجل MFT (من غير المحتمل أن تكون ملفاتك صغيرة ولا تملك ملفات طويلة بشكل كبير)

10) استخدام الروابط الصلبة يضع أيضًا المزيد من البيانات على محرك الأقراص.

لقد أدرجت كل هذه كمرجعية للأشخاص الآخرين!

الملاحظة النهائية - في بعض الأحيان يمكنك إنشاء ملف صغير وكتابته حتى لو كان هناك 0 بايت مجاني ، نظرًا لأن ملفات NTFS المقيمة لا تأخذ سوى سجل MFT (يقومون بإعادة حذف ملف مجاني محذوف)

نصائح أخرى

لدى FS النفقات العامة الخاصة به التي لا تمثلها. هذا النفقات العامة ليست ثابتة ، لذلك عن طريق حذف / كتابة الملفات التي قد تسبب تجزئة. بمعنى آخر ، "5 ميغابايت من المساحة الحرة" لا يعني أنه يمكنك كتابة 5 ميغابايت على القرص.

على افتراض أن تنفيذك صحيح وعدم تمكن زملائك من إعادة إنتاج المشكلة ، فقد يكون ذلك MFT ينفد من الفضاء.

بشكل افتراضي ، يحتفظ Windows XP بنسبة 12.5 في المائة من كل وحدة تخزين NTFS (منطقة تسمى منطقة MFT) للاستخدام الحصري لـ MFT. لذا ، إذا كنت تخطط لتخزين الكثير من الملفات الصغيرة (أقل من 8K ، على سبيل المثال) على مستوى الصوت ، فقد ينفد MFT الخاص بك من المساحة قبل أن يتم تفتيت MFT.

من تقنية

أولاً ، لا يتقلص MFT حتى عند حذف الملفات والأدلة من المجلد ؛ بدلاً من ذلك ، يمثل MFT FRSS ليعكس الحذف. ثانياً ، تخزن NTFS ملفات صغيرة جدًا داخل MFT FRSs التي تشير إلى الملفات. على الرغم من أن هذا الإعداد يوفر فائدة أداء لهذه الملفات ، إلا أنه يمكن أن يتسبب في نمو MFT بشكل مفرط عندما يحتوي مستوى الصوت على العديد من هذه الملفات.

على الرغم من أنه ليس من المستغرب للغاية أن تعطيل TXF كان سيحدد هذا (TXF هو مجرد مكون واحد من نظام الملفات باستخدام مساحة على مستوى الصوت) ، هناك شيئان يجب مراعاتهما. الأول ، والأكثر من جانب ، حقًا ، هو أنك قد ترغب في توخي الحذر في تعطيله. (قد تعتمد المكونات الأخرى عليه ؛ تحديث Windows هو أحد هذه المكونات ، على الرغم من أنه يجب أن يهتم فقط بحجم النظام.)

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

الملاحظة الأخرى أعلاه حول نسخ الظل هي شيء يجب وضعه دائمًا في الاعتبار.

FWIW لن ينمو ملف سجل $ تلقائيًا.

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