Какой инструмент или решение для резервного копирования вы бы использовали для резервного копирования терабайт и большого количества файлов на производственном сервере Linux?
Обратите внимание, что все файлы разные и почти никогда не изменяются, а использование в основном связано с добавлением файлов, поэтому объем данных сегодня составляет 3 ТБ и постоянно растет примерно на +15 ГБ / день.
Пожалуйста, не отвечайте rsync. Базовых инструментов unix недостаточно, rsync не хранит историю, rdiff-backup время от времени терпит неудачу и портит историю. Более того, все это резервное копирование на основе файлов, которое требует много IOwait только для просмотра каталогов и запроса stat (). Но я думаю, кроме R1Soft CDP, здесь нет другого пути.
Мы попробовали резервное копирование R1Soft CDP, которое представляет собой резервное копирование на уровне блоков, и оно оказалось хорошим и эффективным для всех наших серверов, но систематически дает сбой на сервере с 3 терабайтами и миллиардами файлов. То есть уже более 2 месяцев инженеры R1Soft и датацентра играют в горячую игру ... и все еще нет резервного копирования, кроме обычного rsync
Мы никогда не пробовали большие коммерческие решения, кроме R1Soft CDP, поскольку это предоставлялось в качестве дополнительной услуги центром обработки данных, на котором размещены наши серверы.
Я пробовал много решений для резервного копирования, начиная с rsync и rdiff-backup. Также чистые сценарии tar-ing и bash. Но бакула бьет их всех. Он основан на модульной конструкции, у меня в резервной сети около 8 компьютеров, и их число постоянно растет.
Всем, кого я рекомендовал bacula, они были более чем счастливы, наконец, их дом.
Думаю, единственное решение для вас - резервное копирование на уровне блоков
Вы можете писать сценарии, использующие снимки LVM (или даже более низкого уровня dm-снимки) и передать их на сервер хранения
Вы также можете ознакомиться с Zumastor project и их ddsnap утилита
PS. На серверах Solaris / FreeBSD есть ZFS, которая может автоматизировать этот процесс с помощью инкрементные снимки + отправка / получение ZFS
Вы не говорите, что хотите подкрепить к; лента или диск? Если исходить из первого, то я поддерживаю рекомендации по бакуле. Я использую его на нескольких разных сайтах, на одном из которых у меня есть 60-слотовый двухдисковый LTO2-робот, в общей сложности 50 ТБ ленточного хранилища, распределенное по 120 лентам, и единственный самый большой сервер, имеющий около 4 ТБ диска. . Bacula очень и очень хороша, если ее правильно настроить.
Резервные копии дисков Я не могу комментировать с пользой, так как сам я твердо придерживаюсь старых магнитофонов. Поскольку вы специально упомянули ведение истории, я надеюсь, что вы открыты для резервного копирования на съемные носители (т. Е. На ленту).
Пытаться BackupPC. Для меня он очень хорошо работает с парой терабайт данных и десятками миллионов файлов (около 100 000 - 500 000 из них меняются ежедневно). ОК, BackupPC делает используйте rsync и основан на файлах, так что это может быть для вас препятствием.
Bacula - еще один популярный, и у него, безусловно, самый крутой слоган из всех. И он даже не использует rsync! :-)
В EMC Networker есть опция SnapImage, которая должна увеличить скорость резервного копирования для вашего типа данных.
Я только слышал об этом, но никогда не пробовал, извините ...
rsnapshot
или, если вы хотите большего контроля; просто взломайте короткий сценарий bash, чтобы сделать то же самое: один cp -al
, немного mv
и rsync
.
Я использую его на очень загруженном сервере 30 ТБ с примерно 5 миллионами файлов, и он прекрасно работает.
Попробуйте использовать Миррордир. С соответствующим сценарием это кажется идеальным решением для вас. Он обновляет только те файлы, которые были изменены (изменены, созданы или удалены), но также имеет возможность сохранять старые файлы. Я не уверен, как работает эта функция, но это не должно быть сложно. Вот сценарий, который я использую: (Отредактировано для ясности. Надеюсь, я не вызвал проблем с правками)
#! /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
Без изменений для фиксации (например, второй прогон) сканирование 1,5 ТБ файлов занимает около 5-7 минут. Конечно, при первом прогоне это намного медленнее.
Кстати, этот скрипт был написан мной для использования на моем домашнем сервере. Хотя любой может абсолютно бесплатно использовать или изменять его для себя, я не даю абсолютно никаких гарантий или гарантий. Это бесплатно, поэтому вы получаете то, за что платите. Надеюсь, это поможет!