В этом документе я использовал для машин имена "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 |
Прежде всего скачайте модуль ftape. Он входит в комплект всех современных ядер, но если вы используете старое, то можете найти модуль по адресу
ftp://sunsite.unc.edu/pub/Linux/kernel/tapes/ftape-2.05.tar.gz |
Модуль 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) |
Далее, чтобы не зависеть от 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 |
Теперь скопируйте этот файл в /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 |
Заполните поле пароля в /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 |
Далее создайте другой скрипт, /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 |
Создайте файл /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 |
/nfs msdos(ro) |
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 |
Восстановление на работающий Linux: скрипт netbackup, tar, cpio и тому подобные утилиты работают без каких-либо специальных действий со стороны оператора. Если у вас программа восстановления из локального файла, попробуйте следующее:
mknod /tmp/tapepipe p rsh -n msdos dd if=/dev/ftape >> /tmp/tapepipe & localrecovery /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). После загрузки обеих машин запустите используемую вами команду восстановления. Если вы используете скрипты для резервного копирования, то это можно сделать так:
перейдите в каталог, в который подключается восстанавливаемый раздел жесткого диска.
если на накопителе есть подключаемые разделы, и вы хотите восстановить их, то создайте на разделе жесткого диска точки подключения (mount points) и подключите их.
Введите команду:
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 |