Вопрос: Справка с rsync исключает нерабочие


Я пытаюсь настроить rsync, чтобы сохранить изображение на моем внешнем приводе. У меня есть 4 раздела для работы с: /, / boot, / home, / usr. Я хочу поочередно монтировать каждый из них и синхронизировать их с внутренним диском. Одна из проблем, с которой я сталкиваюсь, заключается в том, что исключенные файлы не исключаются. Я экспериментировал с несколькими шаблонами, но ни один из них не обманул. Я устанавливаю шаблон исключения относительно источника, но он не работает.

Этот фрагмент журнала / home / sync показывает, что исключенные файлы копируются:


    --begin snippet--
    backing up /home/ via rsync to: /media/Ubuntu_Backup...
    sudo rsync -a -x -i -h -v -A -X -H --delete --inplace --numeric-ids --compare-dest=./ -n --exclude='*/lost+found/**' --exclude='*/Downloads/**' --exclude='*/.cache/**' --exclude='*/.thumbnails' --exclude='*/.mozilla/firefox/*.default/Cache' /home/ /media/Ubuntu_Backup
    sending incremental file list
    .d..t...... kmiller/
    >f..t...... kmiller/.vim_mru_files
    >f.st...... kmiller/.viminfo
    >f.st...... kmiller/.zsh_history
    >f.st...... kmiller/backup.log
    >f.st...... kmiller/cron.log
    .d..t...... kmiller/.cache/google-chrome-beta/Default/Cache/
    *deleting   kmiller/.cache/google-chrome-beta/Default/Cache/f_000806
    >f..t...... kmiller/.cache/google-chrome-beta/Default/Cache/data_0
    >f..t...... kmiller/.cache/google-chrome-beta/Default/Cache/data_1
    >f..t...... kmiller/.cache/google-chrome-beta/Default/Cache/data_2
    >f..t...... kmiller/.cache/google-chrome-beta/Default/Cache/data_3
    >f+++++++++ kmiller/.cache/google-chrome-beta/Default/Cache/f_00080a
    >f+++++++++ kmiller/.cache/google-chrome-beta/Default/Cache/f_00080b
    >f+++++++++ kmiller/.cache/google-chrome-beta/Default/Cache/f_00080c
    >f+++++++++ kmiller/.cache/google-chrome-beta/Default/Cache/f_00080d
    >f+++++++++ kmiller/.cache/google-chrome-beta/Default/Cache/f_00080e
    --end of snippet--

Другая проблема, с которой я столкнулся, заключается в том, что rsync создавал структуру дубликатов каталогов в пределах целевого ребра, то есть a / usr / dir внутри / usr на цели. --compare-dest =. /, казалось, прекратил это, но я не совсем понимаю почему.

Это сценарий, который я разрабатываю, чтобы выполнить эту работу:


#!/usr/bin/zsh
typeset -A FILESYSTEMS
typeset -A NAMES

MOUNTPOINT='/media/Ubuntu_Backup'
LOGFILE='/home/kmiller/backup.log'

OPTIONS=('-a') #archive
OPTIONS+=('-x') #don't cross file system boundaries
OPTIONS+=('-i') #itemize changes
OPTIONS+=('-h') #human readable output
OPTIONS+=('-v') #verbose
OPTIONS+=('-A') #preserve ACLS
OPTIONS+=('-X') #preserve extended attributes
OPTIONS+=('-H') #preserve hard links
OPTIONS+=('--delete') #delete extraneous
OPTIONS+=('--inplace') #update files directly (faster - no building temp copies)
OPTIONS+=('--numeric-ids') #no translation of UID,GID - needed for proper restores
OPTIONS+=('--compare-dest=./') #
OPTIONS+=('-n') #dry run

FILESYSTEMS=('/' '/dev/sdb6')
FILESYSTEMS+=('/boot/' '/dev/sdb1')
FILESYSTEMS+=('/usr/' '/dev/sdb8')
FILESYSTEMS+=('/home/' '/dev/sdb7')

ROOTEXCLUDES=("--exclude='boot/*'")
ROOTEXCLUDES+=("--exclude='usr/*'")
ROOTEXCLUDES+=("--exclude='home/*'")
ROOTEXCLUDES+=("--exclude='dev/*'")
ROOTEXCLUDES+=("--exclude='proc/*'")
ROOTEXCLUDES+=("--exclude='sys/*'")
ROOTEXCLUDES+=("--exclude='tmp/*'")
ROOTEXCLUDES+=("--exclude='run/*'")
ROOTEXCLUDES+=("--exclude='mnt/*'")
ROOTEXCLUDES+=("--exclude='media/*'")
ROOTEXCLUDES+=("--exclude='lost+found/*'")
ROOTEXCLUDES+=("--exclude='etc/fstab'")

BOOTEXCLUDES=("--exclude='lost+found/*'")
BOOTEXCLUDES+=("--exclude='grub/grub.cfg'")

USREXCLUDES=("--exclude='lost+found/*'")

HOMEEXCLUDES=("--exclude='*/lost+found/*'")
HOMEEXCLUDES+=("--exclude='*/Downloads/*'")
HOMEEXCLUDES+=("--exclude='*/.cache'")
HOMEEXCLUDES+=("--exclude='*/.thumbnails'")

NAMES=('/' 'ROOT' '/boot/' 'BOOT' '/usr/' 'USR' '/home/' 'HOME')

is_mounted () {
    mount | grep "$1" || return 1
    return 0
}

if [[ ! -d $MOUNTPOINT ]];then
    echo "creating $MOUNTPOINT..."
    sudo mkdir $MOUNTPOINT || {echo "$0 failed - Problem creating mount dir: $MOUNTPOINT" && exit;}
fi

rm -rf $LOGFILE

#unmount any target backup partitons if they happen to be mounted
for FS in ${(k)FILESYSTEMS};do
    if is_mounted ${FILESYSTEMS[$FS]};then
        sudo umount ${FILESYSTEMS[$FS]} || {echo "$0 - Problem unmounting: $MOUNTPOINT" && exit;}
    fi
done

echo -e "\nStarting partition backups..."
for FS in ${(k)FILESYSTEMS};do
    EXCLUDES=$(eval echo \$${NAMES[${FS}]}EXCLUDES)
    echo "-------------------------------------------------------"
    echo "mounting ${FS} partition: ${FILESYSTEMS[$FS]}..."
    sudo mount ${FILESYSTEMS[$FS]} $MOUNTPOINT || {echo "$0 - Problem mounting: ${FILESYSTEMS[$FS]} $MOUNTPOINT" && exit;}
    echo "backing up ${FS} via rsync to: $MOUNTPOINT..." | tee -a $LOGFILE 2>&1
    echo "sudo rsync ${OPTIONS} ${EXCLUDES} ${FS} /media/Ubuntu_Backup" >> ${LOGFILE} 2>&1
    eval sudo rsync ${OPTIONS} ${EXCLUDES} ${FS} /media/Ubuntu_Backup >> ${LOGFILE} 2>&1 || {echo -e "WARNING: rsync returned an error: $rc\nSee backup.out for details!" && exit;}
    df ${FILESYSTEMS[$FS]} | tee -a $LOGFILE 2>&1
    echo "unmounting ${FILESYSTEMS[$FS]}"
    sleep 2
    sudo umount ${FILESYSTEMS[$FS]} || {echo "$0 failed - Problem unmounting partition: ${FILESYSTEMS[$FS]}" && exit;}
done
echo -e "Finished partition backups...\n"

Любые советы / идеи приветствуются ...


0
2018-01-25 21:38


Источник




Ответы:


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


1
2018-01-26 17:32