Восстановление из архива


Архивы — это замечательно, но они бесполезны, если с их помощью нельзя восстановить систему. Утилита для восстановления данных, restore(8), позволяет извлекать либо целые файловые системы, либо отдельные файлы. Как и в случае с tar и dump, ключ -f позволяет выбрать устройство или файл, из которого будут восстановлены данные.

Проверка содержимого архива

Для вывода списка файлов, находящихся в архиве, следует указать ключ -t.

# restore -t

Утилита restore позволяет узнать, когда была сделана резервная копия (1), что было скопировано (2) и на каком уровне резервирования. После этого она выводит имена всех файлов в архиве и их местоположение в файловой системе. Для каждого файла выводится номер индексного дескриптора (inode) (3). (Об индексных дескрипторах мы поговорим в главе 8.)

Следует заметить, что пути к файлам указаны относительно их местоположения в оригинальной файловой системе. Мы создали резервную копию корневой файловой системы, которая здесь представлена символом точки (4). В действительности это корневой каталог файловой системы /usr, или просто каталог /usr. Полное имя файла ./bin/bc (5) в оригинальной файловой системе на самом деле было не /bin/bc, a /usr/bin/bc.

Об этом необходимо постоянно помнить при поиске конкретных файлов в архивах. Для проверки присутствия некоторого файла в архиве можно использовать ключ -t. Предположим, что необходимо восстановить файл /usr/home/mwlucas/.cshrc. Первое, что приходит в голову, — это проверить наличие файла в архиве:

# restore -t /usr/home/mwlucas/.cshrc
...
./usr/home/mwlucas/.cshrc is not on the tape

Как так? Файл отсутствует на ленте? Где мои данные? Пора кричать «караул»? Конечно нет, подождите паниковать. Вспомните, этот архив понятия не имеет о существовании каталога /usr — все сохраненные пути файлов записаны относительно каталога /usr. Нужно искать файл home/mwlucas/.cshrc.

# restore -t home/mwlucas/.cshrc
...
871426 ./home/mwlucas/.cshrc

Уф-ф! Файл .cshrc присутствует в архиве. Попробуем теперь извлечь его.

Извлечение данных из архива

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

Восстановление файла

Если надо извлечь лишь некоторые данные, следует задать ключ и имя файла. В этом случае будет извлечен только указанный файл. Например, для восстановления .cshrc из архива, записанного на ленту, надо набрать следующую команду:

# restore -x home/mwlucas/.cshrc

В первую очередь restore просит ввести номер тома (1). Это порядковый номер ленты, из тех, что были использованы для создания данной резервной копии. Если архив записывался на несколько лент, dump(8) должна была сообщить вам номера лент, которые менялись в процессе копирования. (Надеюсь, вы правильно промаркировали ленты?) Если копия уместилась на одну ленту, то это будет том с номером 1.

Как только утилита restore отыщет файл, она предложит сохранить его с оригинальными правами доступа и признаком принадлежности файла (2). В данном примере я хотел остаться владельцем файла, поэтому в ответ на вопрос я ввел y. После выполнения операции в текущем каталоге появится каталог home/mwlucas с файлом .cshrc внутри.

Восстановление файловой системы

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

В следующем примере будет удален раздел на втором жестком диске, а затем данные будут восстановлены с резервной ленты. Работа с диском здесь не будет подробно рассматриваться (дополнительную информацию см. в главе 8), однако все действия в общем виде можно представить так:

  1. Создание новой файловой системы с помощью newfs.
  2. Присоединение этой файловой системы к дереву каталогов, в /mnt.
  3. Переход в этот каталог.
  4. Восстановление файловой системы с ленточного устройства по умолчанию /dev/sa0.

Вот эти команды:

# newfs /dev/ad1s1g
# mount /dev/ad1s1g /mnt
# cd /mnt
# restore -r

Все настолько просто, что у вас может даже появиться желание уничтожить содержимое файловой системы только ради того, чтобы восстановить ее, не так ли?

Восстановление и последующее резервирование

Когда бы ни проводилось полное восстановление диска, перед следующим после него инкрементным дампом необходимо выполнить дамп уровня 0. restore(8) изменяет положение данных на диске. Если попытаться создать инкрементный дамп вновь восстановленной файловой системы и попытаться использовать его вместе с прежним дампом уровня 0, это приведет к повреждению данных. Всегда создавайте дамп уровня 0 сразу после восстановления файловой системы, чтобы обеспечить корректность последующих инкрементных дампов. Кроме того, нужно помнить, что при выполнении полного резервирования жить будет намного легче.

Интерактивное восстановление

Одна из наиболее интересных особенностей restore(8) — интерактивный режим (-i), позволяющий «вскрыть» дамп и получить доступ к нему с помощью инструмента командной строки. При этом можно указать файлы, которые необходимо восстановить. Интерактивный режим бывает весьма кстати, когда пользователь говорит примерно следующее: «Я случайно удалил файл с резюме. Он лежал в моем домашнем каталоге, а в его имени было слово resume. Точного имени не помню. Можно его восстановить?» Ясно, что ключ -t не поможет; точное название файла неизвестно! Вместо этого можно перейти в интерактивный режим и поискать этот файл. Это совсем несложно, а пользователь останется вам обязан.* Запустите restore с ключом -i, и вы получите доступ к интерактивному сеансу с командной строкой, которая ведет себя почти так же, как обычная командная строка UNIX, но поддерживает только команды, необходимые для восстановления. В зависимости от типа ленточного накопителя может потребоваться одна-две минуты, прежде чем появится командная строка.

# restore -i

Здесь нет ничего необычного — это содержимое каталога верхнего уровня в файле дампа, в данном случае — каталога /usr. По нему можно продвигаться, используя команду cd, и выводить списки файлов с помощью команды ls, как в обычной командной оболочке. Найдя необходимый файл, его можно восстановить, для этого нужно добавить его в список извлекаемых файлов с помощью команды add. Когда все необходимые файлы будут добавлены в список, можно запустить процедуру восстановления с помощью команды extract.

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

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

Комментарии запрещены.