borg-prune(1) ابزار پشتیبان‌گیری borg borg-prune(1)

borg-prune - هرس و پاکسازی بایگانی‌های قدیمی طبق سیاست‌های نگهداری در Borg

borg [گزینه‌های عمومی] prune [گزینه‌ها] [REPOSITORY]

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

نکته مهم: فضای دیسک مخزن تا زمانی که borg compact را اجرا نکنید آزاد نمی‌شود.

این دستور معمولاً توسط اسکریپت‌های پشتیبان‌گیری خودکار استفاده می‌شود که قصد دارند تعداد مشخصی از پشتیبان‌های گذشته را نگه دارند. این سیاست نگهداری معمولاً به عنوان طرح چرخش پشتیبان GFS (Grandfather-father-son) https://en.wikipedia.org/wiki/Backup_rotation_scheme#Grandfather-father-son شناخته می‌شود.

همچنین، دستور prune بایگانی‌های چک‌پوینت (بایگانی‌های ناقص که بر اثر قطع شدن فرآیند پشتیبان‌گیری به جا مانده‌اند) را به‌طور خودکار حذف می‌کند، مگر اینکه چک‌پوینت آخرین بایگانی باشد (و در نتیجه همچنان مورد نیاز باشد). بایگانی‌های چک‌پوینت هنگام مقایسه تعداد بایگانی‌ها با محدودیت‌های نگهداری (--keep-X) لحاظ نمی‌شوند.

اگر یک پیشوند با -P تنظیم شده باشد، فقط بایگانی‌هایی که با آن پیشوند شروع می‌شوند برای حذف در نظر گرفته می‌شوند و تنها همان بایگانی‌ها در مجموع‌های تعیین‌شده توسط قوانین محاسبه می‌گردند. در غیر این صورت، همه بایگانی‌های موجود در مخزن نامزد حذف خواهند بود! هیچ تمایز خودکاری بین بایگانی‌هایی با محتویات متفاوت وجود ندارد. این موارد باید با مشخص کردن پیشوندهای منطبق متمایز شوند.

اگر چندین توالی از بایگانی‌ها با مجموعه‌داده‌های مختلف (برای مثال از ماشین‌های مختلف) در یک مخزن مشترک دارید، برای هر مجموعه‌داده یک بار دستور prune را با استفاده از گزینه -P طوری اجرا کنید که فقط بایگانی‌های مربوطه را مطابقت دهد.

گزینه --keep-within آرگومانی به شکل "<int><char>" دریافت می‌کند که در آن char یکی از مقادیر "H"، "d"، "w"، "m" یا "y" است. برای مثال، --keep-within 2d به معنای نگهداری تمام بایگانی‌هایی است که در ۴۸ ساعت گذشته ایجاد شده‌اند. مقدار "1m" به معنای "31d" در نظر گرفته می‌شود. بایگانی‌های نگهداری‌شده با این گزینه در مجموع‌های مشخص‌شده توسط گزینه‌های دیگر شمرده نمی‌شوند.

یک روش مناسب این است که هر چه پشتیبان‌های شما قدیمی‌تر می‌شوند، آن‌ها را بیشتر و بیشتر کم‌پشت و تنک کنید. به عنوان مثال، --keep-daily 7 به معنای نگهداری آخرین پشتیبان در هر روز، تا ۷ روز اخیرِ دارای پشتیبان است (روزهای بدون پشتیبان شمرده نمی‌شوند). قوانین از ثانیه‌ای تا سالانه اعمال می‌شوند و پشتیبان‌های انتخاب‌شده توسط قوانین قبلی، در قوانین بعدی شمرده نمی‌شوند. زمان شروع هر پشتیبان برای اهداف هرس استفاده می‌شود. تاریخ‌ها و زمان‌ها در منطقه زمانی محلی تفسیر می‌شوند و هفته‌ها از دوشنبه تا یکشنبه در نظر گرفته می‌شوند. مشخص کردن یک عدد منفی برای تعداد بایگانی‌های قابل نگهداری به معنای نامحدود بودن آن است. از نسخه 1.2.0 به بعد، اگر هر یک از قوانین ثانیه‌ای، دقیقه‌ای، ساعتی، روزانه، هفتگی، ماهانه، فصلی یا سالانه نتواند به هدف نگهداری خود برسد، Borg قدیمی‌ترین بایگانی را نگه می‌دارد. این امر به اولین بایگانی از نظر زمانی اجازه می‌دهد تا زمان جایگزین شدن با بایگانی جدیدتری که شرایط نگهداری را برآورده می‌کند، به حفظ خود ادامه دهد.

قوانین --keep-13weekly و --keep-3monthly دو راهبرد متفاوت برای نگهداری بایگانی‌ها در هر فصل (سه ماه) هستند.

گزینه --keep-last N همان کار --keep-secondly N را انجام می‌دهد (و N بایگانی آخر را با این فرض نگه می‌دارد که بیش از یک بایگانی پشتیبان در یک ثانیه ایجاد نمی‌کنید).

