bup-index(1) General Commands Manual bup-index(1)

bup-index - ایندکس و فهرست‌سازی فایل‌ها برای تهیه نسخه پشتیبان در bup

bup index <-p|-m|-s|-u|--clear|--check> [-H] [-l] [-x] [--fake-valid] [--no-check-device] [--fake-invalid] [-f indexfile] [--exclude path] [--exclude-from filename] [--exclude-rx pattern] [--exclude-rx-from filename] [-v] <paths...>

دستور bup index ایندکس سیستم‌فایل را مدیریت و دستکاری می‌کند، که یک حافظه موقت (کش) از مسیرهای مطلق و فراداده‌های آن‌ها (ویژگی‌ها، هش‌های SHA-1 و غیره) است. عملکرد ایندکس bup شبیه به ایندکس git(1) است، و ایندکس پیش‌فرض در $BUP_DIR/bupindex قرار دارد.

ایجاد یک نسخه پشتیبان در bup شامل دو مرحله است: به‌روزرسانی ایندکس با bup index، و سپس پشتیبان‌گیری واقعی از فایل‌ها (یا زیرمجموعه‌ای از فایل‌ها) با bup save. این تفکیک به دلایل زیر وجود دارد:

1.
بیش از یک راه برای تولید فهرستی از فایل‌هایی که باید پشتیبان‌گیری شوند وجود دارد. برای نمونه، ممکن است بخواهید از inotify(7) یا dnotify(7) استفاده کنید.
2.
حتی اگر فایل‌ها را در چندین مقصد مختلف پشتیبان‌گیری کنید (برای افزونگی بیشتر)، نام فایل‌ها، ویژگی‌ها و هش‌ها در هر بار یکسان خواهند بود. بنابراین، می‌توانید از زحمت تولید مکرر و مجدد فهرست فایل‌ها برای هر مجموعه پشتیبان صرف‌نظر کنید.
3.
ممکن است بخواهید از داده‌های ردیابی‌شده توسط ایندکس bup برای مقاصد دیگر استفاده کنید (مانند افزایش سرعت سایر برنامه‌هایی که به همان اطلاعات نیاز دارند).

ابزار bup تمهیداتی را برای وضوح برچسب زمانی «بدترین حالت» مورد انتظار سیستم‌فایل – که در حال حاضر یک ثانیه است – در نظر می‌گیرد؛ برای نمونه VFAT، ext2، ext3، نسخه‌های کوچک ext4 و غیره. از آنجا که bup نمی‌تواند وضوح برچسب زمانی سیستم‌فایل را بداند و ممکن است در طول هر اجرا چندین سیستم‌فایل را بپیماید، همیشه فرض می‌کند که وضوح زمانی نمی‌تواند بهتر از یک ثانیه باشد.

از نظر عملی، این بدان معناست که به‌روزرسانی‌های ایندکس کمی غیردقیق هستند، و از این رو bup save ممکن است گاهی تغییراتی در سیستم‌فایل را ثبت کند که شما انتظارش را نداشتید. دلیل این امر آن است که در طول به‌روزرسانی ایندکس، اگر bup با مسیری مواجه شود که برچسب‌های زمانی واقعی آن جدیدتر از یک ثانیه قبل از شروع به‌روزرسانی باشد، bup برچسب‌های زمانی ایندکس را برای آن مسیر (mtime و ctime) دقیقاً روی یک ثانیه قبل از اجرا تنظیم می‌کند – که عملاً این مقادیر را محدود (cap) می‌کند.

این امر تضمین می‌کند که هیچ تغییر بعدی در آن مسیرها نتواند منجر به برچسب‌های زمانی شود که دقیقاً مشابه با برچسب‌های موجود در ایندکس باشند. اگر چنین چیزی امکان‌پذیر بود، bup ممکن بود متوجه تغییرات نشود.

می‌توانید اثر این رفتار را در این مثال مشاهده کنید (فرض کنید کمتر از یک ثانیه بین ایجاد اولیه فایل و اولین اجرای ایندکس سپری شده است):

$ touch src/1 src/2
# A "sleep 1" here would avoid the unexpected save.
$ bup index src
$ bup save -n src src  # Saves 1 and 2.
$ date > src/1
$ bup index src
$ date > src/2         # Not indexed.
$ bup save -n src src  # But src/2 is saved anyway.

اگر بخواهیم دقیق بگوییم، bup نباید متوجه تغییر در src/2 شود، اما به دلیل تمهیداتی که در بالا توضیح داده شد، متوجه آن می‌شود.

