Hard Disk Upgrade Mini Howto

Yves Bellefeuille yan@storm.ca & Konrad Hinsen hinsen@cnrs-orleans.fr Vertaler: Reggy Ekkebus, reggy@zeelandnet.nl v2.1, 20 oktober 1999 Hoe een Linux systeem overzetten van de ene naar de andere harddisk

Inhoudsopgave

1 Introductie 1 2 Installeer de beide schijven in je systeem 2 3 Unmount niet Linux partities en netwerk drives 3 4 De nieuwe disk partitioneren 3 5 De nieuwe disk formateren 4 6 De nieuwe disk mounten. 4 7 Het kopiëren van de files van de oude naar de nieuwe disk 5 8 Het aanpassen van /new-disk/etc/fstab als nodig. 7 9 LILO voorbereiden om van de nieuwe disk te booten 7 10 Een boot diskette maken (optioneel) 8 11 De oude disk verwijderen 10 12 Re-boot je systeem, en pas de LILO configuration file aan 10 13 Erkentenis 10

1 Introductie

Dit document beschrijft hoe je een geheel Linux systeem van de ene naar de andere harddisk kunt migreren incl Lilo

In  deze  beschrijving  is  "/dev/hda"(de eerste IDE hard disk) dit is de öld"disk en
"/dev/hdb"(tweede IDE hard disk) dit is de "new"disk.
Specifieke partities op de öld"disk verwijzen naar "/dev/hda1", "/dev/hda2", en zo
verder.  Specifieke partities op de "new"disk verwijzen naar "/dev/hdb1", "/dev/hdb2",
en zo verder.

De uitleg van dit document is gebaseerd op een Red Hat 6.0 systeem, maar het is ook
getest op een Debian 2.1, Slackware 3.5 and SuSE 6.2 systeem en daar hebben we een paar
verschillen ontdekt die we genoteerd hebben.
Als de commando's niet goed werken op jouw systeem laat het ons dan weten en vertel
tevens welke distributie je gebruikt.

2 Installeer de beide schijven in je systeem

Op moderne systemen kunnen vier "EIDE"devices aangesloten worden op de controller, dus
het zou geen probleem moeten zijn om beide harddisks in je systeem te installeren, ook al
heb je al andere EIDE devices.  Hard disks en CD-ROM drives zijn typische EIDE devices.
Floppy drives en tape drives zijn normaal op de floppy drive controller aangesloten.
SCSI adapters zijn flexibeler:  zij accepteren zeven devices.  Dus als jij geluk hebt
(of rijk bent) en je hebt een SCSI adapter, dan wist je dit misschien al en je weet
waarschijnlijk ook al welke devices SCSI devices zijn!  Voor meer informatie zie:  SCSI
How-To.
Zelfs op de oudere systemen kun je twee harddisks op de controller aansluiten, zodat
je toch nog beide harddisks tegelijkertijd kan installeren.  Alhoewel, als je een ander
device naast de harddisk hebt geïnstalleerd bv een CD-ROM dan moet je deze CD-ROM eerst
verwijderen alvorens je de de nieuwe harddisk kan installeren naast de oude.
Je moet de harddisk wel als "masteröf als "slaveïnstalleren (zie de jumper settings).
Normaal kan je de jumper setting op de disks zelf vinden, zo niet kijk dan in de manual
of kijk bij de fabrikant.
Je moet ook de BIOS op de hoogte stellen van je nieuwe disk "geometry".  Normaal kom je
in het BIOS setup programma door tijdens het booten een bepaalde key combinatie in te
typen.  Hier onder staan wat key combinaties:
   • Acer notebooks:  F2 key tijdens Power-On Self-Test (POST)
   • American Megatrends (AMI): Del tijdens Power-On Self-Test
   • Award:  Del, of Ctrl-Alt-Esc
   • Compaq:  F10 key nadat het vierkantje verschijnt boven in de rechter hoek van het
     scherm gedurende de boot-up
   • Dell:  Ctrl-Alt-Enter
   • DTK: Esc key tijdens Power-On Self-Test
   • IBM Aptiva 535:  F1 gedurende power-on schuift het vierkantje met de golvende
     streepjes in de rechter boven hoek.  (Is dit ook zo met andere Aptiva modellen?)
   • IBM PS/2:  Ctrl-Alt-Del, dan Ctrl-Alt-Ins wanneer de cursor in de rechter hoek is.
   • Mr.  BIOS: Ctrl-Alt-S tijdens Power-On Self-Test
   • Packard Bell:  Voor sommige modellen, F1 or F2 key tijdens Power-On Self-Test
   • Phoenix:  Ctrl-Alt-Esc, of Ctrl-Alt-S, of Ctrl-Alt-Enter
   • Veel oude systemen hebben een installatie of referentie diskette nodig

