Назад | Перейти на главную страницу

Решение для резервного копирования терабайт и множества статических файлов на сервере Linux?

Какой инструмент или решение для резервного копирования вы бы использовали для резервного копирования терабайт и большого количества файлов на производственном сервере 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 минут. Конечно, при первом прогоне это намного медленнее.

Кстати, этот скрипт был написан мной для использования на моем домашнем сервере. Хотя любой может абсолютно бесплатно использовать или изменять его для себя, я не даю абсолютно никаких гарантий или гарантий. Это бесплатно, поэтому вы получаете то, за что платите. Надеюсь, это поможет!