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.
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" 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:
(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
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.
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.
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.
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:
Mount de vier partities onder /new-disk
als volgt:
Je moet de mount punten maken voor elk "level" voordat je de partities mount op dat level. bv:
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
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:
Als je wilt kun je nu de file structuur laten nakijken op de nieuwe 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.
/new-disk/etc/fstab
alsnodig.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:
(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.
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:
(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
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 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
".)
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 hinsen@cnrs-orleans.fr