(We zijn geïnteresseerd in informatie over andere Bios-en en ontvangen graag de info
zodat we ze aan de lijst kunnen toevoegen).
Re-boot je systeem en log-in als root.  Als je het "su"commando gebruikt om root te
worden, gebruik dan "su -", met de hypen optie

3 Unmount niet Linux partities en netwerk drives

Sommige mensen vinden het leuk om andere partities van andere besturings systemen te
mounten (DOS,Windows, OS/2, etc.)  zodat ze ze onder Linux kunnen gebruiken.  Enkel deze
partities moet je maken en kopiëren onder hun eigen besturingssysteem, je moet ze wel
eerst Unmount-en alvorens een Linux partitie te kopiëren.  Als je bijvoorbeeld een DOS
partitie hebt gemount onder /dos dan moet je deze eerst Unmount-en met het commando:
   • umount /dos
Note:  Het commando is "umount"zonder de eerste letter "nïn het woord "Unmount".
Je moet ook de netwerk drives Unmount-en.

4 De nieuwe disk partitioneren

Gebruik dit commando om de nieuwe disk te paritioneren:
   • fdisk /dev/hdb
EIDE devices zijn gedefinieerd als hda, hdb, hdc, en hdd in de /dev directory.
Partities op deze disks kunnen een range hebben van 1 tot 16 ook in de /dev directory.
Bijvoorbeeld, /dev/hda4 verwijst naar partitie 4 op hard disk a (Eerste EIDE hard disk).
SCSI devices worden genoteerd als devices sda, sdb, sdc, sdd, sde, sdf en sdg in de /dev
directory.  Op dezelfde manier, partities op deze disks kunnen een range hebben van 1 tot
16 en ook in de /dev directory.  Bijvoorbeeld, /dev/sda3 verwijst naar partitie 3 op SCSI
disk a (Eerste SCSI hard disk).
Voor Linux partities met het ext2 file systeem, gebruik je systeem ID 83.  Voor swap
partities, gebruik je ID 82.
Voor meer informatie over partitionering zie:  Installation Howto en de Partition Mini
How-To.
Als je harddisk meer dan 1024 cylinders heeft, bekijk dan even de Large Disk Mini How-To.
In het kort, je moet alle files die Linux gebruikt om te booten binnen de 1024 hebben
staan.  Een manier om dit te doen is een kleine partitie te maken van ca (5 mb o.i.d.)
enkel voor de /boot directory aan het begin van de disk.  (Slackware enkel:  De kernel is
in /vmlinuz anders dan /boot/vmlinuz.  Dus je moet ze beiden in de / directory zetten en
de /boot directory in deze partitie.)
Partities voor systemen anders dan Linux moeten gemaakt worden met hun eigen fdisk of
equivalent commando.

5 De nieuwe disk formateren

Gebruik het volgende commando om een nieuwe disk te formateren ext2fs
   • mkfs.ext2 /dev/hdb1
Om de disk op slechte blokken te checken (physical defects), kun je de -c optie toevoegen
dit voor "/dev/hdb1".
Als de nieuwe disk meer dan een Linux partitie heeft, formateer dan de andere partities
met "mkfs.ext2 /dev/hdb2", "mkfs.ext2 /dev/hdb3", en zo verder.  En voeg de -c optie toe
als nodig.
(Note:  met oudere distributies, werkte het commando "mkfs -t ext2 -c /dev/hdb1"niet om
te checken op slechte blokken.  Dit in tegen stelling met wat er in de man pages stond
bij Red-Hat, Debian or Slackware.  Dit is nu gefixed.)
Gebruik het volgende commando een swap partitie te formateren:
   • mkswap /dev/hdb1
