ملف متفرق

ملف متفرق: لا يلزم حفظ البايتات الفارغة ويمكن تمثيلها بدلاً من ذلك بواسطة البيانات الوصفية .

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

في أغلب الأحيان، تُنشأ الملفات المتفرقة عندما لا تُكتب أي أجزاء من الملف. وهذا شائع في الملفات ذات الوصول العشوائي مثل قواعد البيانات. بل إن بعض أنظمة التشغيل أو الأدوات المساعدة تذهب إلى أبعد من ذلك، فتقوم بـ"تفريق" الملفات عند كتابتها أو نسخها: فإذا احتوت كتلة ما على بايتات فارغة فقط، فإنها لا تُكتب إلى وحدة التخزين، بل تُعلّم على أنها فارغة.

عند قراءة الملفات المتفرقة، يقوم نظام الملفات بتحويل البيانات الوصفية التي تمثل الكتل الفارغة إلى كتل "حقيقية" مملوءة ببايتات فارغة أثناء التشغيل، دون أن يدرك التطبيق هذا التحويل.

تدعم معظم أنظمة الملفات الحديثة الملفات المتفرقة، بما في ذلك معظم توزيعات يونكس ونظام الملفات NTFS . [ 1 ] لا يدعم نظام الملفات HFS+ من آبل الملفات المتفرقة، ولكن في نظام التشغيل OS  X، تدعم طبقة نظام الملفات الافتراضي تخزينها في أي نظام ملفات مدعوم، بما في ذلك HFS+. كما يدعمها نظام ملفات آبل (APFS). [ 2 ] تُستخدم الملفات المتفرقة عادةً لصور الأقراص ، ولقطات قواعد البيانات ، وملفات السجلات ، وفي التطبيقات العلمية.

المزايا

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

على سبيل المثال، صورة جهاز افتراضي بحجم أقصى 100 جيجابايت تحتوي على 2 جيجابايت من الملفات المكتوبة فعليًا، ستتطلب كامل المساحة (100 جيجابايت) عند استخدام مساحة تخزين مُخصصة مسبقًا، بينما لا تتطلب سوى 2 جيجابايت في حالة الملفات المتفرقة. إذا كان نظام الملفات يدعم خاصية "ثقب الملفات" (hole punching) وكان نظام التشغيل الضيف يُصدر أوامر TRIM ، فإن حذف الملفات من النظام الضيف سيقلل المساحة المطلوبة تبعًا لذلك.

العيوب

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

الملفات المتفرقة في نظام يونكس

عادةً ما يتم التعامل مع الملفات المتفرقة بشكل شفاف للمستخدم. لكن الاختلافات بين الملف العادي والملف المتفرق تظهر بوضوح في بعض الحالات.

الخلق

أمر يونكس

dd of = sparse-file bs = 5M seek = 1 count = 0

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

وبالمثل، يمكن استخدام أمر الاقتطاع، إذا كان متاحًا:

اقتطاع -s 5M <اسم الملف> 

في نظام لينكس ، يمكن تحويل ملف موجود إلى ملف متفرق عن طريق:

fallocate -d <filename> 

لا يوجد استدعاء نظام محمول لعمل ثقوب؛ يوفر نظام لينكس ذلك fallocate(FALLOC_FL_PUNCH_HOLE)، ويوفر نظام سولاريسfcntl(F_FREESP) ذلك أيضًا .

كشف

يعرض خيار -sالأمر lsالمساحة المشغولة على شكل كتل.

ls -ls sparse-file 

بدلاً من ذلك، duيطبع الأمر المساحة المشغولة، بينما lsيطبع الأمر الحجم الظاهري. في بعض الإصدارات غير القياسية من الأمر du، يطبع الخيار --block-size=1المساحة المشغولة بالبايتات بدلاً من الكتل، بحيث يمكن مقارنتها بالمخرجات ls.

du --block-size = 1 sparse-file ls -l sparse-file 

لاحظ أن استخدام du أعلاه له صيغة بناء جملة الخيار المختصرة "du -B 1 sf"، وهو ما يعادل النسخة الأقصر "du -b sf" كما هو مذكور في دليل du: [ 3 ]-b, --bytes يعادل --apparent-size --block-size=1.

كما يمكن استخدام الأداة filefragالموجودة في e2fsprogsالحزمة لعرض تفاصيل تخصيص الكتل للملف.

filefrag -v sparse-file 

النسخ

عادةً، يكون إصدار GNU من البرنامج cpجيدًا في اكتشاف ما إذا كان الملف متفرقًا، لذلك

cp sparse-file new-file

يُنشئ ملفًا جديدًا، سيكون مُجزأً. كما يوفر نظام GNU --sparseخيارًا [ 4 ] مفيدًا بشكل خاص إذا تم حفظ ملف يحتوي على كتل أصفار طويلة بطريقة غير مُجزأة (أي تم كتابة كتل الأصفار بالكامل على وسائط التخزين). يمكن توفير مساحة التخزين عن طريق:

cp --sparse=always file1 file1_sparsed

بعض تطبيقات cp، مثل cp في FreeBSD ، لا تدعم هذا --sparseالخيار، وستقوم دائمًا بتوسيع الملفات المتفرقة. يُعد استخدام rsync--sparse مع خياره الخاص [ 5 ] بديلاً مناسبًا جزئيًا على هذه الأنظمة بدلاً من cp. لسوء الحظ، لا تدعم الإصدارات القديمة من rsync --sparseهذا الخيار عند دمجه مع --inplace. [ 6 ] [ 7 ] [ 8 ]

يتم تحقيق نسخ الملفات المتفرقة عبر المدخلات القياسية على النحو التالي:

cp --sparse = always /dev/fd/0 new-sparse-file < somefile 

انظر أيضاً

مراجع