Intereting Posts
Как остановить проверку файловой системы (fsck) при загрузке? Загрузка операционной системы с загрузочного дополнительного жесткого диска через VirtualBox Какие файлы журнала аудита создаются в Linux для отслеживания действий пользователей? Драйвер исчезает с dev во время копирования ddrescue или восстановления testdisk Каков наилучший способ добавить пользователя в группу sudoer? tmux сеанс, потерянный в неизвестных очках, причина и возможное решение? Еще один `rm: не может удалить ‘файл’: В доступе отказано` Настройка тайм-аута подключения полного обновления системы pacman Логротат на Busybox Есть текстовый редактор в GNU / Linux, где CTRL ++ для создания шрифта больше работает? Определение путей использования автозаполнения zsh как начать работу с сервером окон x из linux mint? Где я могу найти список кодов ошибок «make»? подстроки и регулярные выражения Плохое среднее разрешение монитора

Используйте USB для синхронизации большого каталога между двумя отключенными серверами

Я хотел бы синхронизировать большой каталог между двумя отключенными серверами с USB-устройством, которое слишком мало для хранения всего каталога. На каждом сервере имеется большая часть данных, а измененные файлы достаточно малы, чтобы поместиться на моем USB-устройстве.

Есть ли инструмент, который я могу использовать для выполнения следующих шагов?

  1. Устройство B: Вычислить и сохранить хэши из каталога D на USB-устройство
  2. Устройство A: вычислить и сравнить хеши. Добавьте несинхронизированные файлы на устройство USB и обратите внимание на удаленные файлы.
  3. Устройство B: Синхронизация изменяется с USB-устройства на D, теперь имеет ту же версию, что и Device A.

Насколько мне известно, такие инструменты, как rsync, rdiff-backup и unison, не поддерживают этого, поэтому лучшим решением для этого было бы написать несколько простых сценариев для этого.

Самый простой способ – получить перекрестный кабель и подключить две машины. 🙂 Но если вы абсолютно должны это сделать с флеш-памятью и некоторой клейкой лентой, вы можете сделать это вот так:

На машине назначения :

  • find /some/dir -type f -print0 | xargs -0 sha1sum -b | sort >dst.txt
  • скопируйте файл dst.txt на исходный компьютер

На исходном компьютере:

  • find /some/dir -type f -print0 | xargs -0 sha1sum -b | sort >src.txt
  • comm -23 src.txt dst.txt | cut -b 43- | (cd /some/dir; tar cJvf - --files-from -) | split -b 3500MB -d
  • скопируйте x* файлы по одному на машину назначения
  • rm -fx* src.txt dst.txt

На машине назначения снова:

  • cat $( ls -1 x* | sort ) | (cd /some/dir; tar xJvpf -)
  • rm -fx*

Как это должно работать:

  • файлы dst.txt и src.txt содержат SHA-1 суммы файлов на двух машинах
  • comm -23 src.txt dst.txt выбирает файлы, которые либо существуют только на исходной машине, либо существуют на обоих, но различаются
  • cut -b 43- хранит только имена файлов; это список файлов, которые необходимо скопировать
  • cd /some/dir изменяет CWD на исходный каталог
  • tar cJvpf - --files-from - создает архив группы; --files-from - считывает список файлов для архивации из stdin , f - сообщает tar для записи архива в stdout , J означает сжать архив с помощью xz , а v заставляет tar печатать список файлов, которые он архивирует, в stderr
  • split -b 3500MB -d разбивает архив на куски 3500 МБ (я предполагаю, что у вас есть флеш-память объемом 4 ГБ, и данные не будут соответствовать всем за один проход, вам может и не понадобиться делать это вообще)
  • cat $( ls -1 x* | sort ) объединяет файлы x* ; sort там, чтобы убедиться, что она делает это в правильном порядке
  • cd /some/dir изменяет CWD на целевой каталог
  • tar xJvpf - сохраняет файлы; J означает распаковать с помощью xz , p означает восстановление разрешений, v делает операцию подробным, а f - сообщает tar читать архив из stdin .

Наконец, отказ от @ Stéphane Chazelas: это предполагает, что (1) имена файлов на любом компьютере не содержат строк новой строки, и (2) каталоги для зеркал не слишком глубоки (существует ограничение на максимальную длину пути файлов в tar архивах , и он не очень высок – 200 символов IIRC).

Может tar в комбинации с -N | --newer | --after -N | --newer | --after -N | --newer | --after параметр поможет вам ?. Он позволяет создавать резервные копии всех файлов, которые были изменены с указанной даты.

Если вы создаете список файлов (используя find например) перед каждым прогоном, вы можете сравнить файлы, чтобы увидеть, какие файлы удалены. Используя этот вывод, вы можете удалить дополнительные файлы с целевого сервера.