Juurihakemiston siirtäminen
Juurihakemiston siirtämiseen osiolta toiselle on käytännössä kaksi vaihtoehtoa, levykuvan luominen sekä tietojen kopiointi tavalliseen tapaan tiedostomuodossa. Levykuva on hyvä vaihtoehto, mikäli molemmat osiot ovat samankokoisia ja tyypiltään samankaltaisia (esimerkiksi tavallisia kiintolevyosioita ilman LVM:ää, salausta ym). Muussa tapauksessa on yleensä syytä siirtää juurihakemiston sisältö tiedostomuodossa.
Siirto muuttuu yksinkertaisemmaksi, mikäli juuriosion sijainti ja nimi eivät muutu. Tämä on usein ajankohtaista palautettaessa juurihakemistosta tehtyä varmuuskopiota.
Levykuvamuoto
Oletetaan, että alkuperäinen juurihakemisto sijaitsee osiolla, jonka laitetiedosto on /dev/sda1, ja se halutaan siirtää osiolle /dev/sdb1.
Käynnistetään kone joltakin live-cd:ltä. Varmistetaan, että osiot ovat samankokoisia ja kopioidaan osio seuraavilla komennoilla:
fdisk -l /dev/sda | fgrep sda1 fdisk -l /dev/sdb | fgrep sdb1 dd if=/dev/sda1 of=/dev/sdb1
mikä kopioi osion sda1 sisällön bitti bitiltä osion sdb1 päälle. Osiolla sdb1 oleva tiedostojärjestelmä ja kaikki tiedostot korvautuvat sda1:n vastaavilla. Mikäli alkuperäinen osio on sektorimäärältään uutta pienempi, loppu menee hukkaan, jos suurempi, seuraavaa osiota ylikirjoitetaan ja sen tai molempien tiedostojärjestelmät menevät rikki. Jos uusi osio on alkuperäistä pienempi, on sitä ja sen sisältämää tiedostojärjestelmää kuitenkin usein mahdollista jälkikäteen suurentaa sopivalla ohjelmalla. Huomaa, että osion koko sektoreina ei välttämättä täsmää, vaikka osiot olisi luotu giga- tai megatavutasolla samansuuruisiksi.
Tehdään uudesta juuriosiosta tarvittaessa aktiivinen (asetetaan sille boot-lippu). Parted-osiointityökalua käyttäen (juuriosiona sdb1) tämä onnistuisi komennolla
parted /dev/sdb set 1 boot on
Luodaan live-cd:n alla osiolle sdb1 liitospiste /mnt/uusijuuri komennolla
mkdir /mnt/uusijuuri
ja liitetään osiolla oleva tiedostojärjestelmä siihen komennolla
mount /dev/sdb1 /mnt/uusijuuri
Avataan asetustiedosto /mnt/uusijuuri/etc/fstab halutulla tekstieditorilla ja muutetaan /dev/sda1:een viittaavat rivit viittaamaan /dev/sdb1:een. Jos tiedostossa ei viitata osioon laitetiedostoilla (/dev/sdXY) vaan UUID-tunnuksella (muodossa UUID=xxx.yyy.zzz tai /dev/disk/by-id/ata-ST3120026A_3JT37VET-part5), on muutettava juurihakemiston (liitospiste /) UUID-tunnus uuden osion laitetiedostoksi (tässä /dev/sdb1). Myös uuden osion UUID-tunnusta voi käyttää; sen voi selvittää komennolla ls /dev/disk/ -l (tiedostot ovat symbolisia linkkejä) tai komennolla blkid.
Korjataan käynnistyslataimen (yleensä GRUB tai LILO) asetustiedostossa olevat viittaukseet /boot-hakemiston vanhaan sijaintiosioon sekä juuriosioon.
Grubin tapauksessa korjattaisiin kernel-rivin kohta root= esimerkiksi muodosta
root=/dev/sda1
muotoon
root=/dev/sdb1
Tässä kohdassa saattaa alun perin olla määriteltynä myös esimerkiksi /dev/disk/by-uuid/-alkuinen laitetiedosto, joka kuitenkin viittaa samaan osioon kuin /dev/sd-alkuinenkin.
Toinen Grubin asetustiedostossa korjattava asia on root-alkuinen rivi, joka saatettaisiin muuttaa esimerkiksi muodosta
root (hd0,0)
(eli sda1) muotoon
root (hd1,0)
(sdb1). Tätä ei tarvitse tehdä, mikäli /boot-hakemisto ei sijaitse siirretyllä juuriosiolla.
Lilon tapauksessa on korjattava boot=- ja root=-alkuiset rivit osoittamaan oikeaan laitetiedostoon. boot=-riviä ei muuteta, mikäli /boot-hakemisto ei sijaitse siirretyllä juuriosiolla.
Kun sekä fstab että käynnistyslataimen asetustiedosto on korjattu, täytyy käynnistyslatain asentaa uudelleen (riippumatta käytetystä käynnistyslataimesta). Tätä ei tarvitse tehdä, mikäli /boot-hakemisto ei sijaitse siirretyllä juuriosiolla.
Käynnistyslataimen uudelleenasennusta varten liitetään hakemiston /mnt/uusijuuri alle /dev- ja /proc-tiedostojärjestelmät komennoilla
mount -o bind /dev /mnt/uusijuuri/dev mount -o bind /proc /mnt/uusijuuri/proc
ja tehdään siitä tilapäinen juurihakemisto komennolla
chroot /mnt/uusijuuri
Grub voidaan asentaa uudelleen antamalla komento
grub
ja sen jälkeen esimerkiksi komennot
grub> root (hd1,0) grub> setup (hd1) grub> quit
riippuen /boot-hakemiston sijaintiosiosta ja -kiintolevystä. (hd1,0) on sama asia kuin sdb1 ja (hd1) sama asia kuin sdb.
Lilon uudelleenasennus onnistuu komennolla
/sbin/lilo
chrootista poistutaan komennolla
exit
Tietokone voidaan nyt käynnistää uudelleen, ja uudella juuriosiolla olevan järjestelmän pitäisi toimia.
Tiedostomuoto
Oletetaan, että juurihakemistoa ollaan siirtämässä osiolta, jonka laitetiedosto on /dev/sdc5 osiolle /dev/sda2.
Tehdään uudesta juuriosiosta tarvittaessa aktiivinen (asetetaan sille boot-lippu). Parted-osiointityökalua käyttäen (uutena juuriosiona sda2) tämä onnistuisi komennolla
parted /dev/sda set 2 boot on
Luodaan uudelle juuriosiolle tiedostojärjestelmä. Ext3-tiedostojärjestelmän luominen onnistuisi esimerkiksi komennolla
mkfs.ext3 -m 1 /dev/sda2
missä valitsimella -m asetetaan pääkäyttäjälle varattu osuus tiedostojärjestelmästä yhteen prosenttiin (oletuksena on kaksi prosenttia, mikä on yleensä aivan liikaa nykyisillä suurilla levyillä).
Liitetään uusi juuritiedostojärjestelmä. Liitospiste voitaisiin luoda komennolla
mkdir /mnt/uusijuuri
ja itse liitos suorittaa komennolla
mount /dev/sda2 /mnt/uusijuuri
Kopioidaan juurihakemiston (/) tiedostot uudelle osiolle komennolla
cp -ax / /mnt/uusijuuri
Linkit ja tiedostojen määreet säästetään ja myös hakemistot otetaan mukaan valitsimella -a. Juurihakemiston alle liitetyt muut tiedostojärjestelmät (esimerkiksi cd-levyt ja uusi juuriosio) jätetään huomiotta valitsimella -x.
Käynnistetään tietokone live-cd:ltä ja liitetään sekä vanha että uusi juuritiedostojärjestelmä. Liitospisteet niille voitaisiin luoda komennolla
mkdir /mnt/vanhajuuri /mnt/uusijuuri
ja liitos suorittaa komennoilla
mount /dev/sdc5 /mnt/vanhajuuri mount /dev/sda2 /mnt/uusijuuri
Avataan asetustiedosto /mnt/uusijuuri/etc/fstab halutulla tekstieditorilla ja muutetaan /dev/sdc5:een viittaavat rivit viittaamaan /dev/sda2:een. Jos tiedostossa käytetään laitetiedoston sijaan UUID-tunnuksia, muokataan tiedostoa kuten levykuvamuotoa käsittelevässä osassa kerrottiin.
Tarkistetaan, että hakemistosta /mnt/uusijuuri/dev/ löytyvät staattiset laitetiedostot console ja null. Mikäli jompaakumpaa tai molempia ei löydy, voi ne luoda komennoilla
mknod -m 600 /mnt/uusijuuri/dev/console c 5 1 mknod -m 666 /mnt/uusijuuri/dev/null c 1 3
Korjataan käynnistyslataimen (yleensä GRUB tai LILO) asetustiedostossa olevat viittaukseet /boot-hakemiston vanhaan sijaintiosioon sekä juuriosioon.
Grubin tapauksessa korjattaisiin kernel-rivin kohta root= esimerkiksi muodosta
root=/dev/sdc5
muotoon
root=/dev/sda2
Tässä kohdassa saattaa alun perin olla määriteltynä myös esimerkiksi /dev/disk/by-uuid/-alkuinen laitetiedosto, joka kuitenkin viittaa samaan osioon kuin /dev/sd-alkuinenkin.
Toinen Grubin asetustiedostossa korjattava asia on root-alkuinen rivi, joka saatettaisiin muuttaa esimerkiksi muodosta
root (hd2,4)
(eli sdc5) muotoon
root (hd0,1)
(sda2). Tätä ei tarvitse tehdä, mikäli /boot-hakemisto ei sijaitse siirretyllä juuriosiolla.
Lilon tapauksessa on korjattava boot=- ja root=-alkuiset rivit osoittamaan oikeaan laitetiedostoon. boot=-riviä ei muuteta, mikäli /boot-hakemisto ei sijaitse siirretyllä juuriosiolla.
Käynnistyslatain täytyy nyt asentaa uudelleen riippumatta käytetystä käynnistyslataimesta. Tätä ei tarvitse tehdä, mikäli /boot-hakemisto ei sijaitse siirretyllä juuriosiolla.
Käynnistyslataimen uudelleenasennusta varten liitetään hakemiston /mnt/uusijuuri alle /dev- ja /proc-tiedostojärjestelmät komennoilla
mount -o bind /dev /mnt/uusijuuri/dev mount -o bind /proc /mnt/uusijuuri/proc
ja tehdään siitä tilapäinen juurihakemisto komennolla
chroot /mnt/uusijuuri
Grub voidaan asentaa uudelleen antamalla komento
grub
ja sen jälkeen esimerkiksi komennot
grub> root (hd0,1) grub> setup (hd0) grub> quit
riippuen /boot-hakemiston sijaintiosiosta ja -kiintolevystä. (hd0,1) on sama asia kuin sda2 ja (hd0) sama asia kuin sda.
Lilon uudelleenasennus onnistuu komennolla
/sbin/lilo
chrootista poistutaan komennolla
exit
Tietokone voidaan nyt käynnistää uudelleen, ja uudella juuriosiolla olevan järjestelmän pitäisi toimia.
Varmuuskopion palautus
Levykuvamuoto
Käynnistetään tietokone esimerkiksi live-cd:ltä. Kopioidaan aikaisemmin luotu varmuuskopiolevykuva (tässä varmuuskopio.img) juuriosion (tässä /dev/sdb3) päälle.
dd if=varmuuskopio.img of=/dev/sdb3
Järjestelmän pitäisi nyt toimia kuten ennenkin.
Koska data löytyy samannimiseltä osiolta ja samasta paikasta kuin aikaisemminkin, ei esimerkiksi fstabia tai käynnistyslataimen asetuksia tarvitse muokata.
Tiedostomuoto
Käynnistetään tietokone esimerkiksi live-cd:ltä.
Luodaan juuriosiolle tarvittaessa uusi tiedostojärjestelmä, eli alustetaan se. Esimerkiksi ext3-tiedostojärjestelmän voisi luoda osiolle (tässä /dev/sdb3) vaikkapa komennolla
mkfs.ext3 -m 1 /dev/sdb3
missä valitsimella -m asetetaan pääkäyttäjälle varattu osuus tiedostojärjestelmästä yhteen prosenttiin.
Luodaan live-cd:n alla osiolle /dev/sdb3 liitospiste /mnt/juuri komennolla
mkdir /mnt/juuri
ja liitetään osiolla oleva tiedostojärjestelmä siihen komennolla
mount /dev/sdb3 /mnt/juuri
Kopioidaan varmuuskopioidut juurihakemiston tiedostot juuriosiolle komennoilla
cd /polku/varmuuskopiohakemistoon/ ls -A | xargs -I '{}' cp -ax '{}' /mnt/juuri
Jotta myös piilotiedostot tulisivat varmasti mukaan, putkitetaan komennolla ls -A tuotettu luettelo tiedostoista xargs-komennon kautta kopiontikomennolle cp. Linkit ja tiedostojen määreet säästetään ja myös hakemistot otetaan mukaan cp:n valitsimella -a. Varmuuskopiohakemiston alle mahdollisesti liitetyt muut tiedostojärjestelmät jätetään huomiotta valitsimella -x.
Tarkistetaan, että hakemistosta /mnt/juuri/dev/ löytyvät staattiset laitetiedostot console ja null. Mikäli jompaakumpaa tai molempia ei löydy, voi ne luoda komennoilla
mknod -m 600 /mnt/juuri/dev/console c 5 1 mknod -m 666 /mnt/juuri/dev/null c 1 3
Mikäli käytössä on GRUB-käynnistyslatain tai jos /boot-hakemisto sijaitsee eri osiolla kuin juurihakemisto, pitäisi järjestelmän nyt toimia kuten ennenkin.
Jos käytössä on LILO ja /boot-hakemisto sijaitsee juuriosiolla, täytyy käynnistyslatain vielä asentaa uudelleen seuraavalla tavalla:
Liitetään hakemiston /mnt/juuri alle /dev- ja /proc-tiedostojärjestelmät komennoilla
mount -o bind /dev /mnt/uusijuuri/dev mount -o bind /proc /mnt/uusijuuri/proc
ja tehdään siitä tilapäinen juurihakemisto komennolla
chroot /mnt/juuri
Asennetaan LILO-käynnistyslatain komennolla
/sbin/lilo
ja poistutaan tilapäisestä juurihakemistosta komennolla
exit