پیش از این bup ویژگی‌های لینوکس (.cf chattr(1) و lsattr(1)) را در سیستم‌های با ترتیب بایت بزرگ (big-endian) که در آن‌ها sizeof(long) < sizeof(int) بود نادیده می‌گرفت. این به این دلیل بود که هسته لینوکس و FUSE بر سر نوع آرگومان‌های فراخوان سیستمی attr اختلاف‌نظر داشتند (http://lwn.net/Articles/575846). از آنجا که هسته این مشکل را در سال ۲۰۲۰ برطرف کرد، اکنون bup تلاش می‌کند تا آن‌ها را در همه‌جا مدیریت کند، در حالی که همچنان مراقب است در موارد نادری که سیستم فعلی این اصلاحیه را ندارد، به پشته (stack) آسیبی وارد نشود.

به‌طور بازگشتی ایندکس را برای مسیرهای داده‌شده و زیرمجموعه‌های آن‌ها به‌روزرسانی می‌کند. یک یا چند مسیر باید مشخص شوند، و اگر مسیری به یک پیوند نمادین ختم شود، خود پیوند ایندکس خواهد شد، نه مقصد آن. اگر هیچ گزینه حالتی ارائه نشود، --update حالت پیش‌فرض است، و مسیرها می‌توانند توسط گزینه‌های --exclude، --exclude-rx و --one-file-system مستثنی شوند.
محتویات ایندکس را چاپ می‌کند. اگر مسیرها مشخص شده باشند، ورودی‌های داده‌شده و زیرمجموعه‌های آن‌ها را نشان می‌دهد. اگر هیچ مسیری داده نشود، ورودی‌ها را با شروع از دایرکتوری کاری جاری (.) نشان می‌دهد.
فقط فایل‌هایی را چاپ می‌کند که در ایندکس به عنوان اصلاح‌شده (یعنی تغییریافته از زمان آخرین نسخه پشتیبان) علامت‌گذاری شده‌اند. مستلزم -p است.
یک کد وضعیت (A، M، D یا فاصله) را قبل از هر مسیر قرار می‌دهد. مستلزم -p است. این کدها به ترتیب نشان می‌دهند که یک فایل در ایندکس از زمان آخرین نسخه پشتیبان، به عنوان اضافه‌شده، اصلاح‌شده، حذف‌شده یا بدون تغییر علامت‌گذاری شده است.
صحت و یکپارچگی فایل ایندکس را قبل و بعد از به‌روزرسانی به دقت بررسی می‌کند. بیشتر برای آزمون‌های خودکار کاربرد دارد.
ایندکس پیش‌فرض را پاک می‌کند.

برای هر فایل چاپ‌شده، جدیدترین کد هش ثبت‌شده را در ابتدای آن قرار می‌دهد. کد هش معمولاً توسط bup save تولید می‌شود. برای اشیائی که هنوز از آن‌ها نسخه پشتیبان تهیه نشده است، کد هش برابر با
0000000000000000000000000000000000000000 خواهد بود. توجه داشته باشید که کد هش حتی اگر مشخص باشد فایل در ایندکس اصلاح شده یا حذف شده است نیز چاپ می‌شود (یعنی زمانی که فایل روی سیستم‌فایل دیگر با هش ثبت‌شده مطابقت ندارد). اگر این موضوع برای شما مشکل‌ساز است، از گزینه --status استفاده کنید.
اطلاعات بیشتری را درباره هر فایل چاپ می‌کند، با قالبی مشابه با گزینه -l در دستور ls(1).
هنگام پیمایش سیستم‌فایل، از مرزهای سیستم‌فایل عبور نکن – هرچند همانند tar و rsync، خود نقاط اتصال همچنان ایندکس خواهند شد. تنها در صورتی کاربرد دارد که از -u استفاده کنید.
مسیرهای مشخص‌شده را به عنوان به‌روز علامت‌گذاری کن حتی اگر به‌روز نباشند. این گزینه می‌تواند برای آزمودن، یا برای جلوگیری از پشتیبان‌گیری غیرضروری از فایل‌هایی که می‌دانید نیازی به آن‌ها نیست، مفید باشد.
مسیرهای مشخص‌شده را به عنوان غیر به‌روز علامت‌گذاری کن، که باعث می‌شود در اجرای بعدی “bup save” محتوای آن‌ها دوباره بررسی شود.
استفاده از یک نام فایل ایندکس متفاوت به جای $BUP_DIR/bupindex.
مسیر path را از نسخه پشتیبان مستثنی کن (می‌تواند تکرار شود).
خواندن مسیرهای --exclude از پرونده filename، هر مسیر در یک خط (می‌تواند تکرار شود). خطوط کاملاً خالی را نادیده می‌گیرد.
مستثنی کردن هر مسیری که با pattern مطابقت داشته باشد، که باید یک عبارت باقاعده پایتون باشد (http://docs.python.org/library/re.html). این الگو بدون لنگر انداختن (anchoring) با کل مسیر مقایسه می‌شود، بنابراین “x/y” با “ox/yard” یا “box/yards” تطابق خواهد داشت. برای مستثنی کردن محتویات /tmp، اما نه خود دایرکتوری، از “^/tmp/.” استفاده کنید. (می‌تواند تکرار شود)
مثال‌ها:
  • /foo$ - مستثنی کردن هر فایلی به نام foo
  • /foo/$ - مستثنی کردن هر دایرکتوری به نام foo
  • /foo/. - مستثنی کردن محتویات هر دایرکتوری به نام foo
  • ^/tmp/. - مستثنی کردن محتویات tmp در سطح ریشه
خواندن الگوهای --exclude-rx از پرونده filename، هر الگو در یک خط (می‌تواند تکرار شود). خطوط کاملاً خالی را نادیده می‌گیرد.
اگر شماره دستگاه (stat(2) st_dev) تغییر کند، ورودی را نامعتبر علامت‌گذاری نکن. این گزینه می‌تواند هنگام ایندکس کردن سیستم‌فایل‌های از راه دور، خودکار سوارشده (automounted)، یا اسنپ‌شات (LVM، Btrfs و غیره)، که در آن‌ها شماره دستگاه ثابت نیست، مفید باشد.
افزایش خروجی گزارش رویدادها در حین به‌روزرسانی (می‌تواند بیش از یک بار استفاده شود). با یک بار استفاده از -v، هر دایرکتوری هم‌زمان با به‌روزرسانی چاپ می‌شود؛ با دو بار استفاده از -v، هر فایل نیز چاپ خواهد شد.

bup index -vux /etc /var /usr

bup-save(1)، bup-drecurse(1)، bup-on(1)

بخشی از مجموعه bup(1).

Avery Pennarun apenwarr@gmail.com.

2026-09-01 Bup 0.34+