У меня очень большой сервер (Minecraft), использующий десятки гигабайт файлов. Каждые два дня я делаю резервную копию, но так как сервер очень большой, мне нужно выключить его на 45 минут, пока резервная копия не будет сделана.
Если я выполняю резервное копирование во время работы сервера, папка резервной копии будет повреждена из-за того, что не все файлы были зарезервированы одновременно, и есть дублированные данные, отсутствующие данные и другие проблемы. Рекурсивное изменение папки сервера до значения 440 (только для чтения) делает сервер спамом тысячи ошибок, а иногда приводит к сбою или повреждению данных.
Я пытаюсь переключить сервер в режим «только для чтения», но разрешить ему записывать временные «журнальные» файлы, которые будут записаны в реальные файлы после завершения резервного копирования.
Возможно ли это вообще? Если да, какой инструмент я должен использовать для этого? Я думал что-то такое, переключая папку сервера на мягкую ссылку на папку или раздел, который имитирует это.
Используйте overlayfs на корне Вашего сервера (папка сервера).
Сделайте ссылку только для чтения на папку сервера, из которой можно создать резервную копию данных, в то время как реальный каталог покрыт
mkdir-p/path/to/ReadOnlyServerRoot sudo монтируются - связывают/path/to/serverRoot/path/to/ReadOnlyServerRoot-o, повторно монтируются, ro
Завершите работу сервера так, чтобы файлы и базы данных были правильно закрыты
Защитите фактический корень сервера, /path/to/serverRoot
, от записи.
sudo mount -t overlayfs overlayfs /path/to/serverRoot -o rw,uppderdir=/path/to/changes,lowerdir=/path/to/serverRoot
Измененные и недавно добавленные данные хранятся в /path/to/changes
. Когда файл изменяется, новая копия сделана на /path/to/changes/path/to/file
и этот файл обновляется.
Запустите сервер
Теперь можно скопировать данные из /path/to/ReadOnlyServerRoot
Сервер завершения работы после резервного копирования завершается
Удалите покрытие
sudo umount /path/to/serverRoot
Используйте программное обеспечение синхронизации, такое как rsync, для слияния данных изменения в файл сервера.
rsync /path/to/changes /path/to/serverRoot
rm -rf /path/to/changes
Запустите сервер
Больше информации о на опции overlayfs может быть найдено на этом ответе.
Шаги 2, 4, 6, и 9 являются дополнительными, но настоятельно рекомендованные: Во время создания и удаления наложения на папке сервера это настоятельно рекомендовано для завершения работу сервера (только секунды времени простоя) для успешного резервного копирования, поскольку сервер может кэшировать частичные данные по их памяти, и только часть данных была бы обновлена. В результате резервное копирование содержит недопустимые/неприменимые данные, которые в свою очередь приводят к потерянным данным.
переключите на файловую систему тот снимок поддержки как btrfs
или lvm
Если overlayfs не является доступным использованием aufs
или unionfs
unionfs
mount -t unionfs -o dirs=/branch_rw=rw:/branch_ro=rounionfs/union
создает Объединение в каталоге /union
с каталогами ответвления /branch_rw
(перезаписываемый) и /branch_ro
(только для чтения).
aufs
mkdir /tmp/dir1
mkdir /tmp/aufs-root
mount -t aufs -o br=/tmp/dir1:/tmp/dir2 none /tmp/aufs-root/
Первые две команды создали 2 новых каталога. mount.aufs
команда должна смонтировать файловую систему, как Объединение монтируется. Команда монтирования, указывает, что она идет в объединение, монтируются /tmp/dir1
и /tmp/dir2
под /tmp/aufs-root
. Каталог /tmp/aufs-root
будет иметь содержание обоих /tmp/dir1
и /tmp/dir2
.
Если бы Вы создали свою файловую систему с включенным Менеджером по логическому тому (LVM), то Вы могли сделать снимок файловой системы и затем скопировать тот снимок, в то время как Ваш сервер никогда не удаляется.
учебное руководство на Три страницы здесь: http://www.howtoforge.com/linux_lvm_snapshots
, Хотя это могло означать, что необходимо будет воссоздать файловую систему.