Hard Disk Upgrade Mini Howto Yves Bellefeuille &ero Konrad Hinsen Vertaler: , v2.1, 20 oktober 1999 Hoe een Linux systeem overzetten van de ene naar de andere harddisk 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 "old" disk en "/dev/hdb" (tweede IDE hard disk) dit is de "new" disk.

Specifieke partities op de "old" 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.

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: .

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" of als "slave" installeren (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

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" in het woord "Unmount".

Je moet ook de netwerk drives Unmount-en.

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: en de .

Als je harddisk meer dan 1024 cylinders heeft, bekijk dan even de . 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.

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" om te kijken voor bad blocks.

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

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" of "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" alles behalve /new-disk en /proc, gaat dan naar /new-disk en "untart" 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 "onder 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.

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 , sectie 4, onder "Mounting and unmounting".

Voor swap partities, gebruik een lijn als hieronder: /dev/hda1 swap swap defaults 0 0

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.

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" in plaat van "/dev/fd0H1440". Met Debian 1.x, gebruik "/dev/fd0h1440", met een kleine "h".)

(Debian enkel: Met Debian 2.x, gebruik "superformat" in 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" in plaats van "/dev/fd0H1440". Met oudere versies probeer "/dev/fd0h1440", met een kleine "h".)

(SuSE enkel: Gebruik "/dev/fd0u1440" in 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

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.

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".)

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.

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