بیشتر اوقات عددی که برای Size و Size on disk گفته می‌شود بسیار بهم نزدیک است. اما چرا گاهی اوقات این دو عدد با هم تفاوت زیادی دارند؟

مثلا همان طور که می‌بینید در تصویر زیر تفاوت زیادی بین Size و Size on disk در پوشه ای در SD کارت موبایل وجود دارد. اما چرا؟

درست است که عدد Size on disk باید کمی بیشتر از Size باشد، اما همان طور که ملاحظه می‌کنید در اینجا تفاوت زیادی بین این دو وجود دارد. آیا به دلیل تعداد زیاد فایل‌هاست؟

جواب

جواب این مساله را می‌توان این گونه مطرح کرد:

چون بحث SD کارت است، پس به نظر می‌آید از فایل‌های FAT/FAT32 استفاده شده است. NTFS و exFAT مانند allocation units رفتار می‌کنند. دیگر سیستم فایل‌ها هم ممکن است متفاوت باشند، اما به هر حال در ویندوز پشتیبانی نمی‌شوند.

اگر شما فایل‌های کوچک زیادی داشته باشید مطمئنا این اتفاق می‌افتد. مثال زیر را در نظر بگیرید:

  • ۵۰۰۰۰ فایل
  • ۳۲ کیلوبایت allocation units، که بیشترین مقدار برای FAT32 است

حالا کمترین فضای اشغال شده ۵۰,۰۰۰ * ۳۲,۰۰۰ = ۱٫۶ GB است. فضایی که هر فایل بر روی دیسک اشغال می‌کند همیشه مضربی از انداره‌ی allocation unit است. اگر فایل‌ها به اندازه‌ی کافی کوچک باشند با یکی از این یونیت‌ها یکی می‌شوند.

اگر هر کدام از فایل‌ها ۲ کیلوبایت حجم داشته باشند، تقریبا حجم کلی ۱۰۰ مگابایت می‌شوند.

چرا این اتفاق می‌افتد؟ خب سیستم فایل FAT32 باید سرنخی داشته باشد که بداند فایل‌ها کجا ذخیره می‌شوند. اگر قرار بود لیستی از هر بایت ذخیره شده را نگه دارد، فضای زیادی به هدر می‌رفت. به همین دلیل آن‌ها از “allocation units” استفاده می‌کنند که به “cluster size” هم معروف است. این حجم به اینallocation unitها تقسیم می‌شود و تا وقتی مساله‌ی سیستم فایل مطرح است، نمی توان تقسیم بندی‌های ریزتری انجام داد؛ آن‌ها کوچک‌ترین بلوک‌هایی هستند که می‌توان آدرسشان را مشخص کرد. تقریبا شبیه به این است که خانه‌ی شما پلاک داشته باشد و پسنچی به در خانه‌ی شما بیاید ولی به این اهمیت نمی‌دهد که چند نفر در خانه است یا چند اتاق خواب دارد.

حالا چه اتفاقی می‌افتد وقتی فایل شما بسیار کوچک باشد؟ خب، سیستم فایل اهمیت نمی‌دهد که فایل شما ۰ کیلوبایت یا ۲ کیلو بایت و یا حتی ۱۵ کیلو بایت باشد؛ کمترین فضای ممکن را اشغال می‌کند. در مثال بالا این عدد ۳۲ کیلو بایت است. فایل شما فقط مقدار کمی از این فضا را اشغال می‌کند و بقیه اساسا هدر می‌رود، اما همچنان به همان فایل تعلق دارد؛ مثل اتاق خوابی که از آن استفاده نمی‌کنید.

اگر فایل‌های شما بزرگتر باشد منطقی است که allocation unitهای بزرگتری هم استفاده شود. چرا که یک فایل تا زمانی که یونیت‌های دیگر را پر نکند یونیت جدیدی به آن تعلق نمی‌گیرد.

به صورت یک قانون کلی اگر فایل‌های شما کوچک باشند، allocation unitهای بزرگ فضای زیادی را به هدر می‌دهند.

مطلبی که ترجمه کردم در سایت گردو منتشر شده.