چگونه با فشرده‌سازی Btrfs در لینوکس بدون حذف فایل چند گیگابایت فضا آزاد کنیم؟

اگر پارتیشن لینوکس شما با Btrfs ساخته شده باشد، ممکن است بخشی از فایل‌های قدیمی همچنان بدون فشرده‌سازی روی دیسک باقی مانده باشند؛ حتی اگر فشرده‌سازی Zstandard یا zstd را قبلاً فعال کرده باشید. در این شرایط می‌توان فایل‌های موجود را دوباره‌نویسی کرد تا Btrfs آن‌ها را فشرده کند و بدون حذف اطلاعات، فضای بیشتری آزاد شود. مستندات رسمی Btrfs نیز تأیید می‌کند که فعال کردن compression فقط روی داده‌های جدید اعمال می‌شود و فایل‌های موجود خودکار فشرده نمی‌شوند.

چگونه فایل‌های قدیمی Btrfs را فشرده کنیم؟

برای بررسی وضعیت فشرده‌سازی می‌توانید از compsize استفاده کنید. اگر در خروجی آن مقدار قابل توجهی در بخش none مشاهده شود، بخشی از داده‌ها هنوز فشرده نشده‌اند.

آموزش فشرده سازی Btrfs با zstd؛ آزاد کردن فضای لینوکس بدون حذف فایل

برای فشرده‌سازی مجدد فایل‌های موجود، دستور زیر را اجرا کنید:

sudo btrfs filesystem defragment -r -v -czstd /mnt/btrfs

در این دستور، گزینه -r تمام زیرپوشه‌ها را نیز بررسی می‌کند و -czstd فشرده‌سازی با Zstandard را اعمال می‌کند. Btrfs در این فرایند فایل‌ها را حذف نمی‌کند؛ بلکه extentهای آن‌ها را دوباره می‌نویسد و در صورت امکان فشرده‌تر ذخیره می‌کند.

اگر فقط یک پوشه خاص حجم زیادی از داده‌های فشرده‌نشده دارد، بهتر است ابتدا همان پوشه را بررسی و فقط همان بخش را فشرده کنید.

آیا فشرده‌سازی Btrfs واقعاً چند گیگابایت فضا آزاد می‌کند؟

مقدار فضای آزادشده به نوع فایل‌ها و قدمت نصب لینوکس بستگی دارد. فایل‌های متنی، لاگ‌ها، کش‌ها و بسیاری از فایل‌های سیستمی معمولاً قابلیت فشرده‌سازی بیشتری دارند؛ اما ویدیو، عکس و فایل‌های ZIP که از قبل فشرده شده‌اند، معمولاً فضای زیادی آزاد نمی‌کنند.

در یک نمونه واقعی، اجرای دوباره فشرده‌سازی باعث کاهش مصرف فضای داده از ۶.۴ گیگابایت به ۴.۹ گیگابایت در اندازه‌گیری compsize شد و همراه با فشرده‌سازی قبلی، حدود ۶ گیگابایت فضای قابل استفاده بازیابی شد. این عدد را نباید نتیجه ثابت برای همه سیستم‌ها دانست؛ Btrfs نیز تأکید می‌کند که میزان فشرده‌سازی به محتوای واقعی داده‌ها وابسته است.

همچنین این عملیات می‌تواند CPU و دیسک را برای مدتی تحت فشار قرار دهد و زمان اجرای آن به حجم داده و سرعت سخت‌افزار بستگی دارد.

قبل از فشرده‌سازی Btrfs به این نکته مهم توجه کنید

اگر از Snapshot یا فایل‌های دارای reflink استفاده می‌کنید، defragment می‌تواند اشتراک extentها را از بین ببرد و در بعضی شرایط حتی مصرف فضای دیسک را افزایش دهد. مستندات Btrfs صراحتاً درباره این موضوع هشدار داده‌اند.

بنابراین اگر پارتیشن شما Snapshotهای مهم دارد، بهتر است قبل از اجرای فشرده‌سازی بازگشتی، ساختار Snapshotها و میزان فضای آزاد را بررسی کنید.

آیا فعال کردن zstd به‌تنهایی کافی است؟

خیر. فعال کردن compress=zstd باعث می‌شود داده‌های جدید فشرده شوند، اما فایل‌های قدیمی دست‌نخورده باقی می‌مانند. برای همین ممکن است سال‌ها بعد همچنان مقدار قابل توجهی داده فشرده‌نشده روی پارتیشن وجود داشته باشد.

Zstandard یکی از الگوریتم‌های رسمی پشتیبانی‌شده توسط Btrfs است و از نظر سرعت و میزان فشرده‌سازی تعادل مناسبی ارائه می‌دهد. پشتیبانی Btrfs از zstd نیز از کرنل لینوکس ۴.۱۴ اضافه شده است.

در نتیجه، اگر فضای Btrfs شما در حال پر شدن است، قبل از حذف فایل‌ها می‌توانید ابتدا با compsize میزان داده‌های فشرده‌نشده را بررسی کنید و در صورت مناسب بودن شرایط، فایل‌های موجود را با btrfs filesystem defragment و zstd دوباره فشرده کنید.