هنگام استفاده از --stats، آمارهایی درباره میزان داده‌های حذف‌شده دریافت خواهید کرد - اندازه یکتاشده (deduplicated) در بخش "Deleted data" از همه جالب‌تر است، زیرا نشان می‌دهد مخزن شما چقدر کوچک خواهد شد. لطفاً توجه داشته باشید که آمار "All archives" به وضعیت پس از هرس اشاره دارد. گزینه --stats می‌تواند کُند باشد - اگر گزینه‌ای سریع‌تر می‌خواهید، از --quick-stats استفاده کنید (این گزینه از آمار سراسری "All archives" در مخزن صرف‌نظر می‌کند). گزینه‌های --stats / --quick-stats و --dry-run مانعة‌الجمع هستند.

برای مشاهده گزینه‌های عمومی دستورات Borg، به borg-common(1) مراجعه کنید.

مخزنی که باید هرس شود

تغییری در مخزن ایجاد نشود
اجبار به هرس بایگانی‌های آسیب‌دیده؛ در صورتی که --force کارساز نبود، از --force --force استفاده کنید.
چاپ آمار برای بایگانی حذف‌شده
فقط چاپ آمار حذف، با صرف‌نظر کردن از آمار سراسری مخزن
خروجی فهرست باجزئیات از بایگانی‌هایی که نگهداری/هرس می‌شوند
نگهداری تمام بایگانی‌ها در این بازه زمانی
تعداد بایگانی‌های ثانیه‌ای برای نگهداری
تعداد بایگانی‌های دقیقه‌ای برای نگهداری
تعداد بایگانی‌های ساعتی برای نگهداری
تعداد بایگانی‌های روزانه برای نگهداری
تعداد بایگانی‌های هفتگی برای نگهداری
تعداد بایگانی‌های ماهانه برای نگهداری
تعداد بایگانی‌های فصلی برای نگهداری (راهبرد ۱۳ هفته)
تعداد بایگانی‌های فصلی برای نگهداری (راهبرد ۳ ماه)
تعداد بایگانی‌های سالانه برای نگهداری
کار با سرعت کمتر، اما با استفاده از فضای کمتر
نوشتن چک‌پوینت در هر SECONDS ثانیه (پیش‌فرض: 1800)

فقط بایگانی‌هایی که نامشان با این پیشوند شروع می‌شود در نظر گرفته شوند. (منسوخ‌شده)
فقط بایگانی‌هایی که نامشان با الگوی glob مطابقت دارد در نظر گرفته شوند. قوانین :sh اعمال می‌شوند (بدون استفاده واقعی از پیشوند :sh)، به "borg help patterns" مراجعه کنید.

مراقب باشید: prune دستوری بالقوه خطرناک است؛ زیرا بایگانی‌های پشتیبان را حذف می‌کند.

به‌طور پیش‌فرض، prune روی تمام بایگانی‌های موجود در مخزن اعمال می‌شود، مگر اینکه با استفاده از --glob-archives عملیات آن را به زیرمجموعه‌ای از بایگانی‌ها محدود کنید. هنگام استفاده از --glob-archives، در انتخاب یک الگوی تطبیق مناسب دقت کنید — برای مثال، اگر نمی‌خواهید با "foobar" نیز مطابقت داده شود، از "foo*" استفاده نکنید.

اکیداً توصیه می‌شود که همیشه ابتدا prune -v --list --dry-run ... را اجرا کنید تا بتوانید ببینید بدون اینکه واقعاً تغییری ایجاد شود، چه اقداماتی انجام خواهد شد.

# نگهداری ۷ بایگانی پایان روز و ۴ بایگانی اضافی پایان هفته.
# اجرای آزمایشی (dry-run) بدون حذف واقعی هیچ موردی.
$ borg prune -v --list --dry-run --keep-daily=7 --keep-weekly=4 /path/to/repo
# مشابه دستور بالا اما فقط اعمال روی نام‌های بایگانی که با نام میزبان (hostname)
# دستگاه شروع شده و به دنبال آن یک نویسه "-" می‌آید:
$ borg prune -v --list --keep-daily=7 --keep-weekly=4 --glob-archives='{hostname}-*' /path/to/repo
# آزادسازی واقعی فضای دیسک:
$ borg compact /path/to/repo
# نگهداری ۷ بایگانی پایان روز، ۴ بایگانی اضافی پایان هفته،
# و یک بایگانی پایان ماه برای هر ماه:
$ borg prune -v --list --keep-daily=7 --keep-weekly=4 --keep-monthly=-1 /path/to/repo
# نگهداری تمام پشتیبان‌ها در ۱۰ روز گذشته، ۴ بایگانی اضافی پایان هفته،
# و یک بایگانی پایان ماه برای هر ماه:
$ borg prune -v --list --keep-within=10d --keep-weekly=4 --keep-monthly=-1 /path/to/repo

همچنین یک مثال تصویری از هرس کردن در docs/misc/prune-example.txt وجود دارد.

borg-common(1), borg-compact(1)

The Borg Collective

2026-07-18