Я пытаюсь создать сценарий, который создает как резервную копию снимка, так и дифференциальную резервную копию, но с жесткими ссылками вместо дублированных файлов. Другими словами:
- Все неизмененные файлы между текущей резервной копией снимка и предыдущим снимком жестко связаны, а не дублируются;
- Все файлы в дифференциальной резервной копии являются жесткими ссылками на файлы текущего снимка.
Позвольте мне попытаться уточнить. Быть:
$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?