borg-compression(1) borg backup tool borg-compression(1)

borg-compression - جزئیات و الگوریتم‌های فشرده‌سازی در Borg

ترکیب روش‌های فشرده‌سازی مختلف در یک مخزن هیچ مشکلی ایجاد نمی‌کند؛ عملیات حذف داده‌های تکراری (deduplication) روی تکه‌های داده‌های مبدأ انجام می‌شود (نه روی داده‌های فشرده‌شده یا رمزگذاری‌شده).

اگر یک تکه (chunk) خاص یک بار فشرده شده و در مخزن ذخیره شده باشد، ایجاد پشتیبان دیگری که از این تکه نیز استفاده می‌کند، تکه ذخیره‌شده را تغییر نخواهد داد. بنابراین اگر از مشخصه‌های فشرده‌سازی متفاوتی برای پشتیبان‌ها استفاده کنید، هر نسخه‌ای که ابتدا یک تکه را ذخیره کند، نحوه فشرده‌سازی آن را تعیین می‌کند. همچنین دستور borg recreate را ببینید.

فشرده‌سازی به صورت پیش‌فرض lz4 است. اگر روش دیگری می‌خواهید، باید آن را مشخص کنید.

مشخص‌کننده‌های معتبر فشرده‌سازی عبارتند از:

بدون فشرده‌سازی (داده‌ها فشرده نمی‌شوند).
استفاده از فشرده‌سازی lz4. سرعت بسیار بالا، فشرده‌سازی بسیار کم. (پیش‌فرض)
استفاده از فشرده‌سازی zstd ("zstandard")، یک الگوریتم مدرن با دامنه گسترده. اگر سطح فشرده‌سازی L (از 1 تا 22) را صریحاً تعیین نکنید، از سطح 3 استفاده خواهد شد. آرشیوهای فشرده‌شده با zstd با نسخه‌های borg < 1.1.4 سازگار نیستند.
استفاده از فشرده‌سازی zlib ("gz"). سرعت متوسط، فشرده‌سازی متوسط. اگر سطح فشرده‌سازی L (از 0 تا 9) را صریحاً تعیین نکنید، از سطح 6 استفاده خواهد شد. تعیین سطح 0 (به معنی "بدون فشرده‌سازی" است، اما همچنان سربار پروتکل zlib را به همراه دارد) معمولاً بی‌فایده است؛ بهتر است از فشرده‌سازی none استفاده کنید.
استفاده از فشرده‌سازی lzma ("xz"). سرعت پایین، فشرده‌سازی بالا. اگر سطح فشرده‌سازی L (از 0 تا 9) را صریحاً تعیین نکنید، از سطح 6 استفاده خواهد شد. تعیین سطوح بالاتر از 6 بی‌فایده و غیرسازنده است؛ چرا که به دلیل اندازه بافر مورد استفاده توسط borg، بهتر فشرده نمی‌کند - اما چرخه‌های فراوانی از CPU و حافظه رم را هدر می‌دهد.
استفاده از یک روش اکتشافی (heuristic) داخلی برای تصمیم‌گیری در مورد فشرده‌سازی یا عدم فشرده‌سازی هر تکه. این روش با lz4 بررسی می‌کند که آیا داده‌ها قابل فشرده‌سازی هستند یا خیر. برای داده‌های غیرقابل فشرده‌سازی، از فشرده‌سازی استفاده نمی‌کند (از "none" استفاده می‌کند). برای داده‌های قابل فشرده‌سازی، از فشرده‌سازی مشخص‌شده C[,L] استفاده می‌کند - که در آن C[,L] هر مشخص‌کننده فشرده‌سازی معتبری است. این قابلیت برای فایل‌های چندرسانه‌ای که اغلب نمی‌توان آن‌ها را بیشتر از این فشرده کرد، می‌تواند مفید باشد.
استفاده از مبهم‌سازی اندازه فشرده‌شده برای دشوارتر کردن حملات انگشت‌نگاری (fingerprinting) بر اساس اندازه قابل‌مشاهده تکه‌های ذخیره‌شده. توجه:
  • شما باید این گزینه را با رمزگذاری (encryption) ترکیب کنید، در غیر این صورت هیچ فایده‌ای نخواهد داشت.
  • البته اندازه مخزن شما بزرگ‌تر خواهد شد.
  • اندازه هر تکه توسط ثابت MAX_DATA_SIZE (در حال حاضر حدود 20 مبی‌بایت) محدود شده است.

مقدار SPEC نحوه کارکرد مبهم‌سازی اندازه را مشخص می‌کند:

تغییر اندازه معکوس تصادفی نسبی (ضرب‌شونده / multiplicative)

اندازه داده‌ها نسبت به اندازه داده‌های فشرده‌شده با یک ضریب افزایش می‌یابد. ضرایب کوچک‌تر به دفعات زیاد، و ضرایب بزرگ‌تر به ندرت استفاده می‌شوند.

ضرایب موجود:

1:     0.01 ..        100
2:     0.1  ..      1,000
3:     1    ..     10,000
4:    10    ..    100,000
5:   100    ..  1,000,000
6: 1,000    .. 10,000,000

احتمالات نمونه برای SPEC 1:

90   %  0.01 ..   0.1
 9   %  0.1  ..   1
 0.9 %  1    ..  10
 0.09% 10    .. 100

فاصله‌گذاری با اندازه تصادفی (padding) تا اندازه مشخص‌شده (جمع‌شونده / additive)

110: 1kiB (2 ^ (SPEC - 100))
...
120: 1MiB
...
123: 8MiB (max.)

فاصله‌گذاری پدمه (Padmé padding) (قطعی / deterministic)

250: pads to sums of powers of 2, max 12% overhead

از الگوریتم پدمه (Padmé) برای فاصله‌گذاری قطعی اندازه فشرده‌شده به مجموع توان‌های 2 استفاده می‌کند و سربار را به 12% محدود می‌سازد. برای جزئیات به https://lbarman.ch/blog/padme مراجعه کنید.

مثال‌ها:

borg create --compression lz4 REPO::ARCHIVE data
borg create --compression zstd REPO::ARCHIVE data
borg create --compression zstd,10 REPO::ARCHIVE data
borg create --compression zlib REPO::ARCHIVE data
borg create --compression zlib,1 REPO::ARCHIVE data
borg create --compression auto,lzma,6 REPO::ARCHIVE data
borg create --compression auto,lzma ...
borg create --compression obfuscate,110,none ...
borg create --compression obfuscate,3,auto,zstd,10 ...
borg create --compression obfuscate,2,zstd,6 ...
borg create --compression obfuscate,250,zstd,3 ...

The Borg Collective

2026-07-18