Защита важных данных, или доморощенный RAID

30.08.2013

После того, как у меня впервые "посыпался" винчестер, я на уровне чувств проникся идеей защиты наработанного тяжким трудом. Действительно, одно дело читать о безопасности и умом осознавать её необходимость, другое - прочувствовать это на собственной шкуре. Когда лихорадочно вспоминаешь, что же ещё было в тех каталогах и насколько оно было важно... Этот нехороший адреналин заставляет посмотреть на проблему резервного копирования совсем с другой точки зрения, более приземлённой.

В тот раз я отделался лёгким испугом, ничего существенного потеряно не было. Но идея построить некую удобную систему, которая может спасти самое необходимое даже в случае полного и моментального отказа жёсткого диска с тех пор надолго засела у меня в голове. Более того, мне хотелось чтобы она была переносимой, чтобы работать с одними и теми же данными можно было в разных местах. Естественно, первыми кандидатами на подобное решение выступают разноообразные облачные технологии - тот же Dropbox, например. Многие используют его именно как систему распределенных данных, а не только как систему резервного хранения.

Однако, даже если не учитывать момент неполного контроля за данными - облако ведь не собственное, остается ведь и банальный доступ в сеть. У меня на работе, например, Dropbox фильтруется прокси-сервером. И дома интернет, хоть и редко, но может отвалиться. И вообще, это я сейчас избалован качественным интернетом, появившимся в последние годы. Лет несколько назад отсутствие сети в течении нескольких дней было вполне обычным явлением. Поэтому созревший у меня вариант может быть полезен для многих.

Итак, самое простое и дешёвое решение, которое первым делом приходит в голову - использование флэшек. Флэш-память перманентно дешевеет и является относительно надёжным средством хранения информации, по крайней мере не менее надёжным, чем жёсткий диск. Конечно, скорость USB-шины не может сравниться с SATA (вариант USB 3.0 уже можно считать достойным конкурентом, однако я имею дело со старой материнской платой, на которой его нет), но с задачами чтения-записи файлов исходных текстов и прочих документов её скорости будет вполне достаточно.

Как я вижу систему? Имеем две одинаковых флэшки, в моём случае это два Verbatim Store'n GO 16Gb, одинаковые в серии, но различные по цвету. Одна из них становится "рабочей", она используется для хранения всех ведущихся проектов. При желании прямо на ней можно держать и виртуальные хосты apache, но я не чувствую в этом особой необходимости. Достаточно хранения архивов-слепков с сайта и архивов БД. При необходимости из них можно быстро развернуть разрабатываемый сайт. Также я предполагаю разместить на ней git-овское хранилище для девелоперских проектов. Эта флэшка переносная, она будет "ходить со мной" и с ней можно будет работать на разных компьютерах. Вторая флэшка - резервная. Она постоянно включена в мой домашний компьютер и регулярно синхронизируется (зеркалируется) с рабочей.

Реализовать такую схему оказалось на удивление несложно, благодаря мощному средству синхронизации rsync, включённому в любой Linux-дистрибутив, в том числе имеющееся и в моей Ubuntu 12.04. Для начала я отформатировал обе флэшки в Windows, поскольку для FAT32 родной для неё формат, а Linux замечательно с ним работает. Задал специальные метки тома для работы скрипта, STORE_0 и STORE_1. После этого они монтируются в Ubuntu при автоматическом подключении в /media/STORE_0 и /media/STORE_1 соответственно. Ещё создал для удобства символьную ссылку на /media/STORE_0 в домашний каталог под именем store, для "рабочей" флэшки. Ссылка создаётся так:

    ln -s /media/STORE_0 /home/kwoqer/store

Вот такая картинка получится в домашнем каталоге, я ещё и в закладки store добавил.

Возникает вопрос, с какой периодичностью синхронизировать основной и резервный носитель? Можно было бы запускать скрипт синхронизации по cron-у, но как выбрать время? Нельзя с точностью сказать, в какой момент мой домашний компьютер будет точно включен, он всё-же не сервер. Поэтому оптимальный момент синхронизации для меня - момент выключения компьютера. Нужно просто добавить синхронизирующий скрипт в каталог /etc/rc0.d (тут лежат скрипты уровня runlevel 0, т.е. уровня останова системы) под именем, скажем, S00rsync и перед остановкой системы флэшки отзеркалируются.

Сам скрипт выглядит тоже проще некуда:

    #!/bin/sh

    rsync -avz --delete /media/STORE_0/ /media/STORE_1 > /home/kwoqer/rsync.log

Ключ --delete нужен для того, чтобы удалённые с основного носителя файлы удалялись и на резервном. Слэш на конце пути-источника указывает, что содержимое копируется без создания родительского каталога. Лог работы скрипта я сохраняю у себя в корне домашнего каталога, в случае чего можно посмотреть какие файлы были синхронизированы в последний раз. Скрипт я назвал run_rsync.sh и положил его в стандартный для таких вещей каталог /etc/init.d, а для /etc/rc0.d сделал ещё одну символическую ссылку.

    ln -s /etc/init.d/run_rsync.sh /etc/rc0.d/S00rsync

Само собой, не забываю сделать скрипт выполняемым.

Вот и всё! Мой самодельный RAID-массив из двух флешек готов. После первых экспериментов схема показала себя вполне работоспособной. Если будут какие-нибудь усовершенствования, я о них напишу.



Добавить комментарий