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

Отказоустойчивое зеркалирование tmpfs. Правильно ли я делаю?

Моя цель - сделать определенный каталог доступным как tmpfs. Во время работы сервера в этом каталоге будут внесены некоторые изменения, и эти изменения должны быть синхронизированы с постоянным каталогом, отличным от tmpfs, на жестком диске через rsync.

После загрузки сервера последнюю версию из постоянного каталога, отличного от tmpfs, необходимо переместить в tmpfs и запустить синхронизацию rsync.

Боюсь, что rsync сотрет резервную копию, не относящуюся к tmpfs, если каталог tmpfs будет пуст ..

Я сейчас так делаю:

  1. создать раздел tmpfs в / etc / fstab
  2. cat /etc/rc.local (псевдокод)

    удалите задание cron "tmpfs rsync" из / var / spool / cron / crontabs, если оно есть

    cp -r / путь / к / не-tmpfs-backup / путь / к / tmpfs / каталог

    добавьте / var / spool / cron / crontabs с помощью cronjob "tmpfs rsync"

Что вы думаете?

Я хотел просто прокомментировать отличный ответ troyengel выше, но для этого не хватает репутации на serverfault.

Одно исправление заключается в том, что между -aq и --delete должен быть пробел.

Кроме того, я создал скрипт зеркалирования, который будет проверять наличие блокировки файла на диске / tmpfs и зеркалировать с диска в RAM при первом запуске, а затем из RAM на диск:

#!/bin/sh
if [ -f /workspace/z/some/deep/location/inited ]; then
  ionice -c2 -n7 nice -n 19 rsync -aq --delete /workspace/* $HOME/workspace 1>/dev/null
else
  ionice -c2 -n0 nice -n 19 rsync -aq --delete $HOME/workspace/* /workspace 1>/dev/null
fi

Обратите внимание, что ваша блокировка должна находиться в / z / deep / location, поэтому это всегда будет последний синхронизируемый файл, чтобы предотвратить потерю данных.

Я также включил параметры nice и ionice, поэтому начальное зеркалирование имеет высокий приоритет, а зеркалирование из ОЗУ на диск - более низкий приоритет.

Если вы смелы, используйте -c1 -n7 для начального зеркалирования в реальном времени, а если вы ожидаете частого простоя, вы можете использовать ionice с -c3 и без флага -n для зеркалирования только тогда, когда диск не используется.

Я сохраняю этот сценарий в / usr / bin / Mirror и запускаю его каждые пять минут с помощью cron.

crontab -e

*/5 * * * * /usr/bin/Mirror

Это особенно полезно, если вы хотите хранить свои рабочие файлы на зашифрованном жестком диске, но работать с ними в ОЗУ.

Если вы хотите запускать зеркало при запуске и выключении системы, вы, вероятно, можете использовать / etc / inittab

id0:26:once:/usr/bin/Mirror

Создайте какой-то семенной файл глубоко в вашем каталоге, отличном от tmpfs, и только rsync обратно в не-tmpfs, если он существует (что означает, что «загрузочная» копия сработала), например:

ЗАГРУЗКА

mount /path/tmpfs
rsync -aq --delete /path/non-tmpfs/ /path/tmpfs/

CRON

if [ -f /path/tmpfs/some/deep/location/filesgood.txt ]; then
  rsync -aq --delete /path/tmpfs/ /path/non-tmpfs/
fi

Это не идеально, но, если вы улучшите это (путем поиска 5 файлов cookie во время cron, если вы хотите, например, в разных каталогах), это должно быть довольно безопасно.