BTRBK.CONF(5) فایل‌های پیکربندی BTRBK.CONF(5)

btrbk.conf - فایل پیکربندی btrbk

/etc/btrbk.conf
/etc/btrbk/btrbk.conf

فایل پیکربندی btrbk مشخص می‌کند کدام زیرحجم‌های (subvolume) btrfs در سیستم‌فایل باید پردازش شوند، چه زیرحجم‌های مقصدی باید برای ایجاد پشتیبان‌ها به کار روند، و اسنپ‌شات‌ها باید در کجا ایجاد شوند. سیاست نگهداری و همچنین بیشتر گزینه‌های دیگر را می‌توان به‌صورت سراسری یا درون یک بخش مشخص تعریف کرد.

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

خطوط خالی نادیده گرفته می‌شوند. نویسه هش (#) آغازگر یک یادداشت (کامنت) است که تا انتهای خط ادامه می‌یابد.

volume <volume-directory>|<url> (اختیاری)

مسیر مطلق اشاره‌کننده به سیستم‌فایل btrfs شامل زیرحجم(های) مبدأ که باید از آن‌ها پشتیبان‌گیری شود. معمولاً نقطه اتصال یک سیستم‌فایل btrfs است که با گزینه subvolid=5 متصل (mount) شده است.

subvolume <subvolume-name>

زیرحجمی که باید پشتیبان‌گیری شود، به صورت نسبی نسبت به <volume-directory> در بخش volume، یا به صورت مطلق در صورتی که بخش volume حذف شده باشد. نویسه عام (wildcard) «*» پذیرفته می‌شود.

توجه داشته باشید که اگر این زیرحجم ریشه btrfs باشد (id=5)، باید یک UUID معتبر داشته باشد، که این مورد برای سیستم‌فایل‌های ایجادشده با btrfs-progs < 4.16 صدق نمی‌کند.

target [send-receive|raw] <target-directory>|<url>

دایرکتوری مقصدی که زیرحجم‌های پشتیبان باید در آن ایجاد شوند. نوع مقصدِ اختیاری به طور پیش‌فرض “send-receive” است؛ برای جزئیات به بخش انواع مقصد در زیر مراجعه کنید.

تعریف چندین بخش target در هر زمینه‌ای مجاز است: یک target تعریف‌شده در زمینه volume یا زمینه سراسری، برای تمام بخش‌های subvolume زیرمجموعه استفاده خواهد شد (نکته: برای مشاهده پیکربندی حاصل، دستور “btrbk list” یا “btrbk config print” را اجرا کنید).

اگر یک <url> مشخص شود، اقدامات btrbk (دستورات پوسته) از راه دور و از طریق ssh با استفاده از گزینه‌های SSH شرح‌داده‌شده در زیر اجرا می‌شوند. قالب‌های پذیرفته‌شده عبارتند از:

ssh://<hostname>[:<port>]/<directory>
<hostname>:<directory>

که در آن <hostname> یک نام میزبان، یک آدرس IPv4 به شکل ده‌دهی نقطه‌دار، یا یک نشانی IP مستقیم درون کروشه‌ها (مانند "[2001:db8::7]" ) است.

اگر به ماشین‌های مجازی متصل می‌شوید، می‌توانید چندین بخش volume را برای یک <hostname> همراه با شماره‌های پورت (<port>) متمایز برای هر ماشین پیکربندی کنید.

گزینه‌های شرح‌داده‌شده در اینجا را می‌توان در زمینه سراسری (global context) و همچنین بخش‌های volume، subvolume و target مشخص کرد، مگر آنکه خلاف آن ذکر شده باشد.

timestamp_format short|long|long-iso

قالب برچسب زمانی مورد استفاده به عنوان پسوند نام‌های زیرحجم‌های اسنپ‌شات جدید. مقدار پیش‌فرض “long” است.

short

YYYYMMDD[_N] (مانند "20150825"، "20150825_1")

long

YYYYMMDD<T>hhmm[_N] (مانند "20150825T1531")

long-iso

YYYYMMDD<T>hhmmss&plusmn;hhmm[_N] (مانند "20150825T153123+0200")

توجه داشته باشید که اگر اسنپ‌شات یا پشتیبانی از قبل با برچسب زمانی تاریخ/زمان جاری وجود داشته باشد، پسوند "_N" به برچسب زمانی افزوده می‌شود.

اگر می‌خواهید مطمئن شوید که btrbk هرگز برچسب‌های زمانی مبهم ایجاد نمی‌کند (که ممکن است هنگام ایجاد چندین اسنپ‌شات در طول تغییر ساعت تابستانی رخ دهد)، از “long-iso” استفاده کنید.

توجه داشته باشید که استفاده از “long-iso” روی زمان‌بندی پیامدهایی دارد؛ بخش زمان مرجع در زیر را ببینید.

snapshot_dir <directory>

دایرکتوری که اسنپ‌شات‌های btrfs در آن ایجاد می‌شوند، به صورت نسبی نسبت به <volume-directory> در بخش volume، یا به صورت مطلق در صورتی که بخش volume حذف شده باشد. توجه داشته باشید که btrbk این دایرکتوری را به صورت خودکار ایجاد نمی‌کند، و در صورت عدم وجود آن، ایجاد اسنپ‌شات با شکست مواجه خواهد شد.

snapshot_name <basename>

نام پایه اسنپ‌شات (و پشتیبان) ایجادشده. این گزینه تنها در بخش subvolume معتبر است. مقدار پیش‌فرض <subvolume-name> است.

snapshot_create always|onchange|ondemand|no

اگر روی “always” تنظیم شود، اسنپ‌شات‌ها همیشه ایجاد می‌شوند. اگر روی “onchange” تنظیم شود، اسنپ‌شات‌ها تنها زمانی ایجاد می‌شوند که آخرین اسنپ‌شات به‌روز نباشد، یعنی زیرحجم مبدأ از زمان ایجاد آخرین اسنپ‌شات تغییر کرده باشد (دقیق‌تر بگوییم: نسل یا generation سیستم‌فایل btrfs افزایش یافته باشد). اگر روی “ondemand” تنظیم شود، اسنپ‌شات‌ها تنها در صورتی ایجاد می‌شوند که دست‌کم یک زیرحجم مقصد در دسترس باشد (هنگامی مفید است که با کمبود فضای دیسک مواجه هستید و از btrbk فقط برای پشتیبان‌گیری روی دیسک خارجی که همیشه متصل نیست استفاده می‌کنید). اگر روی “no” تنظیم شود، اسنپ‌شات‌ها هرگز ایجاد نمی‌شوند (هنگامی مفید است که نمونه دیگری از btrbk وظیفه ایجاد اسنپ‌شات را بر عهده دارد). پیش‌فرض “always” است.

incremental yes|no|strict

در صورت فعال بودن، پشتیبان‌های افزایشی (incremental) ایجاد می‌شوند. اگر روی “strict” تنظیم شود، پشتیبان‌های غیر‌افزایشی (اولیه) هرگز ایجاد نمی‌شوند و پشتیبان‌های افزایشی تنها به والد‌های مرتبط (بر اساس رابطه parent-uuid) محدود می‌گردند. پیش‌فرض “yes” است.

توجه داشته باشید که حتی اگر زنجیره parent-uuid شکسته شود، اسنپ‌شات‌ها و پشتیبان‌ها همچنان می‌توانند داده‌ها را به اشتراک بگذارند (که به ویژه برای پشتیبان‌های ایجادشده با فعال بودن گزینه incremental صادق است) و کاملاً به عنوان والد برای عملیات‌های ارسال-دریافت (send-receive) افزایشی مناسب هستند. اما از آنجا که btrbk نمی‌تواند از این بابت مطمئن باشد، چنین عملیات‌هایی در حالت "incremental strict" مجاز نیستند.

noauto yes|no

در صورت فعال بودن، این زمینه توسط تمام اقدامات btrbk نادیده گرفته می‌شود مگر اینکه به صراحت توسط یک آرگومان فیلتر (<filter>) منطبق در خط فرمان فعال شده باشد (مانند "btrbk run myfilter").

group <group-name> [<group-name>]...

بخش جاری (volume، subvolume یا target) را به گروه‌های تعریف‌شده توسط کاربر اضافه می‌کند، که می‌توان از آن‌ها به عنوان فیلتر برای اکثر دستورات btrbk استفاده کرد (بخش FILTER STATEMENTS در btrbk(1) را ببینید). این گزینه را می‌توان چندین بار در همان زمینه تنظیم کرد.

preserve_day_of_week monday|tuesday|...|sunday

مشخص می‌کند که در چه روزی یک اسنپ‌شات/پشتیبان به عنوان پشتیبان «هفتگی» در نظر گرفته شود. پشتیبان‌های هفتگی، ماهانه و سالانه در این روز از هفته نگهداری می‌شوند (بخش سیاست نگهداری در زیر را ببینید). مقدار پیش‌فرض “sunday” است.

preserve_hour_of_day [0..23]

مشخص می‌کند پس از چه ساعتی (بر حسب ساعت‌های کامل از نیمه‌شب) یک اسنپ‌شات/پشتیبان به عنوان پشتیبان «روزانه» در نظر گرفته شود. پشتیبان‌های روزانه، هفتگی، ماهانه و سالانه در این ساعت نگهداری می‌شوند (بخش سیاست نگهداری در زیر را ببینید). در اسنپ‌شات‌ها یا پشتیبان‌های فاقد اطلاعات زمان (timestamp_format short) نادیده گرفته می‌شود. مقدار پیش‌فرض “0” است.

snapshot_preserve no|<retention_policy>

سیاست نگهداری اسنپ‌شات‌ها را تنظیم می‌کند (بخش سیاست نگهداری در زیر را ببینید). اگر روی “no” تنظیم شود، اسنپ‌شات‌ها فقط طبق snapshot_preserve_min نگهداری می‌شوند. مقدار پیش‌فرض “no” است.

توجه داشته باشید که اگر snapshot_preserve_min روی “all” (پیش‌فرض) تنظیم شده باشد، snapshot_preserve هیچ اثری ندارد.

snapshot_preserve_min all|latest|<number>{h,d,w,m,y}

تمام اسنپ‌شات‌ها را برای حداقل مدت‌زمان ساعت (h)، روز (d)، هفته (w)، ماه (m) یا سال (y) نگهداری می‌کند، صرف‌نظر از اینکه چه تعداد اسنپ‌شات وجود دارد. اگر روی “all” تنظیم شود، تمام اسنپ‌شات‌ها برای همیشه نگهداری می‌شوند. اگر روی “latest” تنظیم شود، آخرین اسنپ‌شات نگهداری می‌شود. مقدار پیش‌فرض “all” است.

target_preserve no|<retention_policy>

سیاست نگهداری پشتیبان‌ها را تنظیم می‌کند (بخش سیاست نگهداری در زیر را ببینید). اگر روی “no” تنظیم شود، پشتیبان‌ها فقط طبق target_preserve_min نگهداری می‌شوند. مقدار پیش‌فرض “no” است.

توجه داشته باشید که اگر target_preserve_min روی “all” (پیش‌فرض) تنظیم شده باشد، target_preserve هیچ اثری ندارد.

target_preserve_min all|latest|no|<number>{h,d,w,m,y}

تمام پشتیبان‌ها را برای حداقل مدت‌زمان ساعت (h)، روز (d)، هفته (w)، ماه (m) یا سال (y) نگهداری می‌کند، صرف‌نظر از اینکه چه تعداد وجود دارد. اگر روی “all” تنظیم شود، تمام پشتیبان‌ها برای همیشه نگهداری می‌شوند. اگر روی “latest” تنظیم شود، همیشه آخرین پشتیبان نگهداری می‌شود (در ترکیب با "target_preserve no" هنگامی مفید است که فقط می‌خواهید آخرین پشتیبان را نگه دارید). اگر روی “no” تنظیم شود، فقط پشتیبان‌هایی ایجاد می‌شوند که پیرو سیاست target_preserve هستند. پیش‌فرض “all” است.

archive_preserve no|<retention_policy>

سیاست نگهداری را برای بایگانی‌ها (دستور "btrbk archive") تنظیم می‌کند، با همان معناشناسیِ target_preserve.

archive_preserve_min all|latest|no|<number>{h,d,w,m,y}

سیاست نگهداری را برای بایگانی‌ها (دستور "btrbk archive") تنظیم می‌کند، با همان معناشناسیِ target_preserve_min.

archive_exclude <pattern>

زیرحجم‌های منطبق با <pattern> را از بایگانی کردن مستثنی می‌کند. این الگو نویسه عام «*» را می‌پذیرد و با انتهای نام مسیر مطابقت داده می‌شود.

ssh_identity <file>|no

مسیر مطلق به فایل هویت ssh (کلید خصوصی). اگر تنظیم نشود، پیش‌فرض ssh استفاده می‌شود (به ssh(1)، گزینه "-i identity_file"; مراجعه کنید). توجه داشته باشید که اگر کلید هویت با گذرواژه محافظت شده باشد و از عامل احراز هویت (ssh-agent) استفاده نشود، btrbk در هر تلاش برای اتصال از کاربر ورودی می‌خواهد.

ssh_user <username>|no

نام کاربری دوردست برای ssh. مقدار پیش‌فرض “root” است. اطمینان حاصل کنید که کاربر دوردست قادر است دستور "btrfs" را با دسترسی‌های ریشه اجرا کند (برای جزئیات گزینه backend را ببینید). اگر روی “no” تنظیم شود، پیش‌فرض ssh استفاده می‌شود.

ssh_compression yes|no

فشرده‌سازی اتصالات ssh را فعال یا غیرفعال می‌کند. مقدار پیش‌فرض “no” است. توجه داشته باشید که اگر stream_compress فعال باشد، فشرده‌سازی ssh همیشه برای عملیات‌های ارسال/دریافت غیرفعال خواهد بود.

ssh_cipher_spec default|<cipher_spec>

مشخصات الگوریتم رمزنگاری (cipher) را برای رمزگذاری نشست انتخاب می‌کند (فهرستی از رمزها با کاما جدا شده به ترتیب اولویت). برای اطلاعات بیشتر به گزینه "-c cipher_spec"; در ssh(1) مراجعه کنید. مقدار پیش‌فرض “default” است (رمزهای مشخص‌شده در ssh_config(5)).

stream_compress <compress_command>|no

جریان ارسال btrfs را پیش از انتقال آن از/به مکان‌های دوردست فشرده می‌کند. مقدار پیش‌فرض “no” است. در صورت فعال بودن، اطمینان حاصل کنید که <compress_command> روی میزبان‌های مبدأ و مقصد در دسترس است. دستورات فشرده‌سازی پشتیبانی‌شده (<compress_command>): gzip, pigz, bzip2, pbzip2, bzip3, xz, lzo, lz4, zstd.

stream_compress_level default|<number>

سطح فشرده‌سازی برای دستور فشرده‌سازیِ مشخص‌شده (<compress_command>). برای جزئیات به صفحه راهنمای مربوطه مراجعه کنید (معمولاً [1..9]، که در آن ۱ به معنای سریع‌ترین فشرده‌سازی است). مقدار پیش‌فرض “default” است (سطح فشرده‌سازی پیش‌فرض <compress_command>).

stream_compress_long default|<number>

تطبیق فاصله طولانی (long distance matching) را برای <compress_command> مشخص‌شده فعال می‌کند. برای جزئیات به صفحه راهنمای مربوطه مراجعه کنید. تنها برای "zstd" پشتیبانی می‌شود.

stream_compress_threads default|<number>

تعداد نخ‌ها (threads) برای استفاده در <compress_command>. تنها برای "pigz"، "pbzip2"، "bzip3"، "zstd" و نسخه‌های اخیر "xz" پشتیبانی می‌شود.

stream_compress_adapt yes|no

فشرده‌سازی تطبیقی را برای <compress_command> فعال می‌کند. تنها برای "zstd" (نسخه >= 1.3.6) پشتیبانی می‌شود. پیش‌فرض “no” است.

stream_buffer <size>|no

یک بافر به جریان ارسال btrfs (به‌صورت محلی، روی داده‌های غیرفشرده) با حداکثر اندازه <size> اضافه می‌کند. این کار می‌تواند در هر دو عملیات محلی یا دوردست بهبود سرعت (تا ۲۰٪ اندازه‌گیری‌شده) به همراه داشته باشد، اما بار سیستم را نیز افزایش می‌دهد. می‌توان پسوند "k"، "m"، "g" یا "%" را به <size> اضافه کرد تا کیلوبایت (*1024)، مگابایت، گیگابایت، یا درصدی از کل حافظه فیزیکی را نشان دهد. پیش‌فرض “no” است.

در صورت فعال بودن، اطمینان حاصل کنید که دستور "mbuffer" (دست‌کم نسخه 20180505) روی میزبانی که btrbk را اجرا می‌کند در دسترس باشد. از زمان btrbk-0.29.0، ابزار mbuffer(1) برای هر دو گزینه rate_limit و stream_buffer استفاده می‌شود:

mbuffer [-m <stream_buffer>] [-r <rate_limit>]

توجه داشته باشید که mbuffer(1) همیشه مقادیر پیش‌فرض را از "/etc/mbuffer.rc" و "~/.mbuffer.rc" می‌خواند.

اگر دغدغه اصلی شما پایداری فرایند پشتیبان‌گیری است، این گزینه را غیرفعال بگذارید: اگرچه نسخه‌های اخیر mbuffer قابلیت اطمینان خود را ثابت کرده‌اند، اغلب مطلوب است که امور ساده نگه داشته شوند تا اینکه یک فرایند چندنخیِ اضافی به خط لوله دستور افزوده شود.

stream_buffer_remote <size>|no

یک بافر روی میزبان‌های دوردست (مبدأ یا مقصد) اضافه می‌کند. پیش‌فرض “no” است.

اگر ترجیح می‌دهید بافرسازی در سمت دوردست یا حتی هر دو سمت انجام شود، این گزینه را فعال کنید: دلایل این انتخاب به حافظه موجود، عملکرد دیسک و پردازنده (ارسال/دریافت btrfs، فشرده‌سازی) و همچنین محدودیت‌های شبکه بستگی دارد.

rate_limit <rate>|no

نرخ خواندن جریان ارسال btrfs را به <rate> بایت بر ثانیه محدود می‌کند (به صورت محلی، روی جریان ارسال فشرده‌نشده). می‌توان یک پسوند "k"، "m"، "g" یا "t" برای نشان دادن کیلوبایت (*1024)، مگابایت و غیره اضافه کرد. پیش‌فرض “no” است. توجه داشته باشید که rate_limit به طور ضمنی یک بافر جریان اضافه می‌کند (گزینه stream_buffer در بالا را ببینید).

rate_limit_remote <rate>|no

محدودیت نرخ را روی میزبان‌های دوردست (مبدأ یا مقصد) اعمال می‌کند. پیش‌فرض “no” است. توجه داشته باشید که معمولاً فعال کردن هم‌زمان هر دو گزینه rate_limit و rate_limit_remote منطقی نیست.

transaction_log <file>|no

در صورت تنظیم، تمام تراکنش‌ها (ایجاد اسنپ‌شات، ارسال-دریافت زیرحجم، حذف زیرحجم) و همچنین پیام‌های لغو (abort) در قالب یک جدول فاصله‌بندی‌شده در <file> ثبت می‌شوند: "localtime type status target_url source_url parent_url message".

transaction_syslog <facility>|no

در صورت تنظیم، تمام تراکنش‌ها (همان‌طور که در transaction_log در بالا شرح داده شد) در syslog ثبت می‌شوند. نام برنامه مورد استفاده در پیام‌ها "btrbk" است. پارامترهای پذیرفته‌شده برای <facility>: user, mail, daemon, auth, lpr, news, cron, authpriv, local0..local7.

lockfile <file>|no

یک قفل انحصاری با استفاده از flock(2) روی <file> در حین اجرای برنامه قرار می‌دهد. اگر قفل در اختیار فرایند دیگری باشد، برنامه پیش از اجرای هرگونه اقدامی خارج می‌شود. در حالت اجرای آزمایشی (-n، --dry-run) نادیده گرفته می‌شود. همچنین گزینه خط فرمان --lockfile را ببینید.

backend <backend>

ابزارهای پشتیبان سیستم‌فایل که برای عملیات‌های خاص btrfs استفاده می‌شوند. پشتیبان‌های (backends) موجود:

btrfs-progs

پشتیبان پیش‌فرض؛ دستورات btrfs همان‌طور که در btrfs(8) مشخص شده فراخوانی می‌شوند (مانند "btrfs subvolume show").

btrfs-progs-btrbk

دستورات btrfs به جای فاصله با یک خط تیره از هم جدا می‌شوند (مانند "btrfs-subvolume-show" به جای "btrfs subvolume show"). برای تنظیم suid یا قابلیت‌های فایل (setcap) روی دستورات خاص btrfs مفید است، همان‌طور که در https://github.com/digint/btrfs-progs-btrbk. پیاده‌سازی شده است.

btrfs-progs-sudo

دستورات btrfs با پیشوند "sudo -n" همراه می‌شوند (مانند "sudo -n btrfs subvolume show"; به جای "btrfs subvolume show"). اطمینان حاصل کنید که دسترسی‌های مناسب (ریشه) برای گروه‌های دستوری "btrfs" و همچنین دستورات "readlink" و "test" در /etc/sudoers وجود داشته باشد.

btrfs-progs-doas

مشابه btrfs-progs-sudo، با استفاده از پیشوند "doas -n".

اگر می‌خواهید این گزینه را فقط برای میزبان‌های محلی یا دوردست تنظیم کنید، backend_local یا backend_remote را مشخص کنید (مانند "backend_remote btrfs-progs-btrbk").

اگر می‌خواهید این گزینه را فقط برای کاربر عادی (غیر ریشه) تنظیم کنید، backend_local_user را مشخص کنید.

compat <compat-option>...

گزینه‌های سازگاری را فعال می‌کند. گزینه‌های سازگاری (compat-option) موجود:

busybox

استفاده از دستورات سازگار با busybox، به بهای سربار جزئی هنگام خواندن اطلاعات سیستم‌فایل.

ignore_receive_errors *experimental*

به btrfs-receive(8) دستور می‌دهد تا با تنظیم گزینه "--max-errors=0" هنگام بروز خطا متوقف نشود. در عوض، هشدارها را چاپ کند.

یک کاربرد شناخته‌شده برای این گزینه، میزبان‌های مقصدی هستند که از xattr پشتیبانی نمی‌کنند (مانند برخی از NASهای Synology)، در حالی که جریان ارسال شامل دستورات "lsetxattr" است. مورد دیگر مقصدهایی هستند که در تنظیم otime شکست می‌خورند و خطای "ERROR: attribute 12 requested but not present" می‌دهند.

توجه داشته باشید که هیچ تضمینی وجود ندارد که پشتیبان‌های ایجادشده با فعال بودن این گزینه اصلاً قابل بازیابی باشند.

اگر می‌خواهید این گزینه را فقط برای میزبان‌های محلی یا دوردست تنظیم کنید، compat_local یا compat_remote را مشخص کنید (مانند "compat_remote busybox").

cache_dir <directory>

در صورت تنظیم، نقشه‌های extent را برای دستور "btrbk extents" کش (ذخیره موقت) می‌کند.

incremental_prefs <list-spec>[:<amount>]...

اولویت‌ها را برای تعیین بهترین والد مشترک (همبسته) و منابع کلون (clone) برای پشتیبان‌های افزایشی، با انتخاب از فهرست‌های کاندیدای از پیش‌تعریف‌شده، مشخص می‌کند.

عبارت list-spec مشخص می‌کند والد/منبع‌کلون بعدی از کدام فهرست کاندیدا باید به فهرست نتایج افزوده شود؛ amount تعداد را مشخص می‌کند (مانند "sro:1 sro:1" که هم‌ارز با "sro:2" است)، یا در صورت حذف، تمام موارد. هر کاندیدایی که از قبل در نتایج باشد کنار گذاشته می‌شود.

فهرست حاصل از زیرحجم‌ها سپس به عنوان پارامترهای دستور btrfs-send(8) استفاده می‌شود: اولین مورد برای "-p <parent>" و بقیه موارد برای "-c <clone-src>".

شناسه‌های list-spec موجود (فهرست‌های کاندیدا = زیرمجموعه‌های فیلترشده از زیرحجم‌های همبسته):

sro,srn

تمام موارد از snapshot_dir منطبق با snapshot_name، با رابطه parent_uuid، مرتب‌شده بر اساس برچسب زمانی btrbk (حرف o=قدیمی‌تر، n=جدیدتر).

sao,san

تمام موارد از snapshot_dir منطبق با snapshot_name، مرتب‌شده بر اساس برچسب زمانی btrbk (حرف o=قدیمی‌تر، n=جدیدتر).

aro,arn

تمام موارد از incremental_resolve، با رابطه parent_uuid، مرتب‌شده بر اساس cgen (حرف o=قدیمی‌تر، n=جدیدتر).

مقدار پیش‌فرض "sro:1 srn:1 sao:1 san:1 aro:1 arn:1" است. توجه داشته باشید که برای بیشتر عملیات‌ها، مقدار پیش‌فرض به یک والد منفرد حل می‌شود، زیرا معمولاً اسنپ‌شات‌های جدیدتری وجود ندارد، و تمام "sro:1 sao:1 aro:1" به همان یک اسنپ‌شات منتهی می‌شوند.

مثال: "defaults,sao,san,aro,arn" مقادیر پیش‌فرض را می‌گیرد و منابع کلون را برای تمام (!) کاندیداهای شناخته‌شده در سیستم‌فایل اضافه می‌کند.

incremental_clones yes|no

در صورت فعال بودن، btrbk گزینه "-c <clone-src>" را به دستور btrfs-send(8) برای تمام زیرحجم‌های همبسته حل‌شده توسط incremental_prefs اضافه می‌کند. در صورت غیرفعال بودن، فقط "-p <parent>" استفاده می‌شود. پیش‌فرض “yes” است.

incremental_resolve mountpoint|directory

مشخص می‌کند برای یافتن بهترین والد مشترک برای پشتیبان‌های افزایشی در کجا جستجو شود. اگر روی “mountpoint” تنظیم شود، از والدها در درخت سیستم‌فایلِ زیر نقطه اتصال دایرکتوری اسنپ‌شات و مقصد استفاده می‌کند. اگر روی “directory” تنظیم شود، از والدهای کاملاً زیر دایرکتوری‌های اسنپ‌شات/مقصد استفاده می‌کند. اگر با مشکلات دسترسی مواجه می‌شوید (زمانی که btrbk به عنوان ریشه اجرا نمی‌شود)، این را روی “directory” تنظیم کنید. پیش‌فرض “mountpoint” است.

btrfs_commit_delete yes|no

در صورت تنظیم، در پایان حذف هر اسنپ‌شات یا پشتیبان، منتظر ثبت تراکنش (commit) می‌ماند (گزینه --commit-each را برای "btrfs subvolume delete" تنظیم می‌کند). پیش‌فرض “no” است.

send_protocol <number>|no *experimental*

استفاده از پروتکل ارسال btrfs نسخه N. اگر در target فعال شود، btrbk گزینه "--proto <number>" را به دستور btrfs-send(8) اضافه می‌کند. پیش‌فرض “no” است (پیش‌فرض btrfs).

send_compressed_data yes|no *experimental*

داده‌هایی را که روی سیستم‌فایل فشرده شده‌اند مستقیماً بدون خارج کردن از فشرده‌سازی ارسال می‌کند. این کار به نسخه پروتکل ۲ یا بالاتر (btrfs-progs >= 5.19) نیاز دارد، و به طور ضمنی "send_protocol 2" را اعمال می‌کند. اگر در target فعال شود، btrbk گزینه "--compressed-data" را به دستور btrfs-send(8) اضافه می‌کند. پیش‌فرض “no” است (پیش‌فرض btrfs).

snapshot_qgroup_destroy yes|no *experimental*

target_qgroup_destroy yes|no *experimental*

archive_qgroup_destroy yes|no *experimental*

هر زمان که یک زیرحجم حذف می‌شود، qgroup پیش‌فرض متناظر "0/<subvol-id>" را نیز نابود می‌کند. تنها زمانی مفید است که پشتیبانی از سهمیه (quota) در btrfs را فعال کرده باشید. همچنین ببینید: https://bugzilla.kernel.org/show_bug.cgi?id=91751

warn_unknown_targets yes|no

در صورت تنظیم، چنانچه btrbk با یک زیرحجم مقصد در مکانی ناشناخته مواجه شود (یعنی از طرح نام‌گذاری btrbk پیروی نکند، یا خارج از دایرکتوری مقصد باشد)، یک هشدار چاپ می‌کند. مقدار پیش‌فرض “no” است.

سیاست‌های نگهداری به طور جداگانه برای اسنپ‌شات‌ها، پشتیبان‌ها و بایگانی‌ها (که در متن زیر به طور خلاصه «پشتیبان‌ها» نامیده می‌شوند)، با استفاده از ترکیبی از موارد زیر تعریف می‌شوند:

*_preserve_min all|latest|no|<number>{h,d,w,m,y}

مدت زمانی که در طول آن تمام پشتیبان‌ها نگهداری می‌شوند.

*_preserve no|<retention_policy>

جدول زمانی (نقاط منفرد در زمان) که برای آن پشتیبان‌های منفرد نگهداری می‌شوند.

توجه داشته باشید که اگر "preserve_min" روی “all” (پیش‌فرض) تنظیم شده باشد، هرگونه تنظیمی از "preserve" بدیهی است که اثری نخواهد داشت.

قالب <retention_policy> به این صورت است:

[<hourly>h] [<daily>d] [<weekly>w] [<monthly>m] [<yearly>y]

hourly

مشخص می‌کند که پشتیبان‌های ساعتی تا چند ساعت قبل باید نگهداری شوند. اولین پشتیبان یک ساعت، یک پشتیبان ساعتی محسوب می‌شود.

daily

مشخص می‌کند که پشتیبان‌های روزانه تا چند روز قبل باید نگهداری شوند. اولین پشتیبان یک روز (شروع از preserve_hour_of_day) یک پشتیبان روزانه محسوب می‌شود.

weekly

مشخص می‌کند که پشتیبان‌های هفتگی تا چند هفته قبل باید نگهداری شوند. اولین پشتیبان روزانه ایجادشده در preserve_day_of_week (یا اولین پشتیبان در این هفته در صورتی که در آن روز دقیق پشتیبانی گرفته نشده باشد) به عنوان یک پشتیبان هفتگی در نظر گرفته می‌شود.

monthly

مشخص می‌کند که پشتیبان‌های ماهانه تا چند ماه قبل باید نگهداری شوند. هر نخستین پشتیبان هفتگی در یک ماه، به عنوان یک پشتیبان ماهانه در نظر گرفته می‌شود.

yearly

مشخص می‌کند که پشتیبان‌های سالانه تا چند سال قبل باید نگهداری شوند. هر نخستین پشتیبان ماهانه در یک سال، به عنوان یک پشتیبان سالانه در نظر گرفته می‌شود.

از یک علامت ستاره (*) برای “all” استفاده کنید (به عنوان مثال "target_preserve 60d *m" بیان می‌کند: «پشتیبان‌های روزانه را برای ۶۰ روز قبل و تمام پشتیبان‌های ماهانه را نگهداری کن»).

نکته: btrbk را با گزینه -S، --print-schedule اجرا کنید تا یک خروجی جامع از نتایج زمان‌بند به دست آورید.

زمان محلی روی میزبانی که btrbk را اجرا می‌کند، زمان مرجع را برای تمام محاسبات تاریخ/زمان، به ویژه برای «آغاز یک روز»، و در نتیجه برای نخستین پشتیبان‌های روزانه، هفتگی، ماهانه یا سالانه مشخص می‌کند. زمان محلی روی میزبان‌های دوردست (مبدأ/مقصد ssh) هرگز استفاده نمی‌شود.

مگر اینکه "timestamp_format long-iso" تنظیم شده باشد، پشتیبان‌های روزانه در "preserve_hour_of_day" (پیش‌فرض نیمه‌شب) منطقه زمانی مربوطه نگهداری می‌شوند (و نه در "00:00 UTC" که در هونولولو معادل "14:00" خواهد بود). این موضوع برای پیکربندی‌هایی با چندین نمونه btrbk اهمیت می‌یابد، مانند نمونه‌های متعدد فقط-اسنپ‌شات (پراکنده در سراسر جهان)، و یک نمونه فقط-دریافت روی سرور پشتیبان.

نکته مهم:

•اگر "timestamp_format long-iso" تنظیم شده باشد، هر نمونه btrbk تفسیر متفاوتی از «نخستین در روز» دارد. اطمینان حاصل کنید که btrbk را با منطقه زمانی یکسان روی هر میزبان اجرا می‌کنید، مثلاً با تنظیم متغیر محیطی TZ (به tzset(3) مراجعه کنید).

send-receive

پشتیبان‌گیری در یک سیستم‌فایل btrfs، با استفاده از "btrfs send/receive". این نوع، مقصدِ توصیه‌شده (استاندارد) است. <target-directory> باید یک مسیر مطلق باشد و به یک زیرحجم یا دایرکتوری در یک سیستم‌فایل btrfs اشاره کند. به btrfs-send(8) و btrfs-receive(8) مراجعه کنید.

raw *experimental*

پشتیبان‌گیری در یک فایل خام (مستقل از سیستم‌فایل) از خروجی btrfs-send(8)، همراه با فشرده‌سازی و رمزگذاری اختیاری.

توجه داشته باشید که سازوکار نگهداری مقصد در حال حاضر برای پشتیبان‌های خام افزایشی غیرفعال است (btrbk هیچ فایل خام افزایشی را حذف نمی‌کند)!

پشتیبان‌های خام از دو فایل تشکیل شده‌اند: فایل داده اصلی شامل جریان ارسال btrfs، و یک فایل جانبی ".info" حاوی فراداده:

<snapshot-name>.<timestamp>[_N].btrfs[.gz|.bz2|...][.gpg]
<snapshot-name>.<timestamp>[_N].btrfs[.gz|.bz2|...][.gpg].info

برای پشتیبان‌های افزایشی (incremental "incremental yes")، لطفاً توجه داشته باشید که:

•به محض اینکه یک فایل پشتیبان افزایشی (incremental) از بین برود یا خراب شود، تمام پشتیبان‌های افزایشی بعدی نامعتبر می‌شوند، زیرا دیگر هیچ والد مشترکی برای تصاویر افزایشی بعدی وجود ندارد. این ممکن است سازش خوبی برای یک طرح پشتیبان‌گیری در زمان تعطیلات باشد، اما برای طولانی‌مدت اطمینان حاصل کنید که هر از گاهی یک پشتیبان غیر‌افزایشی گرفته شود.
•در حال حاضر هیچ پشتیبانی برای چرخش (rotation) پشتیبان‌های افزایشی وجود ندارد: اگر incremental تنظیم شده باشد، باید هر از گاهی یک پشتیبان کامل به صورت دستی گرفته شود تا بتوان پشتیبان‌های قدیمی را حذف کرد.

گزینه‌های اضافی برای مقصدهای raw:

raw_target_compress <compress_command>|no

الگوریتم فشرده‌سازی برای استفاده در مقصد پشتیبان خام. دستورات فشرده‌سازیِ پشتیبانی‌شده (<compress_command>): gzip, pigz, bzip2, pbzip2, bzip3, xz, lzo, lz4, zstd.

raw_target_compress_level default|<number>

سطح فشرده‌سازی برای <compress_command> مشخص‌شده.

raw_target_compress_long default|<number>

فعال کردن تطبیق فاصله طولانی برای <compress_command>.

raw_target_compress_threads default|<number>

تعداد نخ‌ها برای استفاده در <compress_command>.

raw_target_split <size>|no

تقسیم فایل پشتیبان خام به بخش‌هایی با اندازه <size>.

raw_target_block_size <number>

اندازه بلوک برای نوشتن فایل پشتیبان خام. مقدار پیش‌فرض “128K” است.

raw_target_encrypt gpg|openssl_enc|no

در صورت فعال بودن، فایل خام مقصد را با استفاده از gpg یا openssl_enc رمزگذاری می‌کند.

گزینه‌های اضافی برای "raw_target_encrypt gpg":

gpg_keyring <file>

دسته‌کلید (keyring) مورد استفاده برای gpg، مانند "/etc/btrbk/gpg/pubring.kbx".

gpg_recipient <name>...

رمزگذاری برای شناسه کاربر <name> (نشانی ایمیل).

گزینه‌های اضافی برای "raw_target_encrypt openssl_enc" (بسیار تجربی):

openssl_ciphername <name>

پیش‌فرض “aes-256-cbc” است.

openssl_iv_size <size-in-bytes>|no

بستگی به رمز انتخاب‌شده دارد.

openssl_keyfile <file>|no

اشاره به یک فایل کلید در قالب هگزادسیمال (مسیر مطلق). مثال ایجاد فایل کلید (کلید ۲۵۶ بیتی):
# dd if=/dev/urandom bs=1 count=32 \
  | od -x -A n \
  | tr -d "[:space:]" > /path/to/keyfile

kdf_backend <file>|no

پشتیبان KDF که باید اجرا شود، مانند "/usr/share/btrbk/scripts/kdf_pbkdf2.py".

kdf_keysize <size-in-bytes>

پیش‌فرض “32” است.

kdf_keygen once|each

پیش‌فرض “once” است.

لطفاً برای جزئیات بیشتر به صفحه پروژه btrbk در https://digint.ch/btrbk مراجعه کنید.

btrbk(1)

Axel Burri <axel@tty0.ch>

2026-07-19 Btrbk 0.32.7