2

Я хочу иметь возможность настраивать параметры rsync, которые использует Hyper Backup, когда выбран параметр Data Backup Task резервного копирования данных» > « Remote Data Copy , но параметры Hyper Backup ограничены и несколько размыты.

Версия DSM: DSM 6.0.2-8451, обновление 9

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


Что означают параметры Hyper Backup для параметров rsync?

По умолчанию

По умолчанию, когда на вкладке «Настройки» задачи не отмечена следующая опция, rsync использует эти опции:

--chmod=ugo=rwx -W -H -rlt -p --delete --exclude-from=/tmp/RSYNC_RULE_xxxxxx

Заметки:

  • любая конфигурация приведет к созданию дополнительных файлов и папок в вашем удаленном хранилище резервных копий: @app, _Syno_TaskConfig и synobkpinfo.db, управляемых Hyper Backup для собственного использования.
  • запущено много команд rsync для управления файлами Hyper Backup и проверки целостности; Параметры rsync для этих команд различаются: здесь я говорю только о параметрах, используемых при резервном копировании ваших фактических данных.
  • файл exclude-from создается временно, чтобы отразить некоторые отмеченные опции (см. ниже)

Включить трансфертное сжатие

добавляет опцию rsync: --compress

Включить резервное копирование на уровне блоков

удаляет опцию rsync: -W

Резервное копирование файлов в месте назначения

удаляет опцию rsync: --delete

Включить резервное копирование метаданных

нет модификации rsync

Создает дополнительную папку в удаленных хранилищах резервных копий: @ app/@ metadata.
Запускает больше команд rsync для управления новой папкой, которая предположительно содержит разрешения и данные о владельцах зарезервированных файлов.

Включить резервное копирование миниатюр

нет модификации rsync

Я ДУМАЮ (еще не был там), что это изменяет содержание временных файлов исключения из файлов.
Копирует папку @eaDir, присутствующую в каждой папке, содержащей изображение, @eaDir, содержащий один или несколько уменьшенных изображений, созданных DSM.

1 ответ1

0

Вот решение, к которому я пришел (по состоянию на февраль 2017 года), чтобы иметь возможность полностью настроить параметры rsync, используемые задачами Hyper Backup.

Тонкая настройка rsync DiskStation

Трудно сказать, возможна ли настройка файлов конфигурации и задач HyperBackup, но я могу прийти к выводу, что он использовал двоичный файл rsync, представленный в /usr/bin/ . Остальное - установить промежуточный скрипт, который подправляет переданные параметры.

  • подключиться к серверу DiskStation через SSH с пользователем 'admin'
  • sudo -i et введите тот же пароль, что и у пользователя 'admin'
  • mv /usr/bin/rsync /usr/bin/rsync.orig
  • touch /usr/bin/rsync
  • chmod 4755 /usr/bin/rsync
  • echo '#!/bin/sh
    exec /usr/bin/rsync.orig "$@" --option-you-want-to-add' > /usr/bin/rsync

Любое другое более мягкое решение приветствуется.

Убедиться, что модификация будет сопротивляться обновлениям

Я не уверен, управляет ли DSM исполняемым файлом системы rsync, и если да, то обновление DSM может произойти с изменением, которое мы сделали, чтобы исчезнуть в пустоте. Кто-нибудь может это подтвердить? Если это так, я бы тогда придумал сценарий, который я бы регулярно программировал через Control Panel > Task Scheduler (например, ежедневно в полночь), чтобы гарантировать, что модификация будет сохраняться после обновлений, и что обновления самого двоичного файла rsync будут учтено.

Во-первых, я бы установил в моем измененном скрипте rsync путь, по которому я смогу его развивать (если мои модификации должны со временем меняться):

/usr/local/bin/rsync_modified.sh :

#!/bin/sh

# This script is a custom modification script
# It calls the original binary rsync with modified options

# ordering to kill all child processes if receiving term signal
trap 'pkill -P $$' EXIT

# args to array
args2array () {
    for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
    echo " "
}
ARGS=$(args2array "$@")


# ...whatever modification you want to make on $ARGS...


# setting arguments again, from $ARGS
eval "set -- ${ARGS[@]}"

/usr/bin/rsync.orig "$@"

# Notes: the args2array call and the arguments setting in the end helps
# giving rsync.orig the arguments as they would be passed through direct
# call. Adding string or expanded arrays during the call of rsync.orig has
# revealed to fail in some cases, where rsync would ignore some of the
# added parameters.

тогда я бы создал этот скрипт, который я мог бы запрограммировать в запланированных задачах (с пользователем 'root')

/usr/local/bin/rsyncUpdateManager.sh :

#!/bin/sh

# Make sure the modified version of rsync is not overwritten
# and that updates of the original rsync binary are taken into account.

# init
usageFile="/usr/bin/rsync"
origFile="/usr/bin/rsync.orig"
backupFile="/usr/bin/rsync.orig"
modificationScript="/usr/local/bin/rsync_modified.sh"

# check if usage file is a binary
grep -qI . $usageFile && TYPE="TEXT" || TYPE="BINARY"
if [ $TYPE == "BINARY" ]
then

    # 1st installation or DSM updated rsync
    if [ -f $origFile ]
    then
        # a original file already exists (probably created by this script)
        # we back it up
        NOW=$(date +"%Y%m%d_%H%M%S")
        mv $origFile "${backupFile}.$NOW.bak"
    fi

    # rename binary file as original file
    mv $usageFile $origFile
fi

# copy modification script in the place of usage file
cp $modificationScript $usageFile

# giving it the same rights as original file (on DiskStation server)
chmod 4755 $usageFile

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