Мини-HOWTO: Резервное копирование при помощи MS-DOS

Christopher Neufeld

     [email protected]
   

Перевод: Денис Дементьев, SWSoft Pte Ltd.

5 августа 1997 года

В этом документе содержится информация о том, как использовать совместимый с Linux ленточный накопитель, установленный на машине с MS-DOS, для резервного копирования файловых систем Linux.


1. Предыстория/вступление

В свое время я спросил в сети, как можно копировать данные Linux на ленточный накопитель Colorado Jumbo 250, установленный на машину с MS-DOS. Судя по количеству полученной мной почты, этот вопрос возникал у многих. Поэтому, справившись с этой проблемой, я посылаю ее решение. Если кто-нибудь желает доработать этот документ до HOWTO, дайте мне знать. Я должен поблагодарить Jim Nance ([email protected]), указавшего мне, что машина, работающая под MS-DOS, не обязана всегда работать под MS-DOS. Приведенная методика должна также работать для любых ленточных накопителей, поддерживаемых модулем ftape и для ленточных накопителей SCSI. В последнем случае нужно лишь заменить /dev/ftape на, к примеру, /dev/st0.

Я руководствовался следующими критериями: конечная установка должна быть, как можно более защищенной, но, в то же время, довольно простой; она должна занимать как можно меньше места на жестком диске компьютера, работающего под MS-DOS; должна существовать возможность восстановления данных, даже в случае очень серьезных повреждений, вплоть до кражи жесткого диска, то есть, возможность полного копирования данных на пустой раздел. Описанная здесь методика позволяет вообще не использовать дисковое пространство машины, работающей под MS-DOS, но для нее требуется выделить IP адрес. Также вам понадобятся три чистых, отформатированных 1.44Мб дискеты.


2. Процедура

В этом документе я использовал для машин имена "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 Мб потоковый буфер для избежания излишней перемотки ленты.


3. Замечания

Команды, перечисленные в /tape144/root/notes, могут выполняться скриптом. Когда я пробовал написать его, то получал ошибки rpc. Думаю, что это происходило из-за того, что команды запускались слишком быстро, и portmapper не загружался тогда, когда было необходимо. Если я вводил команды с клавиатуры, то все работало, поэтому я рекомендую, так и делать.

Думаю, что, с точки зрения безопасности данных, все нормально. Заметьте, что несмотря на это, можно получить доступ к вашим файлам, вытащив кассету до того, как вы сделаете это, и прочитав ее в другом месте. Если ваши данные важны, шифруйте их - архивируйте на стандартный вывод и перенаправляйте его на вход программы шифрования, а вывод программы шифрования на канал /tmp/tapepipe, как описано выше. При этом помните, что, в случае ошибок при копировании, данные не подлежат восстановлению, так как весь архив превращается в один поток, зашифрованный DES. С помощью ключей afio можно указать, сперва упаковывать файл gzip-ом, а затем посылать его программе шифрования, но при этом появляется довольно много чистого текста, с которым могут поработать взломщики, так что лучше вообще не использовать gzip и просто шифровать данные (цена - место на ленте). Думаю, не нужно напоминать, что шифрованные DES файлы не сжимаются.

Указания, касающиеся rc.inet1, позволяют работать только с локальной сетью (а не с остальным миром через шлюз).

Для полного восстановления на чистый жесткий диск MS-DOS машине понадобится SAR disk #3 с ftape.o, подключаемый через NFS из-за того, что некоторые старые модули ftape не могут управлять некоторыми ленточными накопителями при подключенном флоппи-диске. С новыми ядрами можно не устанавливать NFS.

Это очень важно. ***ПРОВЕРЬТЕ*** процедуру восстановления с SAR дисков. Я, конечно, проверял, но лучше убедиться, хотя бы на примере восстановления одного файла с использованием только дисков SAR (то есть, без подключения жесткого диска) . Если это невозможно сделать, по причине работы в системе множества пользователей, то подправьте настройки на SAR дисках, временно сменив "linux" на имя другой MS-DOS машины, загрузитесь на двух машинах с MS-DOS и проверьте. Затем смените имя обратно на "linux".


4. Copyright

Copyright Jan 10, 1995 by Christopher Neufeld ([email protected])

Изменен 6 февраля, 1996.

Изменен 5 августа, 1997.


5. Авторские права

Авторские права на русский перевод этого текста принадлежат © 2000 SWSoft Pte Ltd. Все права зарезервированы.

Этот документ является частью проекта Linux HOWTO.

Авторские права на документы Linux HOWTO принадлежат их авторам, если явно не указано иное. Документы Linux HOWTO, а также их переводы, могут быть воспроизведены и распространены полностью или частично на любом носителе, физическом или электронном, при условии сохранения этой заметки об авторских правах на всех копиях. Коммерческое распространение разрешается и поощряется; но, так или иначе, автор текста и автор перевода желали бы знать о таких дистрибутивах.

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

Мы бы хотели распространить эту информацию по всем возможным каналам. Но при этом сохранить авторские права и быть уведомленными о всех планах распространения HOWTO. Если у вас возникли вопросы, пожалуйста, обратитесь к координатору проекта Linux HOWTO по электронной почте: или к координатору русского перевода Linux HOWTO компании SWSoft Pte Ltd. по адресу