Je kunt ook hier de -c optie gebruiken voor "/dev/hdb1öm te kijken voor bad blocks.

6 De nieuwe disk mounten.

Maak een directory waar je de disk wil mounten, bv /new-disk en mount hem hier:
   • mkdir /new-disk mount -t ext2 /dev/hdb1 /new-disk
Als de nieuwe disk meer dan een Linux partitie heeft, mount ze dan allemaal onder de
directory /new-disk in hetzelfde patroon zoals je ze later wil gebruiken.
Bijvoorbeeld:  De nieuwe disk heeft vier partities, als volgt:
   • /dev/hdb1:  /
   • /dev/hdb2:  /home
   • /dev/hdb3:  /var
   • /dev/hdb4:  /var/spool
Mount de vier partities onder /new-disk als volgt:
   • /dev/hdb1:  /new-disk
   • /dev/hdb2:  /new-disk/home
   • /dev/hdb3:  /new-disk/var
   • /dev/hdb4:  /new-disk/var/spool
Je moet de mount punten maken voor elk "level"voordat je de partities mount op dat level.
bv:

   • mkdir /new-disk (1st level) mount -t ext2 /dev/hdb1 /new-disk
   • mkdir /new-disk/home (2nd level) mount -t ext2 /dev/hdb2 /new-disk/home
   • mkdir /new-disk/var (2nd level also) mount -t ext2 /dev/hdb3 /new-disk/var
   • mkdir /new-disk/var/spool (3rd level) mount -t ext2 /dev/hdb4 /new-disk/var/spool
Als je een mount punt hebt gemaakt /new-disk/tmp dan moet je wel de directory's
permissies goed zetten zodat alle gebruikers er gebruik van kunnen maken:
   • chmod 1777 /new-disk/tmp

7 Het kopiëren van de files van de oude naar de nieuwe disk

Je kunt het best naar single-user mode gaan voordat je begint met het kopiëren van de
files, dit omdat er dan geen daemons meer draaien en niemand meer kan inloggen en er ook
geen log-files meer lopen.
   • /sbin/telinit 1
Als je de harddisk wil kopiëren dan wil je alles kopiëren incl directory's en bestanden,
inclusief links.
Alhoewel, je niet de directory /new-disk wilt kopiëren, want dan kopieer je de disk
in-zichzelf!
Verder moet je een /proc directory maken op de nieuwe disk, maar je wilt niet de inhoud
ervan kopiëren:  /proc is een "virtueel"file systeem en heeft eigenlijk geen files.  Maar
bevat informatie over processen die op het systeem draaien.
Hier zijn verschillende mogelijkheden om de schijf te kopiëren.  Als je een grote schijf
hebt of weinig geheugen hebt dan duurt het een tijdje Je kan ervan uitgaan dat je ca 10
Mb/min kan kopiëren, maar soms meer.
Je kan het kopieerproces volgen door gebruik te maken van het "df"commando op een andere
terminal.  Je kunt ook "watch dföf "watch ls -l /new-disk"gebruiken zodat het scherm
elke 2 seconden wordt ververst; druk Ctrl-C om het af te breken.  Let wel dat als je
"watch"gebruikt dit ook het kopiëren kan vertragen.
   • cp -ax / /new-disk
