1.2. Организация несинхронного резервного копирования данных

1.2.1. Технические вопросы

Что следует копировать? Для простого пользователя, который имеет обычный акаунт на машину под управлением Линукс, в первую очередь всю свою домашнюю директорию, поскольку именно она содержит данные, которые невозможно восстановить при утере. В этом случае резервные копии легко организовать посредством любой из описанных ниже команд (утилит):

  • cp, scp, sftp — (см. соответственно http://ru.wikipedia.org/wiki/Cp, http://ru.wikipedia.org/wiki/SCP, http://ru.wikipedia.org/wiki/SFTP) простые команды копирования файлов, указанные файлы копируются без изменений в пределах того же компьютера (cp) или на другом компьютере (scp, sftp);

  • rsync — (см. http://ru.wikipedia.org/wiki/Rsync) команда (утилита) синхронизации содержания файлов в директории на разных компьютерах;

  • cpio — (см. http://ru.wikipedia.org/wiki/Cpio) команда (утилита) архивирования файлов, чьи имена вводятся с устройства стандартного ввода, исторически одна из старых архивных утилит, однако может распаковать архив, созданный другой архивной утилитой tar;

  • tar — (см. http://ru.wikipedia.org/wiki/Tar) команда (утилита) архивирования файлов, более современная и продвинутая, чем cpio;

  • dd — (см. http://ru.wikipedia.org/wiki/Dd) команда (утилита) копирования/преобразования файлов, например, можно перекодировать текстовые файлы из кода EBCDIC в код ASCII и обратно (правда, кириллицу следует проверять на возможности перекодировки отдельно);

  • dump/restore — (см. http://ru.wikipedia.org/wiki/Dump_(Unix)) пара утилит для копирования (dump) и восстановления (restore) файловых систем типа ext2/ext3;

  • pax — (см. http://en.wikipedia.org/wiki/Pax_(Unix)) команда (утилита) для копирования и восстановления файлов, а также копирования иерархии директорий. Эта команда «понимает» несколько различных форматов архивов: tar, cpio, а также ряд других форматов.

Рассмотрим чуть подробнее более сложные команды (утилиты): rsync, cpio, tar, dd, dump-restore.

1.2.1.1. Команда rsync

Команда (утилита) rsync используется для пересылки по сети файлов и директорий с одного компьютера на другой. Важным свойством rsync, отличающим эту команду от других подобных ей, является то, что она пересылает не весь файл целиком, а только ту ее часть, которая отличает версию файла на принимающем компьютере от версии на передающем компьютере. Тем самым значительно сокращается время копирования данных. Утилита rsync использует метод, который заключается в разбиении файла на куски фиксированной длины, вычислении контрольных сумм этих кусков и сравнении контрольных сумм на принимающем компьютере с контрольными суммами на передающем компьютере. Передаются только куски (части файлов) с разными контрольными суммами. Эту команду можно использовать для зеркалирования данных, а также для создания резервной копии данных. Приведем примеры использования rsync.

Пусть имеется сервер локальный_хост. Необходимо выполнить резервное копирование директории /ваш_каталог с удаленного компьютера удалённый_хост. Командой rsync, выполненной на сервере локальный_хост, можно пересылать эту директорию на сервер:

rsync -a -e ssh --numeric-ids --delete   \
удалённый_хост:/ваш_каталог /локальный_хост

Данные будут записаны в директорию /локальный_хост/ваш_каталог на сервере локальный_хост.

Здесь параметры означают следующее:

  •  — архивная мода, что означает рекурсию, сохранение линков, сохранение времени создания файла, сохранения прав доступа к файлу, сохранения пользователя и группы файла, сохранения файла устройства;

  • -e ssh — использовать ssh в качестве удаленной оболочки;

  • --numeric-ids — сохранить идентификаторы пользователя и группы удаленного компьютера в цифровом виде. Это нужно, чтобы правильно восстановить владельца и группу файла в случае необходимости восстановления файла. Этот параметр работает только в случае, когда принимающая программа выполняется под root. В противном случае файлам присваивается владелец и группа пользователя, под которым выполняется принимающая программа;

  • --delete — удалить копии всех файлов на сервере, которые были удалены на удаленном компьютере, чтобы иметь точную копию директории /ваш_каталог.

В дополнение можно использовать ключ -z, который приведёт к сжатию информации перед передачей на удалённый хост. При всей полезности сжатия информации перед передачей по сети и дальнейшему хранению на удалённом компьютере необходимо иметь в виду, что на сжатие потребуется время процессора. Если процессор не слишком мощный, то это время может оказаться совсем не маленьким.

В заключение добавим, что утилита rsync является весьма нетривиальной программой с массой полезных для резервного копирования свойств. Оригинальный источник программы: http://rsync.samba.org/.

1.2.1.2. Команда cpio

Команда cpio -o (архивирование) читает со стандартного ввода список маршрутных имен и копирует эти файлы на стандартный вывод вместе с маршрутными именами и информацией о файлах.

Команда cpio -i (извлечение) выделяет отдельные файлы из стандартного ввода, который, как предполагается, является результатом работы cpio -o. Извлекаются только файлы, имена которых соответствуют хотя бы одному из указанных шаблонов, построенных по принятым в оболочке правилам для генерации имен файлов. Символу / могут соответствовать в шаблоне метасимволы ?, *, и [...]. Может быть указано несколько шаблонов, а если не указано ни одного, то по умолчанию шаблоном будет * (то есть будут извлечены все файлы). Каждый шаблон должен быть окружен двойными кавычками. Извлекаемые файлы создаются и копируются в текущее дерево каталогов в соответствии с описанными ниже опциями. Режим доступа к файлу будет тем же, что при выполнении команды cpio -o. Владелец файла и группа будут взяты у текущего пользователя, если он не суперпользователь, в противном случае cpio сохранит владельца и группу файла, которые он имел при выполнении команды cpio -o.

Если команда cpio -i пытается создать уже существующий файл, и время последней модификации у извлекаемого файла то же самое или более раннее, чем у существующего, то cpio выдает предупреждение и не изменяет существующий файл. (Используя опцию -u, можно добиться безусловной замены существующего файла, без учета времени последней модификации.)

Команда cpio -p (копирование) читает со стандартного ввода список маршрутных имен и, в соответствии с опциями командной строки, копирует заданные файлы в дерево каталогов с указанным корневым каталогом.

Ещё пример:

find /home/ | cpio -o > /backup/home-backup.cpio

Здесь копируются файлы из директории /home в файл home-backup.cpio. Поскольку команда find имеет массу параметров для выбора файлов, то в следующем примере мы копируем только файлы, к которым не было обращения за последний год:

find /home/ -atime +365 | cpio -o > /backup/home-backup.cpio

1.2.1.3. Команда tar

tar — это старая команда Unix, которая была перенесена в Linux, tar — это аббревиатура tape archive, изначально эта команда была предназначена для архивирования файлов на магнитную ленту. Указанные в команде файлы последовательно выводятся на выводное устройство в виде непрерывного файла. Команда tar имеет много параметров, которые могут помочь выбрать множество файлов, которые следует скопировать. Полное описание программы tar занимает примерно 230 страниц формата А4 (см. http://www.gnu.org/software/tar/manual/tar.pdf). См. также http://ru.wikipedia.org/wiki/Tar. Имеется более чем один вариант программы tar, в данном документе мы будем рассматривать только GNU tar, который является фактическим стандартом для Линукс. Тем не менее, упомянем ещё один популярный вариант этой утилиты — BSD tar (см. http://code.google.com/p/libarchive/) — это весьма продвинутый продолжающийся проект, посвящённый развитию различных аспектов архивирования/сжатия файлов. В частности BSD tar позволяет опознать и разархивировать почти любые популярные архивы, а также файлы типа *.iso. Но вернёмся к GNU tar.

Поскольку команда tar является архивной системой, она может выполнять стандартные для архиваторов операции:

  • создание архива;

  • добавление файлов в архив;

  • извлечение файлов из архива;

  • уплотнение (сжатие как уменьшение физического размера) файла архива.

Несколько примеров:

tar -cf новый_архив.tar ваша_директория

Будет создан новый архив с именем файла новый_архив, куда будут помещены все файлы из директории ваша_директория.

tar -czf новый_архив.tar ваша_директория

Создать новый архив с именем новый_архив.tar и произвести уплотнение утилитой gzip.

tar -uf существующий_архив.tar ваша_директория

К существующему архиву с именем существующий_архив.tar будут добавлены те файлы из директории ваша_директория, которые новее, чем файлы с теми же именами в архиве существующий_архив.tar. При этом более новый вариант имеющегося в архиве файла будет дописан в конец архива. Иными словами, в архиве окажется два или более варианта файла с одним и тем же именем, например, ваш_файл. В данном примере файлы в архиве имеют имена вида ваша_директория/ваш_файл.

tar -xf существующий_архив.tar ваша_директория/ваш_файл

По этой команде будет восстановлен файл с именем ваш_файл в директорию ваша_директория. Если директория ваша_директория не существует, то она будет создана. Если в архиве существующий_архив.tar имеется несколько вариантов файлов с именем ваша_директория/ваш_файл, то будет восстановлен вариант файла ваша_директория/ваш_файл, записанный в архив последним.

tar -xf существующий_архив.tar

Будут восстановлены все файлы из архива существующий_архив.tar. Если каких-то директорий, которые имеются в архиве, не существует, то они будут созданы при восстановлении.

tar -xkf существующий_архив.tar

По этой команде будет восстановлен весь архив, однако если уже существуют файлы с теми же именами, что и в архиве, но более свежие, чем в архиве, то они будут сохранены, т.е. не будут восстанавливаться из архива существующий_архив.tar.

Ещё пример:

tar -xzf существующий_архив.tar.gz

Произвести разуплотнение (операция обратная уплотнению) и восстановить все файлы из архива существующий_архив.tar.gz.

Обратим внимание на суффиксы: здесь используется суффикс tar.gz, который означает, что имеется в виду архив в формате утилиты tar, который сжат утилитой gzip. Аналогичный смысл имеет суффикс tgz.

Поскольку команда tar может архивировать целые деревья каталогов, она очевидно подходит для создания резервных копий. В дополнение, эта команда акуратно работает с мягкими линками (soft link, символические ссылки), что особенно важно для сохранения исходной структуры дерева файлов при восстановлении. Восстановление можно выполнять для архивов целиком, либо для отдельных файлов и директорий. Резервные копии могут размещаться, вообще говоря, где угодно, в том числе и на магнитной ленте. При восстановлении файлы могут быть перенаправлены и размещены в каталоге (или системе), отличном от того, с которого были сохранены. Команда tar не зависит от файловой системы. Она может использоваться в файловых системах ext2, ext3, jfs, Reiser, xfs и т.д.

Программа tar позволяет использовать несколько механизмов уплотнения:

  • gzip

  • bzip2

  • compress

Используя tar, можно создать на магнитной ленте резервную копию всей системы, кроме каталога /proc, командой

tar zcpf /dev/st0 / --exclude=/proc

Т.е. архивировать все файлы, начиная с директории / (с корневой директории системы), исключая директорию /proc, и уплотнять результирующий файл в соответствии с алгоритмом gzip.

В приведенном выше примере, ключ c указывает на то, что создается архив. Ключ p нужен для того, чтобы сохранить права доступа для файлов, что является необходимым условием для хорошего резервного копирования. Ключ f указывает на имя файла для архива. В данном случае мы используем накопитель на магнитной ленте /dev/st0. Поскольку в нашем случае это вся файловая система, то указан корневой каталог. При ссылке на каталог (в конце которого стоит символ /) tar автоматически рекурсивно обходит все подкаталоги. И, наконец, мы исключаем каталог /proc, поскольку он не содержит ничего ценного для нас. Если резервная копия не умещается на одной магнитной ленте, то мы добавим ключ M (в примере не показан) — указание на многотомный архив.

Чтобы восстановить файл или файлы, команда tar используется с ключом extract (x):

tar zxpf /dev/st0 -C /

Ключ f снова ссылается на ленточный файл, а p указывает на то, что мы хотим восстановить ранее архивированные данные, сохранив права доступа. Ключ x указывает на восстановление из архива. Ключ -C / указывает на то, что восстановление должно производится в корневой каталог. Команда tar по умолчанию восстанавливает архив в тот каталог, из которого была запущена. Ключ -C запрещает восстановление в текущий каталог.

Два других варианта использования команды tar — это использование ключей t и d. Ключ t выводит оглавление архива (список файлов). Ключ d (--diff, --compare) указывает программе tar найти отличия между архивом и файловой системой.

1.2.1.4. Команда dd

Команда dd выполняет чтение входного потока (со стандартного устройства ввода или из указанного файла) и помещает его (с возможной перекодировкой) в выходной поток (стандартное устройство вывода или указанный выводной файл). Параметры команды позволяют пропустить заданное число блоков/байтов во вводном файле и/или пропустить заданное число блоков/байтов в выходном файле. Например,

dd bs=4k skip=1 count=10 if=/dev/sda1 /dev/mt1

В команде устанавливается размер входного выходного блока равным 4 Кбайта; пропускается первый вводной блок размером 4 Кбайта; общее количество перезаписываемых блоков устанавливается равным 10. Похожие действия можно переписать в другой форме

(dd bs=4k skip=1 count=0 && dd bs=512k) </dev/sda1 >/dev/mt1

Здесь во вводном файле пропускается один блок размером 4 Кбайта. Если пропуск блока выполнен успешно, то далее из вводного файла читаются блоки размером 512 Кбайт и выводятся на магнитофон (устройство /dev/mt1). Операция копирования продолжается до достижения конца файла во вводном файле.

Эта команда позволяет скопировать весь дисковый раздел или весь жесткий диск, например, на магнитную ленту или в файл на другом жестком диске. Частым примером использования этой команды является копирование файлов типа *.iso. Важным отличием этой команды от прочих команд копирования является тот факт, что dd не обращает внимания на файловую структуру. Например, если задано

dd skip=1 && dd if=/dev/sda1 of=/dev/sdb1 count=10

т.е копирование с диска /dev/sda1 на диск /dev/sdb1 пропустить 1 (одну) запись на вводе с /dev/sda1 прочитать 10 (десять) записей с /dev/sda1 и записать 10 (десять) записей на /dev/sdb1, то это будет выполнено несмотря ни на какие границы файлов. Естественно, предполагается, что тот, кто инициирует такое копирование данных понимает, что он делает.

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

dd if=/dev/sda of=/dev/sdc

где устройство /dev/sda содержит сформированную операционную среду, устройство /dev/sdc является пустым жёстким диском такого же размера (или больше). После успешного выполнения команды вновь записанный жёсткий диск можно использовать как контрольный диск с системой и переписывать с него на другую машину (предварительно установив его в машину) контрольный вариант сформированной операционной среды.

1.2.1.5. Команды dump/restore

Команда dump была предназначена первоначально для копирования файловых систем ext2/ext3[1] на другой диск, магнитную ленту или другой носитель. Причем каждая файловая система копируется отдельной командой dump. Если размер носителя меньше копируемых данных, то dump разбивает копируемые данные на тома, чтобы каждый том помещался на одном носителе. Имеется возможность делать удаленное копирование по сети на магнитную ленту, подключенную к другому компьютеру с использованием команды rmt. В этом случае адрес ленты будет иметь вид удаленный_компьютер:удаленный_адрес_ленты. Команда dump может делать как полную копию файловой системы, так и инкрементальную копию, то есть копию последних изменений относительно полной копии и/или относительно предыдущей инкрементальной копии. Уровни копирования нумеруются от 0 до 9. Уровень 0 означает копирование всей файловой системы, уровни 1-9 означают копирование последних изменений относительно уровня с меньшим номером. Например, уровень 2 будет копировать все, что изменилось с уровня 1 и т.д. Чтобы упростить восстановление, можно использовать простую схему копирования, после полного копирования использовать каждый день только уровень 9. Тогда при восстановлении достаточно восстановить уровень 0 и последнюю копию уровня 9. Можно исключить отдельные файлы или директории из копирования либо указав список i-node для них, либо пометить их командой

chattr +d <имя файла/директории>

Для восстановления данных, скопированных командой dump, используется команда restore. Для восстановления всей файловой системы используется режим rebuild (-r), который предполагает наличие пустой форматированной файловой системы, куда будет осуществляться восстановление. Если надо восстановить отдельные файлы или директории, то используется режим extract (-x) или интерактивный режим interactive (-i). При помощи команд интерактивного режима задаются файлы и директории, которые нужно восстановить. Нужно иметь ввиду, что файлы будут восстанавливаться в вашу текущую директорию.

Пример использования dump:

Сделать полную копию, уровень 0, файловой системы /home на магнитную ленту /dev/nst0l с автоматическим обнаружением конца ленты:

dump 0auf /dev/nst0l /home

И каждую ночь делать инкрементальную копию с уровнем 9:

dump 9auf /dev/nst0l /home

Для полной копии и инкрементальных копий используются разные ленты.

Пример использования restore:

Восстановить директорию /home/пользователь c магнитной ленты /dev/st0l. Полная копия находится на ленте в 1-м файле, а инкрементальная копия в 5-м файле:

cd /home/пользователь

Вначале восстановить с полной копии:

restore -x -s 1 -f /dev/nst0l /home/пользователь

Затем восстановить с последней инкрементальной копии:

restore -x -s 5 -f  /dev/nst0l /home/пользователь

В заключение рассуждения по поводу dump/restore можно заметить, что этот способ копирования имеет ряд ограничений, в частности, тип файловой системы (ext2/ext3). Для других файловых систем, например xfs, могут иметься версии обсуждаемых утилит, но факт наличия таковых версий на конкретном компьютере следует проверять специально. Имеются сведения, что ранее не со всеми версиями ядер Linux (2.4) эта пара программ для копирования/восстановления работала надёжно (см. http://www.redhat.com/docs/manuals/linux/RHL-9-Manual/admin-primer/s1-disaster-rhlspec.html). В связи с этим надёжнее перед копированием файловой системы размонтировать её (файловую систему). Итак, надёжный способ копирования файловой системы приведён ниже.

  • Размонтировать файловую систему, которая запланирована к копированию, командой

    umount корневая_директория_файловой_системы

    если команда umount завершилась неуспешно, то следует завершить все процессы в системе, которые потенциально могут использовать эту файловую систему;

  • Выполнить копирование всей файловой системы на магнитную ленту /dev/nst01 командой

    dump 0auf /dev/nst0l корневая_директория_файловой_системы

Аналогичным образом следует поступать при восстановлении файловой системы. В заключение данного раздела рассмотрим случай, когда необходимо скопировать файловую систему, которую нет возможности размонтировать по любым причинам. В этом случае необходимо выполнить завершение работы системы командой

shutdown -h now

После завершения работы системы следует загрузиться с CD диска или DVD диска (или с USB устройства) с подготовленной заранее версией Linux Live (версия операционной системы, которой не требуется жёсткий диск). Затем следует выполнить копирование необходимых файловых систем, т.е. фактически разделов жёсткого диска (или дисков) в рамках вновь загруженной версии Linux Live.

1.2.1.6. Команда (утилита) pax

Команда pax производит архивирование и разархивирование файлов. Если не задан тип архива при его создании, то по умолчанию используется расширенный формат tar. Например, командная строка

find . -depth -print | pax -wd > archive.tar
производит поиск файлов, передачу имён найденных файлов в выходной поток, который является одновременно входным потоком для команды pax, которая формирует архив типа tar.

Ещё несколько примеров:

pax -w -f /dev/rst0

копировать все файлы текущей директории и нижележащих директорий на устройство /dev/rst0 (магнитная лента). Заметим попутно, что можно с таким же успехом копировать и в файл на другом диске.

mkdir newdir; cd olddir; pax -rw . newdir

т.е. создать новую директорию newdir, скопировать из старой директории olddir все файлы и всю нижележащую иерархию директорий с файлами в новую директорию newdir.

pax -r -s ',^//*usr//*,,' -f a.pax

т.е. из архива a.pax прочесть файлы (и нижележащие директории) из директории /usr и записать всё это в текущую директорию.

pax -rw -i . dest_dir

т.е. в интерактивном режиме выбрать файлы из текущей директории и записать в директорию dest_dir.

pax -r -pe -U root -G bin -f a.pax

из архива a.pax извлечь и записать в текущую директорию все файлы, принадлежащие пользователю root имеющие группу bin, c сохранением прав доступа.

pax -r -w -v -Y -Z home /backup

обновить и перечислить только те файлы в директории /backup, которые являются более старыми по сравнению с файлами с такими же именами в директории home.

1.2.2. Какие типы файлов имеет смысл копировать

Заметим далее, не все типы файлов имеет смысл копировать. Например, файлы баз данных, которые порождаются Системой Управления Базой Данных (СУБД), к примеру, PostgeSQL, правильнее копировать средствами самой СУБД. В каких-то СУБД запросто может оказаться, что управляющая информация о распределении данных привязана к физическим адресам и параметрам жёсткого диска с целью оптимизации доступа к данным. По этой причине простое копирование данных не сможет гарантировать работоспособность базы данных после восстановления. То же самое можно отнести к ряду систем управления сайтами и других. Обратим также внимание на директории, которые имеет смысл копировать. Интуитивно понятно, что следует копировать пользовательские директории, где владельцами акаунтов являются живые пользователи (не специальные программы или демоны). Возможно имеет смысл копировать некоторые системные директории:

  • /etc/ — здесь хранятся системные конфигурационные файлы;

  • /usr/local — здесь хранятся программы, которые вы сами установили на данном компьютере;

  • /usr/src — здесь хранятся исходные тексты системных компонентов, например, ядра.

Имеются также директории, которые не имеет смысла копировать в обычных условиях, например,

  • /tmp

  • /proc

  • /mnt

  • /media

  • /lost+found

  • /sys

Теперь, после краткого обсуждения, что копировать, перейдём к обсуждению, на что (на какие устройства/носители) выполнять копирование.

1.2.3. Способы хранения резервной копии

Где хранить резервную копию? Ответ на этот вопрос во многом зависит от конкретных условий работы. Так, если у вас небольшой объём данных (десятки Мбайт), то выбор устройств хранения резервной копии довольно широк. Тем не менее, поскольку резервная копия нужна при любом объёме данных, то рассмотрим устройства для хранения по порядку:

  • на дисках CD RW;

  • на дисках DVD RW;

  • на мобильных дисках;

  • на устройствах флеш памяти (флешки);

  • на других компьютерах.

Не лишне напомнить о правилах хранения сменных носителей с резервной копией. Если вы используете CD/DVD/флешки, то их следует помечать, например, фломастером со всей возможной тщательностью. Чем больше и более точной видимой невооружённым глазом информации будет размещено на носителе, тем проще будет с ним работать в будущем. Не следует слишком полагаться на свою память и ограничиваться надписью «диск 1». Очень полезно написать на носителе дату, когда была записана информация, с какой целью, кто записал, имя файла (файлов). Носители без всяких надписей должны рассматриваться как пустые болванки, может быть испорченные.

Поскольку носители с резервными копиями могут понадобиться, например, через пару месяцев, следует кроме правильных надписей на носителях позаботиться о месте, где и как эти носители будут храниться. Очень полезно хранить CD/DVD диски в обложках в нежарком (не на солнце) и не сыром месте. Значительно лучше складывать их вертикально, а не стопкой. Очень плохая идея хранить такие диски на батарее отопления.

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

В реальной жизни совершенно запросто ломается всё, что только может сломаться, а также временами и то, что вообще невозможно сломать.

Наконец, не стоит забывать про такие удобные хранилища данных как интернет-сайты, например, http://www.google.com или на серверах социальных сетей типа odnoklassniki.ru. Имеется ещё несколько полезных сайтов, которые можно использовать как хранилища данных:

Имеются и другие сайты с родственными сервисами. Большое достоинство состоит в том, что они доступны из любого места планеты, где имеется неплохой интернет-канал. В частности, интересны способы резервного копирования/синхронизации специфических данных, как закладок для интернет-обозревателей.

1.2.3.1. Специальные виды резервного копирования/синхронизации

Для специальных видов данных, таких как файлы закладок в обозревателях также полезно иметь средства резервного копирования и средства синхронизации, т.е. специальные инструменты, которые позволяют:

  • создать в Интернете резервную копию файла закладок обозревателя;

  • скопировать из Интернете файл закладок и поместить его в свой обозреватель;

  • произвести объединение локального файла закладок с файлом закладок из Интернета.

Перечисленные возможности позволяют синхронизировать содержание файлов закладок на нескольких компьютерах. Особенно необходимы возможности специального резервного копированя/синхронизации, когда вы используете портативный компьютер (ноутбук) и несколько настольных компьютеров. Такого вида копирование/синхронизация выполняется посредством приложения, которое включается в обозреватель. Примером такого приложения может служить http://www.xmarks.com. Имеются варианты такого плагина для нескольких операционных платформ и типов обозревателей: Firefox, Google Chrome, Xmarks for Mac OS, Internet Explorer.

Ещё одно предположительно перспективное средство специального резервного копирования — это Weave (см. https://mozillalabs.com/weave/). Оно позволяет иметь резервную копию ряда компонентов персональных данных: файлы закладок браузера, пароли, хранящиеся в браузере, историю посещений сайтов. Все эти данные могут быть синхронизированы между всеми компьютерами, где установлен Firefox. Средство находится в стадии активной разработки, что может приводить к некоторым несовместимостям версий Firefox и Weave.

1.2.3.2. Копирование на дисках CD или DVD (или других типах, например, BlueRay)

При выполнении резервного копирования на такого типа носители полезно иметь в виду, что объём отдельного носителя не слишком велик. Так если ёмкость обычного DVD диска составляет около 4.5 Гбайт, то уже для директории в которой хранится 20 или 100 Гбайт полезной для вас информации, потребуется 5 или более дисков DVD. Естественно, что их потребуется ясно надписать или наклеить отпечатанную маркировку (диск без надписи бесполезен!). Время записи на диск также может оказаться немалым. Время записи полного диска DVD может запросто занять час времени (хотя это может варьироваться в значительных пределах в зависимости от типа дисковода). Иными словами создание резервной копии директории ёмкостью 100 Гбайт на дисках DVD может занять 100/4.5 = 23 часа (примерно).

1.2.3.3. Копирование на мобильные диски

Здесь имеются в виду мобильные жёсткие диски, которые, как правило, подключаются с использованием интерфейса USB. Копирование на такие устройства происходит достаточно быстро, 50-100 Мбайт/сек. Как правило, мобильные диска имеют ёмкость более 100 Гбайт (хотя устаревшие устройства такого типа могут иметь меньшую ёмкость), поэтому при создании резервной копии не требуется что-то переставлять или переключать — создание резервной копии выполняется практически одной командой, например:

cp -rp ваша_директория директория_резервной_копии

Аналогичным образом можно использовать утилиту pax, описанную в Разд. 1.2.1.6, Команда (утилита) pax. Например:

pax -r -w -v -Y -Z ваша_директория директория_резервной_копии

где директория_резервной_копии — это директория на вашем мобильном диске.

Нетрудно видеть, что подготовка резервной копии для директории ёмкостью 100 Гбайт займёт около 20 минут. Оговоримся, что и здесь многое зависит от типа конкретных устройств, например, если вы используете USB-1.x, то копирование займёт больше времени. В описании устройства указано, какой тип интерфейса (тип протокола) используется: USB-1.x, USB-2.x или USB-3.x (чем больше номер версии протокола обмена данными, тем быстрее проходит копирование).

1.2.3.4. Копирование на устройства флеш-памяти (флешки)

Копирование на таких устройствах является довольно распространённым способом создания резервных копий файлов и/или директорий. Флеш память ёмкостью 16-32-64 Гбайт является сейчас достаточно довольно рядовым явлением. Скорость записи на такие устройства может варьироваться, однако обычно она не меньше, чем скорость записи на мобильный жёсткий диск. Естественно, что если общий объём данных, который вам необходимо скопировать, превышает объём устройства флеш памяти, потребуется несколько устройств для подготовки полной резервной копии.

1.2.3.5. Копирование на другие компьютеры

Одним из распространённых способов подготовки резервной копии данных является копирование данных на другие компьютеры в той же локальной сети. В простейшем случае, если у вас имеется акаунт на двух компьютерах под управлением Линукс, то вы можете просто скопировать вашу директорию на другой компьютер командой

scp -rp ваш_каталог удалённый_хост:

Вышеприведённая команда годится для очень простых директорий, которые не содержат «мягких» ссылок внутри директории.

Более эффективно копирование можно выполнить командой (утилитой) tar (см. Разд. 1.2.1.3, Команда tar):

tar zcf - ваш_каталог | ssh удалённый_хост "tar zxf -"

Эта команда сохранит все перекрестные ссылки внутри директории, если таковые имеются. Особенно полезна такая команда будет, если вы имеете дело с массой поддиректорий с неизвестной вам организацией. Заметим попутно, что если каталог (директория) ваш_каталог не найден, то вы можете получить серию сообщений об ошибках tar. Чтобы гарантировать себя от ошибок, можно использовать составную команду:

ARCHIVE=ваш_каталог; if [ ! -e ${ARCHIVE} ]; then
   echo "Не найден объект ${ARCHIVE}";
else
   tar zcf - ${ARCHIVE} | ssh pcfarm "tar zxf -"
fi

Примерно таким же образом выглядит копирование на сетевое хранилище данных (Network Attached Storage — NAS). Сетевое хранилище данных представляет собой сетевое устройство, которое предназначено для хранения данных и может выполнять некоторые операции по доступу к данным через Интернет http://ru.wikipedia.org/wiki/NAS. Такое устройство можно рассматривать просто как компьютер с ограниченным набором выполняемых операций (следует ознакомиться с описанием конкретного устройства, чтобы узнать какие операции на нём поддерживаются).

Имеются и другие более экономные по времени способы копирования данных. Например, команда rsync, которая рассмотрена в Разд. 1.2.1.1, Команда rsync.

1.2.3.6. Копирование на интернет-сайты

При небольшом объёме резервной копии очень удобно пользоваться интернет-сайтами. В этом случае резервная копия будет вам доступна практически везде, что просто удобно, если у вас мобильный компьютер или несколько компьютеров в географически разных местах. Однако, интернет-копия требует постоянной и надёжной связи достаточной пропускной способности. Так, если у вас имеется канал в Интернет с пропускной способностью, например, 128 Кбит, то скорость передачи составит около 12-13 KБайт в секунду. Если ёмкость вашей директории составляет 6 Гбайт, то время копирования составит примерно1024*1024*6/12 = 524288 секунд = 8738.13 минут = 145.6 часов = примерно 6.1 суток, т.е. почти полная неделя. Таким образом, если канал в Интернет не слишком хороший или объём данных для копирования велик, то придётся подумать о других способах копирования.

Однако скорости доступа в Интернет растут со временем. Таким образом, копирование на интернет-сайтах надо иметь в виду.

1.2.4. Организационные вопросы копирования

Рассмотрим теперь более конкретно процедуру копирования. Кто её будет запускать? Это можете делать вы вручную, или другой человек, которому вы доверяете. Однако работа по выполнению копирования скучна и однообразна (одни и те же операции много раз). Неотложные дела могут не дать вам вовремя сделать резервную копию. Вполне легко представить, что через некоторое время, когда вам на самом деле придётся обратиться к резервной копии какого-то файла, может оказаться, что последнюю копию вы делали год назад. Иными словами, у вас нет подходящей резервной копии ваших данных. Верным решением может быть автоматическая (или полуавтоматическая) процедура резервного копирования.

Полностью автоматическая система копирования, которая выполняет все необходимые операции, намного предпочтительней любой другой. Это может означать, что команды создания резервной копии просто запускаются по таймеру, например, они могут быть записаны в файле и помещены в таблицу crontab посредством команды

crontab ваш_файл

Файл ваш_файл может иметь следующее содержание:

1 3 * * * tar zcvf резервная_копия.tar.gz ваш_каталог

По этой команде ваша директория ваш_каталог будет копироваться (архивироваться утилитой tar) в файл резервная_копия.tar.gz каждый день в три часа одну минуту, т.е. ночью. Этот файл может располагаться в любом месте: на другом жёстком диске, на внешнем носителе (CD/DVD/BlueRay диске, на ленточном картридже), или на другом компьютере, если архивный файл находится в монтированной по NFS директории.

Такой сценарий создания резервной копии мы будем называть простейшим. В ней (простоте) и заключается основное достоинство такого способа копирования. Рассмотрим недостатки такого способа.

Во-первых, каждый день создаётся новая резервная копия, которая уничтожает предыдущую резервную копию. Таким образом, в любой день вы будуте иметь только одну копию — вчерашнюю. Если кто-то по ошибке удалил файл и обнаружил этот прискорбный факт через два дня — никто не сможет этот файл восстановить. Чтобы избежать этого недостатка, мы можем предложить техническое усовершенствование для команды, которая будет выполняться по cron.

Тогда новая строка (в одну строку) в cron может быть такой:

1 3 * * * tar zcvf резервная_копия-`date +%Y-%m-%d_%H:%M:%S`.tar.gz ваш_каталог

По этой команде каждую ночь (команда вызывается cron) будет создаваться новый файл с резервной копией. В этом случае у вас через год можно ожидать как минимум 365 резервных копий. Однако, сколько же будет занято памяти этими копиями? Если предположим, как и ранее, что объём вашей директории ваш_каталог составляет 100 Гбайт, то вам потребуется примерно 36500 Гбайт (чуть меньше 37 Тбайт) для хранения резервных копий за год. Далее, представим, что потребовалось найти какой-то файл в массиве резевным копий. Для этого вам потребуется в том или ином виде просканировать 37 Тбайт информации. Обычная скорость чтения с жёсткого диска составляет около 100 Мбайт/сек (на новом диске). Иными словами, 1 Гбайт будет прочитан за 10 секунд. А 37 тысяч Гбайт будут прочитаны за 3700000 секунд, т.е. за 1028 часов, или примерно за 42 дня (!). Такой способ создания резервных копий может показаться слишком расточительным по занимаемой памяти и достаточно трудоёмким для восстановления какого-то утерянного файла.

В этом месте мы снова можем рассмотреть некоторые технологические усовершенствования для выполнения резервной копии. Однако, быть может, дочитавшего до этого места уже посетила догадка, что, наверное, имеются готовые системы, которые делают резервные копии в каком-то смысле оптимальным образом. Догадка верна. Такие системы имеются в огромном количестве (сотни) как проприетарные, так и свободно распространяемые. Рассмотрим некоторые из них, которые входят в дистрибутив НауЛинукс.

Аналогичным образом (т.е. в crontab) можно использовать команду (утилиту) rsync, что ещё более сократит время выполнения резервной копии данных. Здесь сокращение времени произойдёт только начиная со второго копирования. Первое копирование будет выполняться дольше, чем последующие, поскольку первый раз необходимо скопировать все данные. Последующие разы будет выполняться копирование лишь изменённых блоков данных.



[1] Имеются варианты утилит dump/restore и для других файловых систем, например, для XFS (см. http://www.xfs.org).