1

Я пытаюсь создать сценарий, который создает как резервную копию снимка, так и дифференциальную резервную копию, но с жесткими ссылками вместо дублированных файлов. Другими словами:

  • Все неизмененные файлы между текущей резервной копией снимка и предыдущим снимком жестко связаны, а не дублируются;
  • Все файлы в дифференциальной резервной копии являются жесткими ссылками на файлы текущего снимка.


Позвольте мне попытаться уточнить. Быть:

  • $SRC: исходное дерево, исходные файлы для резервного копирования
  • $PREV: резервная копия предыдущего снимка
  • $SNAPSHOT: текущая резервная копия снимка
  • $DIFF: дифференциальное резервное копирование (только измененные файлы)
  • $RF: флаги rsync, например -aPhvv


Я могу создать жесткий связанный снимок с помощью следующей команды:

rsync $RF --link-dest=$PREV $SRC $SNAPSHOT

Это прекрасно работает.


Теперь я хочу создать другое дерево, $DIFF , только с различиями между $SNAPSHOT и $PREV .

Я могу сделать это с помощью следующей команды:

rsync $RF --compare-dest=$PREV $SNAPSHOT $DIFF

Это также отлично работает и очень близко к тому, чего я хочу достичь. Единственная проблема состоит в том, что все файлы, которые изменились между $PREV и $SNAPSHOT , теперь дублируются на $DIFF , я хотел бы, чтобы они были жесткими ссылками на $SNAPTSHOT вместо простых копий.


С точки зрения rsync я хочу сделать следующее: после создания снимка он становится моим новым исходным деревом, $SNAPSHOT . Пункт назначения - $DIFF . Основой сравнения с источником является $PREV , поэтому аргумент --compare-dest=$PREV должен позаботиться об этом. Это, как и предыдущая команда, будет копировать только файлы, измененные между предыдущим снимком и текущим снимком. Теперь, чтобы файлы были скопированы, я хочу, чтобы они сначала сравнивались с файлами в $ SNAPSHOT, а затем, если они есть, связывались с ними, а не копировали. Это то, что --link-dest=$SNAPSHOT , и это тоже работает. Обе опции работают хорошо по отдельности, compare-dest создает разностную копию, а link-dest создает связанное дерево, но я хочу смешать обе, как описано выше, что rsync не разрешает.

Если rsync разрешил, это то, что я хотел сделать:

# Create the snapshot backup:
myhost:~$ rsync $RF --link-dest=$PREV $SRC $SNAPSHOT
     // successful. output suppressed...

# Try to create the hard linked differential backup:
myhost:~$ rsync $RF --compare-dest=$PREV --link-dest=$SNAPSHOT $SNAPSHOT $DIFF
rsync: You may not mix --compare-dest, --copy-dest, and --link-dest.
rsync error: syntax or usage error (code 1) at main.c(1567) [client=3.1.2]


Есть идеи, как создать дерево $DIFF , чтобы все файлы в этом дереве были жесткими ссылками на $SNAPSHOT ? Или другие предложения о том, как достичь моих целей с другими командами Linux?

1 ответ1

0

Вы можете сделать это, создав $DIFF и $SNAPSHOT в обратном порядке. Первый забег

rsync $RF --compare-dest=$PREV $SRC $DIFF

Затем создайте жесткую копию предыдущей резервной копии:

cp -al $PREV $SNAPSHOT

Наконец, Hardlink скопировать изменения туда:

cp -al $DIFF $SNAPSHOT

Примечание: я на самом деле не проверял это, поэтому не могу гарантировать, что это работает.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .