1

В настоящее время я пишу расширенный стартовый скрипт для моего сервера Minecraft. Все работает так, как я этого хочу. Но проблема в резервных копиях. Я создал функцию для этого. Он также прекрасно работает и делает именно то, что я хочу. Но так как сервер должен быть выключен во время резервного копирования, а само резервное копирование занимает годы (я имею в виду часы), мне нужно ускорить резервное копирование!

Моя текущая резервная копия работает так:

tar -cjvf $BACKUP_PATH/$filename $MINECRAFT_PATH

Как я уже сказал, это занимает много времени!

Поэтому у меня возникла идея просто создать tar-файл без сжатия, затем запустить сервер и затем сжать архив.

tar -cvf $BACKUP_PATH/$filename $MINECRAFT_PATH
START_SERVER
bzip2 -9 $BACKUP_PATH/$filename
rm $BACKUP_PATH/$filename

Это должно работать быстрее. Но тогда у меня появилась идея. И это тот момент, когда ты мне нужен.

Сначала я хотел изменить фактическое резервное копирование таким образом, чтобы оно показывало, сколько резервных копий уже было создано, и оценило, сколько приблизительно времени потребуется для его завершения. Таким образом, вывод команды tar будет подавлен, команда будет выполняться в фоновом режиме, и цикл (while) (ожидающий завершения команды) вычислит рассчитанный процент и также рассчитает оценку оставшегося времени.

Для этого я сначала позвоню du чтобы узнать размер всех сжатых файлов. Это будет сохранено в переменной. Я бы получил текущую метку времени. Также сохраняется в переменной. В этот момент цикл начнется. Затем в цикле будет вычисляться процент и оставшееся время (просто ...), и это будет напечатано в двух строках, которые всегда обновляются. И это моя главная проблема. Я был бы очень рад, если бы кто-то мог помочь мне с петлей!

Некоторый основной код:

tar -cf $BACKUP_PATH/$filename $MINECRAFT_PATH &

backupsize=$(du -bs $MINECRAFT_PATH)
starttimestamp=$(date +%s)

# Here is the loop (how do I stay here while the tar command is still running?
# And how do i update the two lines with the newly created numbers?

START_SERVER

bzip2 -9 $BACKUP_PATH/$filename
rm $BACKUP_PATH/$filename

Если у вас хорошее настроение, вы можете помочь мне заставить такого рода вещи работать и в команде bzip . Если это невозможно, я просто оставлю это! (bzip принимает те же флаги, что и zip)

2 ответа2

3

Вы можете использовать rsync для создания резервной копии вашего $MINECRAFT_PATH . Это скопирует только те части файлов, которые были изменены с момента последнего запуска, поэтому это должно быть относительно быстро. (за исключением первого запуска, потому что тогда он должен копировать все) После завершения rsync вы можете перезапустить сервер. Затем вы используете tar для создания архива из резервной копии $MINECRAFT_PATH .

Наличие резервной копии прямо на машине также хорошо, если что-то идет не так.

Что касается сжатия, я бы рекомендовал использовать стандартное сжатие gzip вместо bzip2 . Когда я тестировал сжатие дампов ОС, размеры файлов gzip составляли около 40% от несжатого файла. Скорость сжатия составила 11,5-17,7 МБ / с. Когда я использовал bzip2 , размер сжатого файла составлял 32-38% от несжатого файла, но скорость сжатия была ниже 5,7-7,3 МБ / с. Если у вас многоядерный компьютер, вы можете попробовать pbzip2 , который использует несколько процессоров для ускорения работы. Но это, вероятно, все еще будет медленнее, чем gzip . Кроме того, использование внешней программы распаковки усложняет восстановление резервных копий.

1
  1. манипулировать экспортированной переменной BZIP2. по умолчанию bzip2 использует степень сжатия -3 или -4. установив переменную export BZIP2, вы можете сообщить bzip2, запущенному из tar (tar -j), о степени сжатия. см. на страницу http://tukaani.org/lzma/benchmarks.html
  2. попробуйте разные соотношения для оптимизации скорости. Без сжатия не лучшая скорость, потому что у вас есть ограничение аппаратной скорости. лучшее сжатие медленное, потому что использует процессор. поэтому -3 или -4 по умолчанию, но вы должны провести эксперимент. после резервного копирования вы можете перепаковать архив:

    bzip2 -d archive_after_repack.bz2, но лучше (и в разы медленнее) коэффициент сжатия, который вы используете с помощью xz archiver

  3. использование rsync - не лучшая идея, потому что у вас должна быть вторая полная копия данных.

  4. попробуйте смешать разностные и полные резервные копии. вы можете использовать опцию --newer = DATE-OR-FILE (man tar)
  5. используйте tar с --checkpoint или --checkpoint-action, это поможет вам добиться прогресса. Вы можете рассчитать это и получить оценки.
  6. если это возможно, используйте снимок файловой системы. Вы можете комбинировать это, используя lvm с ext3, ext4, jfs или xfs. Если вы можете, вы можете использовать поддержку zfs, но это официально не поддерживается. Создание снимка очень быстро. Вы не должны останавливать услуги. После моментального снимка вы заморозили компактную файловую систему, резервную копию которой вы можете создавать столько, сколько нужно. после резервного копирования вы удалите снимок.

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