neufeld@physics.utoronto.ca
,bokkie@nl.linux.org
Eerder postte ik op het Net de vraag, hoe men een backup maakt van een Linux computer naar een Colorado Jumbo 250 tape-drive aangesloten op een MS-DOS computer. Uit de email die ik ontving bleek dat dit een frequent overdacht probleem is. Nu dat ik erachter ben gekomen, post ik de methode. Als iemand dit in een HOWTO document wil gieten, laat me dit dan weten. Ik zou Jim Nance ( jlnance@isscad.com) willen bedanken voor het erop wijzen dat een MS-DOS computer niet altijd een MS-DOS computer hoeft te zijn. Deze techniek zou ook moeten werken voor elke andere tape-drive die door de ftape-module wordt ondersteund, en voor SCSI tape-drives met de benodigde aanpassingen (d.w.z. vervang /dev/ftape door /dev/st0).
De kriteria die ik stelde bestond hieruit dat de resulterende setup zo veilig mogelijk en tamelijk eenvoudig zou moeten zijn en dat het weinig tot geen ruimte in beslag zou nemen op de harddisk van de MS-DOS computer. Het zou ook capabel moeten zijn in het herstellen van de ergst bedenkbare systeembeschadingen tot aan en inclusief diefstal van de harddisk, waarbij het nodig zou zijn een kaal Linux bestandssysteem terug te zetten. In de hier beschreven techniek wordt gebruik gemaakt van een MS-DOS computer waarop geen harddiskruimte benodigd is, alhoewel het wel vereist is dat aan de computer een IP# is toegekend. Je hebt drie geformatteerde, lege 1.44MB diskettes nodig.
Bij deze beschrijving zal ik naar de twee computers refereren als
``msdos
'' en ``linux
''. ``msdos
'' is de naam van
de computer waar de tape-drive op is aangesloten en waarop gewoonlijk MS-DOS
wordt gedraaid. ``linux
'' is de Linux computer waarvan getracht
zal worden een backup van de disk te maken of gegevens vanaf de tape-drive
op deze disk terug te plaatsen. Ter vereenvoudiging zal ik naar de eerste
computer verwijzen als ``msdos
'' zelfs al wordt het geboot en
zal het draaien onder Linux. Verder wordt ervan uitgegaan dat alle
padnamen in dit document relatief zijn aan die van de Linux-computer met de
Search-And-Rescue (SAR) disks ergens op het systeem gemount.
Dit betekent dat het bestand /etc/passwd
het wachtwoordenbestand
voor de harddisk van de Linux-computer is, terwijl bijvoorbeeld
/tape144/etc/passwd
het corresponderende bestand is
op de diskette.
Ik maak gebruik van de backupscripts van Karel Kubat, versie 1.03, beschikbaar op
ftp://sunsite.enc.edu:/pub/Linux/system/Backup/backup-1.03.tar.gz
In dit document verwijs ik hiernaar eenvoudigweg als
``de backupscripts
''.
Je hoeft niet in het bezit te zijn van deze scripts voor je eigen backups naar
tape. Ik vind deze scripts prettig aangezien ze gebruik maken van afio voor
het aanmaken van een ongecomprimeerd archief van gecomprimeerde bestanden,
in plaats van een gecomprimeerd archief met ongecomprimeerde bestanden.
De eerste is veel veiliger als er zich een leesfout van de media voordoet
tijdens het terugzetten van de gegevens. Ik heb begrepen dat Karel backup
niet langer ondersteunt en nu 'tob', oftewel tape geöriënteerde
backup heeft geproduceerd. Ondanks dat ik het nieuwe package niet heb
geprobeerd, geloof ik niet dat er een veelbetekenend verschil is met de
procedure die hierin wordt uiteengezet.
Ten eerste moet je zorgen aan de ftape module te komen. Het maakt onderdeel uit van alle moderne kernels, maar mocht je nog een oudere kernel gebruiken dan is de module te vinden op:
ftp://sunsite.unc.edu/pub/Linux/kernel/tapes/ftape-2.05.tar.gz
Zorg vervolgens voor een Slackware bootdisk, (ik maakte gebruik van de
netdisk, maar dit zou niet veel uit mogen maken) en
de tape144
rootdisk, en plaats de images op 3"1/2 diskettes.
De ftape
module werkt alleen als het in de kernel is geïnstalleerd
welke draaide toen je het compileerde. Ik kreeg het niet werkend met de
ftape.o
module op de tape144
rootdisk,
ik denk omdat die module van symbolen is ontdaan en niet zal installeren.
Zo en nu moet je een nieuwe kernel aanmaken met netwerk- en
ftape-ondersteuning, en als je een oudere kernel draait, een nieuwe ftape.o
.
Lees de aanwijzingen die met het ftape
archief worden meegeleverd
voor aanwijzigingen in deze fase.
Denk eraan dat de kernel die je compileert de Ethernetkaarten op zowel de
Linux computer als de MS-DOS computer moet ondersteunen.
Kopieer de nieuw aangemaakte kernel-image over die van de Net bootdisk heen.
Gebruik /bin/cp
, en maak de bootdisk niet aan met de
opdracht ``dd
'' zoals je een opstartbaar kernel-image aan zou maken.
Beveilig de bootdisk tegen schrijven, en label het: SAR#1.
Mount nu de tape144
root disk.
Ik ga ervan uit dat het mountpoint /tape144
is,
om verwarring in bestandsnamen te voorkomen.
We hebben er wat vrije ruimte op nodig, dus verwijder de volgende
bestanden:
/tape144/bin/dialog
/tape144/bin/elvis
/tape144/bin/vi
/tape144/boot/ftape.o
Maak nu een nieuw bestand aan:
/tape144/etc/exports
waarin de volgende regel staat:
/mnt msdos(ro)
``msdos
'' zou hierin moeten worden vervangen door de naam
of het IP# van de MS-DOS computer waar de tape-drive op is aangesloten.
Dan voeg je regels toe aan het bestand /tape144/etc/hosts
,
zodat je niet afhankelijk bent van een nameserver, met de namen en
IP-nummers van de Linux en MS-DOS computers.
In die van mij bijvoorbeeld staan de volgende regels:
128.100.75.114 caliban.physics.utoronto.ca caliban caliban.physics
128.100.75.111 ariel.physics.utoronto.ca ariel ariel.physics
Er is een of ander probleem met de inetd config configuratie.
We moeten er de volledige padnaam van de rsh daemon in plaatsen.
Wijzig regel 19 van /tape144/etc/inetd.conf
zo dat er staat:
shell stream tcp nowait root /usr/etc/tcpd /usr/etc/in.rshd
Voeg lokale netrouting informatie toe aan /tape144/etc/rc.d/rc.inet1
,
zodat de MS-DOS computer het netwerk kan gebruiken.
Het formaat hiervan is afhankelijk van je netwerkconfiguratie.
Je kunt het van toepassing zijnde formaat gewoon kopiëren vanuit
het Linux-bestand /etc/rc.d/rc.inet1
.
Voor mijn netwerk, moeten hieraan de volgende regels worden toegevoegd:
/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
Het IP# in de ifconfig regel is dat van de MS-DOS computer.
Kopieer dit bestand nu naar /tape144/etc/rc.d/rc.inet1-l
,
en wijzig het IP# in het nieuwe bestand zodat het dat van de Linux-computer
weergeeft in plaats van die van de MS-DOS computer.
Verwijder vervolgens de regels 3 tot 11 uit /tape144/etc/rc.local
.
Dat is een if-statement waarmee de rc.inet*
bestanden worden
uitgevoerd. We willen niet dat dit tijdens het opstarten gebeurt.
Maak een nieuw bestand aan: /tape144/root/.rhosts
met de regel:
linux root
waar nogmaals, ``linux
'' is vervangen door de volledige computernaam
(inclusief domein) of het IP# van de Linux-computer.
Vul het wachtwoordveld in in /tape144/etc/passwd
voor de root-login om te voorkomen dat mensen inloggen op de MS-DOS computer
op het moment dat je de backup aan het maken bent.
Je kunt dit doen door het corresponderende veld vanuit het bestand
/etc/passwd
op je Linux-computer te kopiëren.
Kopieer /usr/bin/rsh naar /tape144/usr/bin.
Kopieer de volgende bestanden vanuit /usr/etc
naar
/tape144/usr/etc
:
in.rshd
rpc.mountd
rpc.nfsd
rpc.portmap
services
tcpd
Maak een nieuw script aan, /tape144/bin/tapesetup
,
met de volgende inhoud:
(wijzig ``linux
'' zo, dat het je Linux-computernaam weergeeft).
#! /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
Voor nieuwere kernels is de insmod regel niet nodig.
Maak vervolgens als volgt nog een ander nieuw script,
/tape144/bin/msdosset
:
(wijzig ``linux
'' dat het de Linux-computernaam weergeeft).
#! /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
Net als hiervoor, is voor nieuwere kernels de insmod regel niet nodig.
Maak een leesbaar bestand aan, /tape144/root/notes
,
met de volgende behulpzame informatie voor gebruik bij een volledig
herstel:
Voor een volledig herstel van een verwijderde harddisk,
boot de Linux-computer met de SAR disks #1 en #2
en typ dan het volgende:
/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
Doe vervolgens SAR disk #3 in de drive en typ:
mount /dev/fd0 /mnt
Maak een nieuw mountpoint aan met:
mkdir /mnt2
en mount je Linux harddiskpartitie op dit punt.
Mogelijk moet je eerst de partitie herformatteren, als dit zo is,
volg dan de aanwijzingen op in de Linux installatie HOWTO.
De SAR disks bevatten alle benodigde bestanden die nodig zijn voor de
herformattering.
Gebruik tenslotte de disks SAR#1 en SAR#2 om de MS-DOS computer op
te starten en het script /bin/msdosset op die computer uit te voeren.
Het zal even duren eer het script klaar is, omdat het een NSF-bestand van
die diskette haalt, dus wees geduldig.
Herstel nu de tape naar /mnt2 op de Linux-computer.
Als je de backupscripts gebruikt, moet je 'afio' naar de subdirectory
/tape144/local/bin
kopiëren.
De rest van de backupscript bestanden zijn op de recovery-disks niet
nodig, een archief kan worden teruggezet door slechts gebruik te maken
van 'afio' en 'gzip'.
Het lukte mij niet de backupscripts te gebruiken zoals ze meegeleverd
werden. Het tape-archief lijkt goed te worden aangemaakt, maar
de bestanden erin zijn niet terug te zetten. Ik bemerkte dat het verwijderen
van de blokomvang en de conversie-opdrachten die erin staan dit corrigeerde.
Hier is de patch voor het ``netbackup
'' script.
Pas deze patch toe op de harddiskkopie van 'netbackup' op de Linux computer
als ook op de kopie op de SAR-disks.
*** 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,
"'&"
);
Je bent nu klaar met SAR disk #2. Beveilig het tegen schrijven.
Mount vervolgens een lege, geformatteerde disk
(maak het aan met fdformat
en mkfs
).
Kopieer het bestand ftape.o
er naartoe, en label het SAR#3.
Om de een of andere reden gaat het niet goed als je deze disk tegen
schrijven beveiligd, dus doe dit niet.
Maak op de Linux-computer een nieuwe directory voor NFS file-serving. Ik maakte een directory:
/nfs
Plaats de ftape.o
(ongestript, ongeveerd 500+ kB) in deze subdirectory.
Maak een regel in het Linux export bestand /etc/exports
:
/nfs msdos(ro)
Merk op dat alle bestanden in je NFS directory en de daaronderliggende
subdirectory's niet veilig zijn. Iemand anders zou de MS-DOS computer in
Linux kunnen booten met eigen bootdisks en deze directory mounten,
dus plaats geen gevoelige gegevens in deze NFS-subdirectory.
Herstart de NFS-daemons, rpc.mountd
en rpc.nfsd
.
Ze schijnen niet goed te reageren op een SIGHUP
restart,
dus kill ze en roep ze opnieuw aan.
Als je deze daemons niet activeert in /etc/rc.d/rc.inet2
wil je dat wellicht nu wel doen.
OK, nu zijn we zover om een backup te maken en deze terug
te gaan plaatsen. Boot de MS-DOS computer met SAR#1 om een volledige
backup te maken vanaf de Linux-computer.
Wanneer gevraagd wordt om de tweede disk, laad je SAR#2. Log in als root,
en voer het script /bin/tapesetup
uit.
Log uit op de MS-DOS computer. Als je de backupscripts gebruikt, zal
de opdracht netbackup nu werken.
Je kunt ook de switch ``-f msdos:/dev/ftape
'' gebruiken met GNU
tar
, cpio
, of mt
, en op deze wijze je eigen
backup maken. Als je een backupprogramma hebt, die alleen capabel is in
het wegschrijven naar een lokaal bestand, doe je het volgende:
In de veronderstelling dat het backupprogramma ``localbackup
''
heet en naar bestand wegschrijft dat wordt aangegeven door het
opdrachtregelargument:
mknod /tmp/tapepipe p
rsh msdos dd of=/dev/ftape < /tmp/tapepipe &
localbackup /tmp/tapepipe
verwijder /tmp/tapepipe
wanneer het klaar is.
Gegevens terugzetten op een draaiende Linux-computer:
het netbackup
script, tar
, cpio
,
enzovoort zullen allen werken zonder speciale acties aan de kant
van de operator. Als je een lokaal recovery programma hebt welk
vanuit een bestand gegevens terugzet, doe dan het volgende:
mknod /tmp/tapepipe p
rsh -n msdos dd if=/dev/ftape >> /tmp/tapepipe &
localrecovery /tmp/tapepipe
verwijder /tmp/tapepipe
wanneer je klaar bent.
Merk op dat ik gebruik maak van 'rsh
' naar de root gebruiker
op de MS-DOS computer. Dit werkt met een correct ingesteld
.rhosts
veld.
De configuratie op de 'tape144
' disk staat rsh
naar root
mogelijk, maar staat geen telnet
of rlogin
naar root toe,
logins zijn beperkt tot de console.
Dit is beter voor de beveiliging.
Als je je zorgen maakt over een root .rhost
bestand,
kun je een nieuwe gebruiker aanmaken op SAR#2, ``tapeuser
'',
met permissies voor bewerkingen op de tape-drive, maar niet op de disks.
(maak een nieuwe groep aan en plaats tapeuser in die groep,
pas dan een chown
en chmod
toe op de bestanden
/dev/rft*
en /dev/nrft*
).
Je backupprogramma moet dan bekend zijn met die gebruikersnaam in plaats
van met root. Natuurlijk moet er nu een .rhosts
bestand in
~tapeuser
op SAR#2 zijn.
Voor eigen gebruik, heb ik voor deze methode gekozen,
in plaats van een root .rhosts
.
Tenslotte de aanwijzingen voor een volledig herstel van een
geruïneerde harddisk. Hierbij wordt ervan uitgegaan dat de
Linux-partitie volledig onherstelbaar is.
Herformatteer zonodig de partitie zoals beschreven in de Linux
Installatie HOWTO. Boot de Linux computer vanaf SAR disk #1.
Wanneer daarom wordt gevraagd doe je de disk #2 in de drive.
Volg nu de aanwijzingen op in het bestand /root/notes
(dit was /tape144/root/notes
toen het op je Linux-computer
was gemount). Zodra beide computers zijn geboot, start je de benodigde
herstelroutine. Als je de backupscripts gebruikt, kun je het als volgt
doen:
rsh -n msdos dd if=/dev/ftape | afio -i -v -Z -c 1024 -
of
rsh -n -l tapeuser msdos dd if=/dev/ftape | afio -i -v -Z -c 1024 -
of
mknod /tmp/backpipe p
rsh -n msdos dd if=/dev/ftape >> /tmp/backpipe &
afio -i -v -Z -c 1024 /tmp/backpipe
afio
het overneemt.
De '-i
' switch geeft aan de bestanden relatief ten op zichte van
de huidige werkdirectory terug te zetten (wat de root is van de harddisk
partitie). '-v
' is verbose, de bestanden die worden teruggezet
worden opgesomd.
Met '-Z
' geef je afio mee dat dit een archief is met individueel
gecomprimeerde bestanden.
Met '-c 1024
' geef je aan dat het gebruik moet maken van een
5 MB streaming buffer ter voorkoming van veel terugspoelen van de tape.
De opdrachten in het bestand /tape144/root/notes
zouden vanuit
een script kunnen worden uitgevoerd. Toen ik het probeerde, kreeg ik rpc
setup foutmeldingen. Ik verwacht dat dit kwam doordat de opdrachten te
snel werden uitgevoerd, en de portmapper zichzelf nog niet goed had
geïnstalleerd. Ik bemerkte dat het handmatig intikken van de reeks
prima werkt, de reden dat ik dat heb aanbevolen.
Ik denk dat deze setup veilig is.
Houd er erg in dat iemand nog steeds toegang kan krijgen tot alle
bestanden als ze naar de tape-drive worden gezonden en de tape eruit
kunnen halen voordat je weer aanwezig bent, om vervolgens de tape zelf
uit te lezen. Mensen die in het bezit zijn van veel gevoelige gegevens
zouden kunnen overwegen de stroom gegevens te versleutelen.
Archiveer naar standaarduitvoer en stuur de uitvoer via een pipe door
naar het versleutelingsprogramma, en voeg de uitvoer daarvan toe aan de benoemde
pipe /tmp/tapepipe
zoals hiervoor werd beschreven.
Fouten in het herstelproces zullen erin resulteren dat alle bestanden
na dit punt onherstelbaar zullen zijn, aangezien het gehele archief nu
uit een enkel met DES versleutelde stroom gegevens bestaat.
Het is mogelijk opties met afio te gebruiken om ieder bestand in het
archief eerst via gzip te zenden, dan via een encryptie programma zoals
des, maar let op dat het eerst comprimeren een tamelijk hoeveelheid
bekende gewone tekst geeft waar vastbesloten code-krakers mee overweg
kunnen, dus een betere benadering zou kunnen zijn de gzip stap over te
slaan en eenvoudigweg de gegevens met des te versleutelen, ten koste
van meer ruimte op de tape. Onnodig te zeggen, dat met DES versleutelde
bestanden niet kunnen worden gecomprimeerd.
De rc.inet1
aanwijzingen die ik heb opgenomen, staan alleen
communicatie met het lokale netwerk toe, niet de rest van de wereld
via een gateway.
Tijdens een volledige hersteloperatie naar een lege harddisk
voorziet de SAR disk #3 in ftape.o
naar de MS-DOS computer via
NFS. Dit omdat een aantal oude versies van de ftape
module
een aantal van de tape-drives niet kan besturen wanneer er zich een
gemounte disk in het diskettestation bevindt.
Met nieuwere kernels kan het gehele NFS gedoe achterwege worden gelaten.
Dit is erg belangrijk.
***TEST*** de SAR recovery procedure.
Laat niets aan het toeval over.
Zorg er voor dat je op z'n minst één bestand vanaf je tape
naar de Linux-computer terug kunt zetten met behulp van slechts de SAR-disks
(d.w.z. zonder het mounten van de harddisk).
Als je de Linux-computer niet zonder ongemak voor nogal wat gebruikers kunt
herstarten, wijzig de setup-informatie op de SAR-disks dan zo dat
de ``linux
'' identiteit aan een andere MS-DOS computer wordt
toegekend en boot dan vervolgens de twee MS-DOS computers in Linux om er
zeker van te zijn dat alles werkt. Wijzig dan de ``linux
''
identiteit weer zoals het was zodat je bruikbare SAR-disks hebt.
Copyright 10 jan, 1995 door Christopher Neufeld ( neufeld@physics.utoronto.ca)
Gewijzigd 6 feb, 1996.
Gewijzigd 5 aug 1997.