لماذا ملف TAR يكون أصغر من كل شيء محتويات؟

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

  •  20-08-2019
  •  | 
  •  

سؤال

ولدي الدليل أنا حفظها:

$ du -sh oldcode
1400848
$ tar cf oldcode.tar oldcode

وهكذا الدليل هو 1.4GB. الملف هو أصغر بكثير، على الرغم من:

$ ls -l oldcode.tar
-rw-r--r-- 1 ieure ieure 940339200 2002-01-30 10:33 oldcode.tar

وفقط 897mb. ليست مضغوط بأي شكل من الأشكال:

$ file oldcode.tar
oldcode.tar: POSIX tar archive

لماذا ملف القطران أصغر من كل شيء محتويات؟

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

المحلول

ويمكنك الحصول على الاختلاف بسبب الطريقة التي يعمل بها نظام الملفات.

وباختصار يتكون القرص من مجموعات. كل مجموعة لديها حجم ثابت لل- دعنا نقول - 4 كيلو بايت. إذا قمت بتخزين ملف 1KB في مثل هذه 3KB الكتلة سيكون غير المستخدمة. التفاصيل الدقيقة تختلف مع هذا النوع من نظام الملفات التي تستخدمها، ولكن معظم أنظمة الملفات تعمل بهذه الطريقة.

الفضاء

و3KB تهدر ليس كثيرا لملف واحد، ولكن إذا كان لديك الكثير من الملفات الصغيرة جدا النفايات يمكن أن تصبح جزءا هاما من استخدام القرص.

داخل القطران أرشيف لا يتم تخزين الملفات في مجموعات ولكن واحدا تلو الآخر. وهنا يأتي الفرق من بينها.

نصائح أخرى

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

وهذه لها علاقة مع blocksize من الملفات الخاصة بك. <القوي> رجل 1 دو على ماكوسكس 10.5.6 ما يلي:

<اقتباس فقرة>   

والأداة المساعدة دو تعرض نظام الملفات <م> استخدام كتلة لكل حجة الملف ولكل دليل في التسلسل الهرمي ملف متجذرة في كل حجة الدليل. إذا تم تحديد أي ملف، يتم عرض استخدام كتلة من التسلسل الهرمي متجذرة في الدليل الحالي.

[mirko@borg foo]$ ls -la
total 0
drwxr-xr-x   2 mirko  wheel   68 Jan 30 21:20 .
drwxrwxrwt  10 root   wheel  340 Jan 30 21:16 ..
[mirko@borg foo]$ du -sh
0B  .
[mirko@borg foo]$ touch foo
[mirko@borg foo]$ ls -la
total 0
drwxr-xr-x   3 mirko  wheel  102 Jan 30 21:20 .
drwxrwxrwt  10 root   wheel  340 Jan 30 21:16 ..
-rw-r--r--   1 mirko  wheel    0 Jan 30 21:20 foo
[mirko@borg foo]$ du -sh
0B  .
[mirko@borg foo]$ echo 1 > foo
[mirko@borg foo]$ ls -la
total 8
drwxr-xr-x   3 mirko  wheel  102 Jan 30 21:20 .
drwxrwxrwt  10 root   wheel  340 Jan 30 21:16 ..
-rw-r--r--   1 mirko  wheel    2 Jan 30 21:20 foo
[mirko@borg foo]$ du -sh
4.0K    .

وكما ترون حتى ملف من 2 بايت يأخذ كتلة كاملة من 4KB. هناك بعض أنظمة الملفات التي تجنب هذه النفايات من الفضاء كتلة suballocation .

وهناك 2 الاحتمالات.

تحليل الملفات الصغيرة

وعلى الأرجح، أنه لا أصغر من محتوياته. ونيلس Pipenbrinck كتب ، du يعرض مقدار المساحة ويخصص نظام الملفات، والتي منذ الملفات المخزنة في كتل الملفات هي أكثر من حجم منطقي من الملف.

لعرض حجم المنطقي للملف، واستخدام du --apparent-size. في هذه الحالة، يجب أن تكون النتيجة أصغر من ملف القطران.

تحليل ملفات متفرقة

يمكن ملفات القطران تخزين الملفات المتفرقة. إذا تم إنشاء كتل القطران باستخدام --sparse أو الفتحات الموجودة في سيتم تسجيل ملفات متفرقة، وبالتالي فإن كتل القطران يمكن أن يكون أصغر من حجم منطقي من الملفات.

إذا كان فقدان المعلومات تناثر في نسختك المستخرجة بطريقة ما (على سبيل المثال إذا قمت باستخراج كتل القطران على نظام الملفات التي لا تدعم ملفات متفرقة، أو إذا كان مضغوط ثم فك ضغط، وما إلى ذلك)، ثم df سيقدم تقريرا لل توسيع حجم.

ودو تعول الكتل القرص، وليس ملف حجم duder.

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