Процедура

В этом документе я использовал для машин имена "msdos" и "linux". "msdos" - это имя машины с ленточным накопителем, обычно работающей под MS-DOS. "linux" - имя машины, работающей под Linux, чьи диски нужно копировать на ленточный накопитель или с него. Для простоты я всегда называл первую машину "msdos", даже если она в данный момент работала под Linux. Более того, все пути в этом документе указаны относительно Linux машины с подключенными в систему SAR (Search-And-Rescue - Поиск-И-Спасение) дисками. То есть, файл паролей с жесткого диска вашего Linux компьютера будет /etc/passwd, а, к примеру, соответствующий файл на флоппи диске будет /tape144/etc/passwd.

Я пользуюсь скриптами для резервного копирования Карела Кьюбата (Karel Kubat) версии 1.03, их можно найти на
ftp://sunsite.enc.edu:/pub/Linux/system/Backup/backup-1.03.tar.gz
В этом документе я буду называть их просто - "скрипты копирования". Вам не обязательно использовать именно их. Лично я предпочитаю пользоваться ими, потому что они используют afio для создания несжатого архива сжатых файлов, вместо сжатого архива несжатых файлов. Первое намного безопасней, в случае ошибки чтения с носителя во время восстановления. Я понимаю, что Карел больше не сопровождает backup, а вместо этого написал "tob" (tape oriented backup). Работа с новым пакетом не должна значительно отличаться от описанной ниже, хотя я сам не пробовал его..

Прежде всего скачайте модуль ftape. Он входит в комплект всех современных ядер, но если вы используете старое, то можете найти модуль по адресу
ftp://sunsite.unc.edu/pub/Linux/kernel/tapes/ftape-2.05.tar.gz
Далее найдите образы загрузочного диска Slackware (я нашел сетевой диск, что, впрочем, не столь важно) и корневого диска tape144, и запишите их на флоппи-диски.

Модуль ftape будет работать только с ядром, под которым был собран. Я не смог заставить работать модуль ftape.o с корневого tape144 диска. Я думаю, что это произошло потому, что из него была вырезана символьная информация, из-за чего он не устанавливался. Так что вам придется собрать новое ядро, с поддержкой сети и ftape. Если вы используете старое ядро, то придется собирать и новый ftape.o. Почитайте указания, поставляемые вместе с архивом ftape. Не забывайте, что должны поддерживаться сетевые карты как машины с Linux, так и машины с MS-DOS.

Скопируйте вновь созданное ядро поверх старого на сетевой загрузочный диск. Для этого воспользуйтесь командой /bin/cp. Не используйте команду "dd", так как в этом случае вы просто создадите загрузочный образ ядра. Защитите диск от записи и пометьте его, как SAR#1.

Теперь подключите корневой tape144 диск. Во избежание неразберихи с именами файлов, я буду считать, что диск подключается в каталог /tape144. На нем нам понадобится дополнительное место, поэтому удаляем следующие файлы:
/tape144/bin/dialog
/tape144/bin/elvis
/tape144/bin/vi
/tape144/boot/ftape.o

Теперь создаем новый файл:
/tape144/etc/exports
содержащий следующую строку:
/mnt    msdos(ro)
где "msdos" нужно заменить на имя или IP адрес MS-DOS машины, к которой подключен ленточный накопитель.

Далее, чтобы не зависеть от DNS-сервера, добавьте в файл /tape144/etc/hosts строки с именами и IP-адресами машин с Linux и MS-DOS. Мой, например, выглядит так:
128.100.75.114  caliban.physics.utoronto.ca caliban caliban.physics
128.100.75.111  ariel.physics.utoronto.ca ariel ariel.physics

Теперь исправим небольшую проблему с конфигурацией inetd - для демона rsh нужно прописать полный путь. Измените строку 19 файла /tape144/etc/inetd.conf на:
shell   stream  tcp     nowait  root    /usr/etc/tcpd   /usr/etc/in.rshd

Добавьте информацию о локальной сети в файл /tape144/etc/rc.d/rc.inet1, чтобы MS-DOS-машина могла с ней работать. Формат зависит от конфигурации вашей сети, можете просто скопировать соответствующие строки из файла /etc/rc.d/rc.inet1 с вашей Linux машины. Для моей сети нужно было добавить такие строки:
/etc/ifconfig eth0 128.100.75.111 broadcast 128.100.75.0 netmask 255.255.255.0
/etc/route add -net 128.100.75.0 netmask 255.255.255.0
IP адрес из строки с ifconfig - это адрес MS-DOS машины.

Теперь скопируйте этот файл в /tape144/etc/rc.d/rc.inet1-l и измените в новом файле IP адрес на соответствующий Linux машине (а не MS-DOS).

Далее удалите строки с 3 по 11 из /tape144/etc/rc.local. Это оператор if, запускающий файлы rc.inet*. Во время загрузки нам это не нужно.

