Мини-HOWTO: Резервное копирование при помощи MS-DOS |
---|
Пред. | | След. |
Процедура
В этом документе я использовал для машин имена "msdos" и "linux". "msdos" -
это имя машины с ленточным накопителем, обычно работающей под MS-DOS.
"linux" - имя машины, работающей под Linux, чьи диски нужно копировать на
ленточный накопитель или с него. Для простоты я всегда называл первую
машину "msdos", даже если она в данный момент работала под Linux. Более
того, все пути в этом документе указаны относительно Linux машины с
подключенными в систему SAR (Search-And-Rescue - Поиск-И-Спасение) дисками.
То есть, файл паролей с жесткого диска вашего Linux компьютера будет
/etc/passwd, а, к примеру, соответствующий файл на флоппи диске будет
/tape144/etc/passwd.
Я пользуюсь скриптами для резервного копирования Карела Кьюбата (Karel Kubat) версии 1.03, их можно найти на
В этом документе я буду называть их просто - "
скрипты копирования". Вам не
обязательно использовать именно их. Лично я предпочитаю пользоваться ими,
потому что они используют afio для создания несжатого архива сжатых файлов,
вместо сжатого архива несжатых файлов. Первое намного безопасней, в случае
ошибки чтения с носителя во время восстановления. Я понимаю, что Карел
больше не сопровождает backup, а вместо этого написал "tob" (tape oriented
backup). Работа с новым пакетом не должна значительно отличаться от
описанной ниже, хотя я сам не пробовал его..
Прежде всего скачайте модуль ftape. Он входит в комплект всех современных
ядер, но если вы используете старое, то можете найти модуль по адресу
Далее найдите образы загрузочного диска 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 |
Теперь создаем новый файл:
содержащий следующую строку:
где "
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" нужно заменить на полное имя (включая домен) или 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. Я создал каталог
Запишите в него
ftape.o (необрезанный, около 500+ Кб). Добавьте строку в файл
/etc/exports:
Обратите внимание на то, что файлы в вашем 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). После загрузки обеих машин запустите используемую
вами команду восстановления. Если вы используете скрипты для резервного
копирования, то это можно сделать так:
перейдите в каталог, в который подключается восстанавливаемый раздел жесткого диска.
если на накопителе есть подключаемые разделы, и вы хотите восстановить их, то создайте на разделе жесткого диска точки подключения (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
|
При этом данные считываются с ленточного накопителя на удаленной машине и
выводятся на стандартный выход, где их берет
afio. Ключ "'
-i"'указывает, восстанавливать файлы относительно
текущего каталога (в данный момент корневой каталог восстанавливаемого
раздела), "
-v" - подробный вывод (список
восстанавливаемых фалов), "'
-Z" - указывает
afio, что архив состоит из отдельно сжатых файлов, "
-c
1024" - указывает использовать 5 Мб потоковый буфер для избежания
излишней перемотки ленты.