Backup-Met-MSDOS mini-HOWTO

Christopher Neufeld, neufeld@physics.utoronto.ca,
Vertaald door: Ellen Bokhorst, bokkie@nl.linux.org

v, 5 augustus 1997


In deze HOWTO wordt beschreven hoe een Linux compatibel tape-drive geïnstalleerd op een MS-DOS computer kan worden gebruikt om een backup te maken van een bestandssysteem op een Linux-computer.

1. Voorwoord/Introductie

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.

2. De techniek

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:

  1. wijzig de directory naar het mountpoint van de harddiskpartitie welke je wilt herstellen.
  2. als zich gemounte volumes op de backup bevinden en je wilt ze herstellen, maak de mountpoints dan binnen de harddiskpartitie en mount de volumes.
  3. Geef de opdracht:
    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
            
    
Hiermee wordt de tape op de remote computer ingelezen, het resultaat naar stdout geschreven, waar 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.

3. Opmerkingen

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.

4. Copyright

Copyright 10 jan, 1995 door Christopher Neufeld ( neufeld@physics.utoronto.ca)

Gewijzigd 6 feb, 1996.

Gewijzigd 5 aug 1997.