Использовать rsync, копировать несколько каталогов в одно и то же место; сохранить дерево

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

#!/bin/bash

date=`date "+%Y-%m-%dT%H-%M-%S"`
backup=/mnt/backup
targets="/ /data/seafile /boot /boot/efi"

mkdir -p $backup/logs 

rsync -a \
    --stats \
    --partial \
    -h \
    -H \
    -A \
    -X \
    -x \
    --log-file=$backup/logs/$date.log \
    --exclude='/media/**' --exclude='/mnt/**' --exclude='/proc/**' --exclude='/sys/**' --exclude='/tmp/**' --exclude='/run/**' --exclude='/dev/**' \
    $targets \
    --link-dest=$backup/latest \
    $backup/incomplete_$date \
    && mv $backup/incomplete_$date $backup/$date \
    && rm -f $backup/latest \
    && ln -s $backup/$date $backup/latest

Результат:

/mnt/backup/
├── 2016-05-24T16-33-08
...
├── 2016-12-01T22-04-25
├── 2016-12-05T20-29-52
├── latest -> /mnt/backup/2016-12-05T20-29-52
├── logs
└── lost+found

Пока все работало нормально , пока я не начал использовать LVM и разделил свои данные по разным точкам монтирования.Теперь содержимое этих резервных копий выглядит следующим образом:

/mnt/backup/latest
├── bin
├── boot
├── data
...
├── efi
...
├── seafile
...

На самом деле я имел в виду, что rsync копирует каждый элемент списка / / data / seafile / boot / boot / efi в нужное место в иерархии. , поэтому, например, папки должны иметь следующий вид:

/mnt/backup/latest
├── boot
│   ├── efi
...
├── data
│   └── seafile

Причина, по которой я должен указывать каждую цель, - это параметр -x . Это предотвращает пересечение rsync границы файловой системы во время рекурсии. «Простым» решением было бы:

  • удалить флаг -x
  • указать только / в качестве цели

Но это дает мне некоторые дополнительные недостатки. Например, мне пришлось бы исключить любую нежелательную точку монтирования с помощью дополнительного тега - exclude = '/ ... / **' . На данный момент это не так уж и много, но я бы предпочел отказаться от участия в программе.

0
06.12.2016, 03:52
1 ответ

Вы можете получить желаемый эффект с помощью -R (или - родственника ) флаг. Воспроизводит полный путь к источнику в месте назначения, например rsync -aR / a / b / c / dest создаст каталог / dest / a / b / c .

Ваш - link-dest должен по-прежнему работать, но только после того, как вы сделали первую новую копию, поэтому вы можете предпочесть переместить каталоги в последней резервной копии в соответствии с новой иерархией или не все будут сделаны жесткие ссылки.

2
28.01.2020, 02:47

Теги

Похожие вопросы