Создайте новый файл: /tape144/root/.rhosts, содержащий строку:
linux root
где, опять таки, "linux" нужно заменить на полное имя (включая домен) или IP адрес Linux машины.

Заполните поле пароля в /tape144/etc/passwd для root, чтобы никто не мог зайти в систему в то время, когда вы копируете информацию на ленточный накопитель. Это можно сделать, скопировав соответствующее поле из файла /etc/passwd file file c вашей Linux машины.

Скопируйте /usr/bin/rsh в /tape144/usr/bin.

Скопируйте следующие файлы из /usr/etc в /tape144/usr/etc:
in.rshd
rpc.mountd
rpc.nfsd
rpc.portmap
services
tcpd

Создайте новый скрипт /tape144/bin/tapesetup, состоящий из следующих строк ("linux" замените на имя вашей Linux машины).
#! /bin/sh

/bin/sh /etc/rc.d/rc.inet1
/bin/sh /etc/rc.d/rc.inet2

/bin/mount linux:/nfs /mnt
/bin/insmod /mnt/ftape.o
Обратите внимание на то, что ядра новых версий не требуют строки insmod.

Далее создайте другой скрипт, /tape144/bin/msdosset (сменив "linux" на имя вашей Linux машины):
#! /bin/sh 

/bin/sh /etc/rc.d/rc.inet1
/bin/sh /etc/rc.d/rc.inet2

mount linux:/mnt /mnt
/bin/insmod /mnt/ftape.o
Как и в предыдущем случае, ядра новых версий не требуют строки insmod.

Создайте файл /tape144/root/notes, доступный для чтения и содержащий полезную информацию о восстановлении файлов:
Для полного восстановления жесткого диска загрузитесь
на Linux машине с дисков SAR #1 и #2, затем наберите
следующее:

== /bin/sh /etc/rc.d/rc.inet1-l
== /bin/sh /etc/rc.d/rc.inet2

== /usr/etc/rpc.portmap
== /usr/etc/rpc.mountd
== /usr/etc/rpc.nfsd

Затем вставьте диск SAR#3 и наберите:

== mount /dev/fd0 /mnt

Создайте новый каталог для подключения файловой системы:

== mkdir /mnt2

и подключите в него раздел вашего жесткого диска.
Возможно понадобится предварительно отформатировать раздел -
следуйте указазниям из Linux Installation HOWTO.
SAR диски содержат все необходимое для форматирования.

Воспользуйтесь дисками SAR#1 и SAR#2 для загрузки на MS-DOS машине
и запустите скрипт /bin/msdosset. Скрипт берет NFS файл с дискеты,
что займет какое-то время, потерпите.
Затем скопируйте файлы с ленты в /mnt2 на Linux машине.

Если вы используете для копирования скрипты, то скопируйте "afio" в подкаталог /tape144/local/bin. Не обязательно держать остальные файлы, используемые скриптами, на SAR дисках - архив может быть восстановлен, с помощью лишь "afio" и "gzip".

Я не смог воспользоваться скриптами в том виде, в котором они поставлялись. Архив на ленте вроде бы создавался нормально, но что-либо восстановить из него не удавалось. Я обнаружил, что если убрать размер блока и преобразующие операторы, то все работает нормально. Вот патч для скрипта "netbackup". Используйте его как для копии на Linux машине, так и для копии SAR дисков.
*** netbackup.orig===== Mon Jan= 9 17:22:32 1995
--- netbackup== Mon Jan= 9 17:23:25 1995
***************
*** 35,41 ****
================= "'mknod", devname, "p'");
===== exec ("su -", USERNAME, "-c",
================= "'rsh ", REMOTE_HOST,=
!====================== "\"dd", "of=" REMOTE_DEVICE, "obs=20k", "conv=sync\"",
======================= "<", devname,
=============== "'&"
======== );
--- 35,41 ----
================= "'mknod", devname, "p'");
===== exec ("su -", USERNAME, "-c",
================= "'rsh ", REMOTE_HOST,=
!====================== "\"dd", "of=" REMOTE_DEVICE, "\"",
======================= "<", devname,
=============== "'&"
======== );
***************
*** 50,56 ****
================= "'mknod", devname, "p'");
===== exec ("su", USERNAME, "-c",=
================= "'rsh ", REMOTE_HOST,=
!====================== "\"dd", "if=" REMOTE_DEVICE, "ibs=20k", "conv=sync\"",
======================= ">", devname,
=============== "'&"
======== );
--- 50,56 ----
================= "'mknod", devname, "p'");
===== exec ("su", USERNAME, "-c",=
================= "'rsh ", REMOTE_HOST,=
!====================== "\"dd", "if=" REMOTE_DEVICE, "\"",
======================= ">", devname,
=============== "'&"
======== );
  


Итак, вы закончили с диском SAR #2. Защитите его от записи.

