Tente usar o mirrordir . Com um roteiro apropriado, parece ser a solução ideal para você. Ele apenas atualiza os arquivos que foram alterados (modificados, criados ou excluídos), mas também tem a capacidade de preservar arquivos antigos. Não tenho certeza de como essa função funciona, mas não deve ser difícil. Aqui está o script que eu uso: (Editado um pouco para maior clareza. Espero não ter problemas com as edições)
#! /bin/bash
logfile="/home/share/Backup-log.txt"
echo "" | unix2dos >> $logfile
echo 'date'" /bin/mirror_backup started" | unix2dos >> $logfile
echo ""
echo ""
echo "mirror_backup Automatically archive a list of"
echo " directories to a storage location"
# Mount mirror drive
mount -o remount,rw /mirror
xstatus=$?
if [ $xstatus -ne 0 ]
then
mount -o remount,rw /mirror 2>&1 | unix2dos >> $logfile
echo 'date'" Mount failed, aborting /bin/mirror_backup..." 1>&2
echo 'date'" Mount failed, aborting /bin/mirror_backup..." | unix2dos >> $logfile
mount -o remount,ro /mirror 2>> /dev/null
exit $xstatus
fi
# Define Source Directories
sourcelist="/home /etc /root"
dest="/mirror"
for dir in $sourcelist
do
if [ ! -d ${dest}${dir} ]
then
mkdir -p ${dest}${dir} 2>&1 | unix2dos >> $logfile
# chown mirror:mirror ${dest}${dir}
fi
done
# Mirror directories
for dir in $sourcelist
do
# Delete old files
echo ""
echo "Deleting old files in "${dest}${dir}
mirrordir --nice 0 --exclude-from /root/exclude-list --only-delete ${dir} ${dest}${dir} 2>> /dev/null
# Run full mirror
echo "Mirroring "${dir}" to "${dest}${dir}
mirrordir --nice 0 --restore-access --access-times --exclude-from /root/exclude-list ${dir} ${dest}${dir} 2>&1 | unix2dos >> $logfile
done
# Perform miscellaneous tasks
report="/home/share/disk-report.txt"
echo "Report generated on "'date' | unix2dos > $report
echo "" | unix2dos >> $report
echo "RAID drive status:" | unix2dos >> $report
cat /proc/mdstat | unix2dos >> $report
echo "" | unix2dos >> $report
echo "Disk usage per slice:" | unix2dos >> $report
df -h | unix2dos >> $report
echo "" | unix2dos >> $report
echo "Disk Usage per User:" | unix2dos >> $report
du -h --max-depth 1 /home | unix2dos >> $report
echo "" | unix2dos >> $report
echo "Disk Usage on Share drive:" | unix2dos >> $report
du -h --max-depth 1 /home/share | unix2dos >> $report
echo "" | unix2dos >> $report
echo "Filesystem Usage Overview:" | unix2dos >> $report
du -h --max-depth 1 / | unix2dos >> $report
echo "" | unix2dos >> $report
echo "Report Complete" | unix2dos >> $report
echo ""
echo "mirror_backup complete."
# Unmount Mirror Drive
mount -o remount,ro /mirror 2>&1 | unix2dos 2>> $logfile
echo 'date'" /bin/mirror_backup completed successfully" | unix2dos >> $logfile
exit 0
Sem alterações no commit (segundo run-through, por exemplo), leva cerca de 5-7 minutos para varrer 1,5 TB de arquivos. Claro, é muito mais lento na primeira execução.
A propósito, este script foi escrito por mim para meu uso no meu servidor pessoal em casa. Enquanto alguém é absolutamente livre para usá-lo ou modificá-lo por si mesmo, eu não estou fazendo absolutamente nenhuma garantia ou garantia. É grátis, então você recebe o que você paga. Espero que ajude, no entanto!