Мини-HOWTO: Резервное копирование при помощи MS-DOS
Christopher Neufeld
neufeld@physics.utoronto.ca
Перевод: Денис Дементьев, ASPLinux
В этом документе содержится информация о том, как использовать совместимый с Linux ленточный накопитель, установленный на машине с MS-DOS, для резервного копирования файловых систем Linux.
Процедура
В этом документе я использовал для машин имена "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, =============== "'&" ======== ); --- 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). После загрузки обеих машин запустите используемую вами команду восстановления. Если вы используете скрипты для резервного копирования, то это можно сделать так:
перейдите в каталог, в который подключается восстанавливаемый раздел жесткого диска.
если на накопителе есть подключаемые разделы, и вы хотите восстановить их, то создайте на разделе жесткого диска точки подключения (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 Мб потоковый буфер для избежания излишней перемотки ленты.
я пробовал написать его, то
Команды, перечисленные в /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".