Juurihakemiston siirtäminen

Kohteesta Linux.fi
Loikkaa: valikkoon, hakuun

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[muokkaa]

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[muokkaa]

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[muokkaa]

Levykuvamuoto[muokkaa]

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[muokkaa]

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