Dit is de simpelste methode, maar werkt alleen als je Linux systeem op een schijf staat.
De -a optie behoud het origineel systeem zo goed als mogelijk.  De -x optie limiteert
cp tot een enkel file systeem; dit is nodig om te vermijden dat de /new-disk en /proc
directory's worden gekopieerd.
(SuSE enkel:  Enkel met deze methode , moet je ook een directory /dev/pts maken op de
nieuwe disk.  gebruik hiervoor het commando "mkdir /new-disk/dev/pts".)
(Note:  Als je de -x optie gebruikt, recente versies van cp maken dan de directory's
/new-disk/new-disk en /new-disk/proc, hoewel de directory's leeg blijven.  Als
deze directory's zijn aangemaakt moet je deze /new-disk/new-disk verwijderen , en
/new-disk/proc houden .)

   • cd / && echo cp -a `/bin/ls -1Ab | egrep -v "ˆ new-disk$|ˆ proc$„ /new-disk | sh
(Typ dit allemaal op een regel)
Deze gaat naar de root directory en copieert dan alle files behalve /new-disk en /proc
naar /new-disk.  Note De eerste optie achter ls is het nummer 1 en niet letter L!
Dit commando zou in alle omstandigheden moeten werken.
   • (cd / && tar cpf - .  –exclude new-disk –exclude proc) | (cd /new-disk && tar xpf -)
(Typ dit allemaal op een regel)
Deze gaat naar de root directory "tartälles behalve /new-disk en /proc, gaat dan naar
/new-disk en üntart"daar alles.  Note:  er moet geen slash voor of achter de namen van
directory's in de –exclude opties
(Noot:  De optie -l werkt niet, als tar de directory's /new-disk en /proc aan het maken
is, alhoewel het niet de inhoud copieert.  Daarom heeft de tar -l optie niet hetzelfde
gedrag als de -x optie met oudere versies van cp.)
Deze methode is wat langzamer dan de andere.
   • cp -a /bin /boot /dev /etc /home /lib /lost+found /mnt /root/sbin /tmp /usr /var
     /new-disk
(Typ dit allemaal op een regel)
De laatste directory, /new-disk, is de bestemming voor het cp commando.  Alle andere
directory's zijn de bronnen.  Daarvoor, kopiëren we alle directory's in de lijst naar
/new-disk.
Met deze methode kun je simpel een lijst maken van alle directory's die je wilt kopiëren.
Hier hebben we alle directory's in een lijst gezet behalve /new-disk en /proc.  als je
om een of andere redenen geen andere methode kan gebruiken, kun je altijd deze methode
gebruiken om handmatig alle directory's te kopiëren die jij selecteert.
Als je deze methode gebruikt, en er staan files in de root directory zelf, dan heb je een
ander commando nodig om deze te kopiëren.  Dit is speciaal nodig met Debian en Slackware
sinds deze distributies files root directory hebben gezet:
cp -dp /* /.* /new-disk
Nadat je een van deze commando's hebt gebruikt, moet je ook nog de /proc directory maken
op de nieuwe disk, als deze nog niet bestaat:
   • mkdir /new-disk/proc
Als je wilt kun je nu de file structuur laten nakijken op de nieuwe disk:
   • umount /new-disk
   • fsck.ext2 -f /dev/hdb1
   • mount -t ext2 /dev/hdb1 /new-disk

Als de nieuwe disk meer dan een partitie heeft, dan moet je hem Unmount-en vanaf önder
af"voordat je fsck.ext2 gaat runnen:  Zoals in het voorbeeld hier boven moet je eerst de
3e level partities Unmount-en, dan de 2e level partities, en dan de 1e level partities.
Je kan ook twee disks met elkaar vergelijken, om er zeker van te zijn dat de files goed
zijn gecopieerd:
   • find / -path /proc -prune -o -path /new-disk -prune -o -xtype f -exec cmp {}
     /new-disk{} \;
(Typ dit allemaal op een regel)
(Slackware enkel:  Een basis Slackware installatie ("A"series enkel) zit het
"cmp"commando niet in, dus als een een basis installatie hebt dan kun je dit commando
niet runnen.  De "cmp"commando zit in de "AP1"series.)
Deze vergelijkt enkel reguliere files, dus geen character of block special files (in
de /dev directory), sockets, etc.,sinds het "cmp"niet goed werkte.  Wij ontvangen graag
suggesties over hoe deze "special"files te vergelijken.

8 Het aanpassen van /new-disk/etc/fstab als nodig.

Als je nieuwe disk niet dezelfde partities of verband heeft als de oude disk, dan moet je
de /new-disk/etc/fstab file aanpassen.
Wees er zeker van dat de disk partities van de (eerste column) overeenkomen met het
verband dat je hebt op de nieuwe disk, als eenmaal de oude disk is weggehaald en je mount
enkel de "/"partitie zoals hierboven in de tweede column.
Voor meer informatie over de file /etc/fstab, zie Linux System Administrator's Guide,
sectie 4, onder "Mounting and unmounting".
Voor swap partities, gebruik een lijn als hieronder:
   • /dev/hda1 swap swap defaults 0 0

9 LILO voorbereiden om van de nieuwe disk te booten

(Dank aan Rick Masters voor het helpen hierbij)
We gaan ervan uit dat LILO op de Master Boot Record (MBR) is geinstalleerd.  Dit schijnt
de meest normale configuratie te zijn.  Als je LILO wilt installeren op de tweede
harddisk, die later de eerste harddisk wordt.
Edit de file /new-disk/etc/lilo.conf als volgt:

                   disk=/dev/hdb bios=0x80       # vertel LILO dat de tweede
                                                 # disk moet behandelen als is het
                                                 # de eerste disk (BIOS ID 0x80).
                   boot=/dev/hdb                 # Installeer LILO op de tweede
                                                 # hard disk.
                   map=/new-disk/boot/map        # Locatie van de "map file".

                   install=/new-disk/boot/boot.b # File om naar de hard disk's
                                                 # boot sector te kopiëren.
                   prompt                        # Heb LILO laat "LILO boot:"
                                                 # prompt zien.
                   timeout=50                    # Boot default systeem na 5
                                                 # seconden. (Het getal is in
                                                 # seconden.)
                   image=/new-disk/boot/vmlinuz  # Locatie van de Linux kernel. De
                                                 # actuele naam met nummer
                                                 # Voorbeeld:
                                                 # "vmlinuz-2.0.35".
                      label=linux                # Label voor Linux systeem.
                      root=/dev/hda1             # Locatie van de root partitie op
                                                 # de nieuwe hard disk. Verander dit
                                                 # als nodig voor jou systeem.
                                                 # Note  Je moet wel de toekomstige
                                                 # locatie opgeven, als de oude
                                                 # eruit gehaald wordt
                       read-only                 # Mount partitie read-only
                                                 # eerst, om fsck te runnen.
(Slackware enkel:  gebruik "image=/new-disk/vmlinuz".)
Als je een SCSI harddisk gebruikt, dan moet je de regel die "initrd"bevat aanpassen, zie
je bestaande /etc/lilo.conf file.
Installeer LILO op de new disk:
   • /sbin/lilo -C /new-disk/etc/lilo.conf
De -C optie vertelt LILO welke configuratie file te gebruiken.

10 Een boot diskette maken (optioneel)

Als je wilt kun je ook een boot diskette maken, voor het geval als je problemen hebt
tijdens het booten van de nieuwe disk.
Doe een lege diskette in de A: drive, formateer hem en maak er een filesysteem op en
mount hem hierna:
   • fdformat /dev/fd0H1440
   • mkfs.ext2 /dev/fd0
   • mount -t ext2 /dev/fd0 /mnt
(Debian enkel:  Met Debian 2.x, gebruik "/dev/fd0u1440ïn plaat van "/dev/fd0H1440".  Met
Debian 1.x, gebruik "/dev/fd0h1440", met een kleine "h".)
(Debian enkel:  Met Debian 2.x, gebruik "superformatïn plaats van "fdformat".  Je kan
de fout negeren "mformat:  command not found".  Met Debian 1.x, als je het commando
"fdformat"niet hebt, dan kun je het weg laten als de floppy al geformateerd is.  In dit
geval, moet je de diskette nakijken op bad blocks door gebruik te maken van de "-c"na de
"mkfs.ext2"commando.)

(Slackware enkel:  gebruik "/dev/fd0u1440ïn plaats van "/dev/fd0H1440".  Met oudere
versies probeer "/dev/fd0h1440", met een kleine "h".)
(SuSE enkel:  Gebruik "/dev/fd0u1440ïn plaats van "/dev/fd0H1440".)
Kopieer alle files in de /boot op de diskette:
   • cp -dp /boot/* /mnt
(Red Hat enkel:  als de /boot directory twee files bevat t.w.vmlinux and vmlinuz (Note:
het verschil zit hem in de laatste letter), je moet dan enkel de vmlinuz file nar de boot
diskette kopiëren.  De vmlinux file is het zelfde enkel deze is gecomprimeerd om ruimte
te besparen
(Slackware enkel:  Kopieer de file /vmlinuz naar de boot diskette; gebruik hiervoor het
commando "cp /vmlinuz /mnt".)
Maak een nieuwe /mnt/lilo.conf als volgt:

                   boot=/dev/fd0                 # Installeer LILO op floppy disk.
                   map=/mnt/map                  # Locatie van de "map file".
                   install=/mnt/boot.b           # File de floppy zijn
                                                 # boot sector te kopiëren.
                   prompt                        # Have LILO show "LILO boot:"
                                                 # prompt.
                   timeout=50                    # Boot default systeem after 5
                                                 # seconds. (Value is in tenths of
                                                 # seconds.)
                   image=/mnt/vmlinuz            # Locatie van de Linux kernel. De
                                                 # actuele naam met nummer
                                                 # Voorbeeld:
                                                 # "vmlinuz-2.0.35".
                      label=linux                # Label voor Linux systeem.
                      root=/dev/hda1             # Locatie van de root partitie op
                                                 # de nieuwe hard disk. Verander dit
                                                 # als nodig voor jou systeem.
                                                 # Note  Je moet wel de toekomstige
                                                 # locatie opgeven, als de oude
                                                 # eruit gehaald wordt
                       read-only                 # Mount partitie read-only
                                                 # eerst, om fsck te runnen.
Installeer LILO op de boot diskette:
   • /sbin/lilo -C /mnt/lilo.conf
De -C optie vertelt LILO welke configuratie file te gebruiken.
Unmount de diskette:
   • umount /mnt

11 De oude disk verwijderen

Zet je systeem uit en verwijder de oude disk.  Vergeet niet de jumpers op de disk en de
BIOS aan te passen om de veranderingen door te voeren.

12 Re-boot je systeem, en pas de LILO configuration file aan

Re-boot het systeem.  Als je problemen hebt, dan kun je de boot diskette gebruiken die je
net hebt gemaakt.  Om van diskette te booten moet je je BIOS boot-up sequence veranderen
"A:, C:".
Je moet de file /etc/lilo.conf aanpassen, voor het geval je later nog eens LILO wilt
runnen.  Hieronder is een voorbeeld LILO file:

                   boot=/dev/hda                 # Installeer LILO op de eerste
                                                 # disk.
                   map=/boot/map                 # Locatie of "map file".
                   install=/boot/boot.b          # File om de floppy's
                                                 # boot sector te kopiëren.
                   prompt                        # Heb LILO laat "LILO boot:"
                                                 # prompt zien.
                   timeout=50                    # Boot default systeem na 50
                                                 # seconden. (Het getal is in
                                                 # seconden.)
                   image=/boot/vmlinuz           # Locatie van de Linux kernel.
                                                 # De actueel naam met nummer
                                                 # Voorbeeld:
                                                 # "vmlinuz-2.0.35".
                       label=linux               # Label voor Linux systeem.
                       root=/dev/hda1             # Locatie van de root partitie op
                                                 # de nieuwe hard disk. Verander dit
                                                 # als nodig voor jou systeem.
                                                 # Note  Je moet wel de toekomstige
                                                 # locatie opgeven, als de oude
                                                 # eruit gehaald wordt
                       read-only                 # Mount partitie read-only
                                                 # eerst, om fsck te runnen.

(Slackware enkel:  Use "image=/vmlinuz".)

13 Erkentenis

Dank aan:  Scott Christensen, Frank Damgaard, Alexandre Fornieles, David Fullerton,
Jerry Gaines, Chris Gillespie, Nicola Girardi, Per Gunnar Hansö, Richard Hawes, Ralph
Heimueller, Gerald Hermant, Andy Heynderickx, Paul Koning, Hannu Liljemark, Claes
Månsson, Rick Masters, Jason Priebe, Josh Rabinowitz, Douglas Rhodes, Valentijn Sessink,
Kragen Sitaker, Stephen Thomas, and Gerald Willman.

13. Erkentenis 11

Dit document mag in elke taal worden vertaald, als je dat doet stuur mij dan A.U.B. een
kopie van de vertaling.  Konrad Hinsen hinsen@cnrs-orleans.fr