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. Разделение существует по следующим причинам:
Существует несколько способов создания списка файлов, для которых необходимо выполнить резервное копирование. Например, вы можете использовать inotify(7) или dnotify(7).
Даже если вы выполняете резервное копирование файлов в несколько мест назначения (для дополнительной избыточности), имена файлов, атрибуты и хэши каждый раз будут одинаковыми. Таким образом, вы можете избавить себя от необходимости повторно генерировать список файлов для каждого набора резервных копий.
Вы можете использовать данные, отслеживаемые индексом bup, для других целей (например, для ускорения работы других программ, которым нужна та же информация).
На данный момент bup будет игнорировать атрибуты Linux (см. chattr(1) и lsattr(1)) на некоторых системах (любых системах с обратным порядком байтов, где sizeof(long) < sizeof(int)). Это связано с тем, что ядро Linux и FUSE в настоящее время расходятся во мнениях относительно типа аргументов системного вызова attr, и поэтому в системах с обратным порядком байтов невозможно получить результаты без риска повреждения стека (http://lwn.net/Articles). /575846/). В этих ситуациях bup будет выводить предупреждение при первом использовании атрибутов Linux во время любой операции индексирования/сохранения/восстановления.
bup приспосабливается к ожидаемому «наихудшему» разрешению временной метки файловой системы — в настоящее время это одна секунда; примеры включают VFAT, ext2, ext3, small ext4 и т. д. Поскольку bup не может знать разрешение метки времени файловой системы и может проходить через несколько файловых систем во время любого заданного запуска, всегда предполагается, что разрешение может быть не лучше одной секунды.
На практике это означает, что обновления индекса немного неточны, и поэтому при сохранении bup может иногда записываться неожиданные изменения файловой системы. Это связано с тем, что во время обновления индекса, если bup встречает путь, фактические метки времени которого более поздние, чем за одну секунду до начала обновления, bup установит временные метки индекса для этого пути (mtime и ctime) ровно за одну секунду до запуска, — эффективно ограничивая эти значения.
Это гарантирует, что никакие последующие изменения этих путей не могут привести к временным отметкам, идентичным тем, что указаны в индексе. Если бы это было возможно, 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, но он его замечает благодаря описанным выше приспособлениям.
рекурсивно обновить индекс для заданных путей и их потомков. Должен быть указан один или несколько путей, и если путь заканчивается символической ссылкой, индексироваться будет сама ссылка, а не цель. Если параметр режима не указан, --update используется по умолчанию, а пути могут быть исключены параметрами --exclude, --exclude-rx и --one-file-system.
распечатать содержимое индекса. Если заданы пути, показывает заданные записи и их потомков. Если пути не указаны, отображаются записи, начинающиеся с текущего рабочего каталога (.).
печатает только те файлы, которые помечены как измененные (т. е. измененные с момента последней резервной копии) в индексе. Подразумевает -p.
добавляйте код состояния (A, M, D или пробел) перед каждым путем. Подразумевает -p. Коды соответственно означают, что файл помечен в индексе как добавленный, измененный, удаленный или не изменившийся с момента последнего резервного копирования.
тщательно проверяйте целостность файла индекса до и после обновления. В основном полезно для автоматических тестов.
очистить индекс по умолчанию.
для каждого напечатанного файла добавьте последний записанный хеш-код. Хэш-код обычно генерируется при сохранении bup. Для объектов, которые еще не были заархивированы, хэш-код будет 000000000000000000000000000000000000000000. Обратите внимание, что хэш-код печатается, даже если известно, что файл был изменен или удален в индексе (т. е. файл в файловой системе больше не соответствует записанный хеш). Если это проблема для вас, используйте --status.
вывести дополнительную информацию о каждом файле в формате, аналогичном параметру -l команды ls(1).
не пересекайте границы файловой системы при обходе файловой системы — хотя, как и в случае с tar и rsync, сами точки монтирования все равно будут проиндексированы. Применимо, только если вы используете -u.
пометить указанные пути как актуальные, даже если они таковыми не являются. Это может быть полезно для тестирования или во избежание ненужного резервного копирования файлов, которые, как вы знаете, скучны.
помечать указанные пути как неактуальные, заставляя следующий запуск «bup save» повторно проверять их содержимое.
используйте другое имя файла индекса вместо $BUP_DIR/bupindex.
исключить путь из резервной копии (можно повторить).
чтение – исключить пути из имя файла, по одному пути на строку (может повторяться). Игнорировать полностью пустые строки.
исключить любой путь, соответствующий шаблону, который должен быть регулярным выражением Python (http://docs.python.org/library/re.html). Шаблон будет сравниваться с полным путем без привязки, поэтому «x/y» будет соответствовать «ox/yard» или «box/yards». Чтобы исключить содержимое /tmp, но не сам каталог, используйте «^/tmp/. ». (можно повторить)
Примеры:
`/foo$' - исключить любой файл с именем foo
`/foo/$' - исключить любой каталог с именем foo
`/фу/.' - исключить содержимое любого каталога с именем foo
`^/tmp/.' - исключить содержимое /tmp корневого уровня, но не сам /tmp
читать шаблоны –exclude-rx из имя_файла, по одному шаблону в строке (может повторяться). Игнорировать полностью пустые строки.
не помечать запись как недействительную, если меняется номер устройства (stat(2) st_dev). Это может быть полезно при индексировании удаленных, автомонтируемых или моментальных файловых систем (LVM, Btrfs и т. д.), где номер устройства не является фиксированным.
увеличить вывод журнала во время обновления (можно использовать более одного раза). С одним -v выводить каждый каталог по мере его обновления; с двумя -v также распечатать каждый файл.
bup index -vux /etc /var /usr
bup-save(1), bup-drecurse(1), bup-on(1)
Часть набора bup(1).
Эйвери Пеннарун apenwarr@gmail.com.