Рейтинг:1

Что на самом деле делает параметр -W tar?

флаг tr

Я использую смола чтобы упаковать некоторые данные. Прежде чем переместить его в архив, я хочу проверить целостность архива. Согласно справочной странице, параметр -W делает проверку:

-W, --проверить
Проверяйте архив после его записи.

Я проверил это, и, кажется, что-то делает:

$ tar cvWf tartest.tar tartest/
тартест/
tartest/dir1/
tartest/dir1/bar
tartest/dir2/
tartest/dir2/foobar
Проверить таргет/
Проверьте tartest/dir1/
Проверить tartest/dir1/bar
Проверьте tartest/dir2/
Проверьте tartest/dir2/foobar

Но что именно делает смола проверить здесь? Наличие файлов? Размер файла? Суммы MD5?

Рейтинг:1
флаг cn

Это потребовало некоторого копания, чтобы понять. В файле источник/compare.c в Git репозиторий для tar, мы находим функцию с именем Verify_volume (в строке 527 на момент написания), который содержит следующий комментарий

Проверка архива предназначена для проверки того, правильно ли он получен на физическом носителе, поэтому постарайтесь обойти умную буферизацию в памяти, относящуюся к этому конкретному носителю. В Linux, например, дисковод даже не будет доступен для всей проверки.

Это объясняет, что он пытается сделать, но что касается как она это делает, нам нужно посмотреть на код функции. Он начинается со сравнения заголовков, чтобы убедиться, что они совпадают, и если они совпадают, он запускает функцию diff_archive (строка 461 на момент написания), который идет поэлементно внутри архива, и когда он встречает файл*, он запускает функцию diff_file (строка 187). Он начинается с проверки нескольких простых вещей, таких как тип и размер файла (и другие). Если все они верны, он (для обычного файла) идет и проверяет каждый блок файла (в read_and_process функция, строка 120). За разреженные файлы, он вызывает sparse_diff_file (строка 698) в источник/sparse.c, который проверяет каждую область файла** с помощью check_sparse_region функция (строка 607), также в источник/sparse.c.

* Он делает другие вещи для других типов архивных данных, таких как каталоги

** Он проверяет каждую область так же, как проверяет весь обычный (не разреженный) файл.

Wayne_Yux avatar
флаг tr
Ух ты, он делает больше, чем я ожидал — отлично! Большое спасибо!

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.