Подключите чистый отформатированный диск (создайте его с помощью fdformat и mkfs). Скопируйте на него ftape.o и пометьте его SAR#3. Оставьте его открытым для записи, так как если его защитить от записи, то по какой-то причине возникают ошибки.

На Linux машине создайте каталог для работы NFS. Я создал каталог
/nfs
Запишите в него ftape.o (необрезанный, около 500+ Кб). Добавьте строку в файл /etc/exports:
/nfs    msdos(ro)
Обратите внимание на то, что файлы в вашем NFS каталоге и его подкаталогах не защищены. Кто-нибудь может загрузить со своих собственных дисков Linux на MS-DOS машине и подключить этот каталог, так что не храните в нем ничего важного. Перезапустите NFS демоны rpc.mountd и rpc.nfsd. Так как они не перезапускаются по SIGHUP, просто убейте их командой kill и запустите снова. Если они не запускаются автоматически из /etc/rc.d/rc.inet2, можно включить их туда сейчас.

OK, теперь у нас все настроено для резервного копирования и восстановления. Загрузите MS-DOS машину с диска SAR#1. Затем, когда появится соответствующее приглашение, загрузите диск SAR#2. Войдите в систему root-ом и запустите /bin/tapesetup. Выйдите из системы. Если вы используете скрипты для резервного копирования, то команда netbackup теперь должна работать. Можно также воспользоваться ключом "-f msdos:/dev/ftape" команд tar, cpio, или mt. Если у вас есть программа резервного копирования, работающая только с локальными файлами, попробуйте следующее. Предположим, программа называется "localbackup" и записывает в файл, указываемый в командной строке в качестве аргумента:

mknod /tmp/tapepipe p
rsh msdos dd of=/dev/ftape < /tmp/tapepipe &
localbackup /tmp/tapepipe
После окончания копирования копирования удалите /tmp/tapepipe.

Восстановление на работающий Linux: скрипт netbackup, tar, cpio и тому подобные утилиты работают без каких-либо специальных действий со стороны оператора. Если у вас программа восстановления из локального файла, попробуйте следующее:
mknod /tmp/tapepipe p
rsh -n msdos dd if=/dev/ftape >> /tmp/tapepipe &
localrecovery /tmp/tapepipe
После окончания копирования удалите /tmp/tapepipe.

Заметьте, что я использую "rsh" для входа пользователем root на MS-DOS машину. Для этого требуется правильный .rhosts. Конфигурация на диске "tape144" позволяет выполнять rsh root-ом, но не дает зайти root-ом, с помощью telnet или rlogin - входы в систему разрешены только с консоли. Это хорошо для безопасности.

Если вам не нравится root-овый файл .rhost, то можно создать нового пользователя "tapeuser" на диске SAR#2, разрешив ему работу с ленточным накопителем, но запретив работу с дисками (создайте новую группу и включите в нее tapeuser, затем выполните команды chown и chmod для файлов /dev/rft* и /dev/nrft*). При этом ваша программа резервного копирования должна выполнять rsh на этого пользователя, а не на root. Само собой, должен существовать файл .rhost в каталоге ˜tapeuser на SAR#2. Я сделал именно так.

Наконец, указания по полному восстановлению отказавшего жесткого диска. Предполагается, что раздел Linux не подлежит восстановлению. Если требуется, переформатируйте раздел, как описано в Linux Installation HOWTO. Загрузите Linux с SAR disk #1. Когда потребуется, вставьте диск #2. Далее следуйте указаниям из файла /root/notes (ранее я ссылался на него, как на /tape144/root/notes). После загрузки обеих машин запустите используемую вами команду восстановления. Если вы используете скрипты для резервного копирования, то это можно сделать так:

  1. перейдите в каталог, в который подключается восстанавливаемый раздел жесткого диска.

  2. если на накопителе есть подключаемые разделы, и вы хотите восстановить их, то создайте на разделе жесткого диска точки подключения (mount points) и подключите их.

  3. Введите команду:
    rsh -n msdos dd if=/dev/ftape | afio -i -v -Z -c 1024 -
            
    или
    rsh -n -l tapeuser msdos dd if=/dev/ftape | afio -i -v -Z -c 1024 -
            
    или
    mknod /tmp/backpipe p
    rsh -n msdos dd if=/dev/ftape >> /tmp/backpipe &
    afio -i -v -Z -c 1024 /tmp/backpipe
            

При этом данные считываются с ленточного накопителя на удаленной машине и выводятся на стандартный выход, где их берет afio. Ключ "'-i"'указывает, восстанавливать файлы относительно текущего каталога (в данный момент корневой каталог восстанавливаемого раздела), "-v" - подробный вывод (список восстанавливаемых фалов), "'-Z" - указывает afio, что архив состоит из отдельно сжатых файлов, "-c 1024" - указывает использовать 5 Мб потоковый буфер для избежания излишней перемотки ленты.