Kategória: Linux všeobecne

Zmenené: 18. január 2011

Zmena rozdelenia disku

Už som sa tu v jednom článku zamýšľal nad tým ako rozdeliť pevný disk na partície na domácom počítači. Dnes som sa rozhodol napísať ako postupovať, ak už je systém nainštalovaný a z nejakého dôvodu je treba rozdelenie partícií zmeniť. Konkrétne, budem súborový systém z jednej partície rozdeľovať na partícií viacero.

K tomuto „znovu rozdeleniu“ ma priviedli moje pokusy s notebookom Acer Extensa 5635ZG a Ubuntu na ňom. Pôvodne, ako v článku píšem, som neveľmi veril, že tento model notebooku bude s Linuxom fungovať, ale realita je iná a až na pár drobností fungovalo všetko na prvú inštaláciu. Keďže som bol pesimista, netrápil som sa rozdelením disku, len som oddelil partíciu s /home, pretože som predpokladal, že inštaláciu systému budem robiť viac ako raz. Pri testovaní funkčnosti som postupne pridával svoje nastavenia, až som sa dostal do stavu, že sa mi nechcelo tieto nastavenia robiť znova po novej inštalácii. Lenže zároveň som chcel aj niektoré samostatné partície, tak som sa rozhodol urobiť prerozdelenie partícií bez reinštalácie systému.

Pôvodný stav partícii bol 40 GB pre koreň a 20 GB pre /home, 10 GB pre swap a zvyšných cca 250 GB nepoužitých. Iste sami uznáte, že je to dosť nehospodárne rozdelenie (hlavne ohľadom nevyužitého miesta), takže poďme na to a prerozdeľme to tak, aby som dostal na samostatné partície aj /usr, /var i /usr/src. Hoci na internete existuje mnoho postupov ako tieto čachry robiť z bežiaceho systému, dal som prednosť použitiu záchranného CD, konkrétne System RescueCD. Táto záchranná distribúcia obsahuje všetky nástroje, ktoré sú pre tieto naše manipulácie potrebné.

Vytvorenie partícií

Tento krok popisovať nebudem do podrobností. Netrápil som sa príkazovým riadkom, ale pomocou gparted z RescueCD som si pomenil veľkosť partícií a pridal nové podľa potreby. Keďže mi pri tom zavádzala partícia so swap, tak som ju odstránil, aby som mohol posunúť (a následne zväčšiť) partíciu s /home. Výsledkom týchto mojich machinácií bolo, že pomenovanie (číslovanie) partícií nebolo v poradí, v akom boli partície na disku čo sa prejavilo vo výpise partícií pomocou fdisk -l riadkom:

fdisk -l /dev/sda
...
Partition table entries are not in disk order

Funkčnosti systému to nevadí, ale viem si živo predstaviť ako by som po nejakej dobe urobil chybu pri práci s partíciami, lebo ich často počítam z hlavy. Oprava poradia partícií nie je problém, dokáže to aj spomínaný fdisk:

fdisk /dev/sda

V okne programu (kto ho ešte nepoužil) ho ovládane pomocou jednoznakových príkazov, my použiteme tieto (v uvedenom poradí):

  • x (prepnutie do pokročilého režimu);
  • f (zoradenie premenovanie partícií podľa poradia);
  • w (zápis tabuľky partícií).

V mojom prípade to má za následok hlavne zmenu označenia partície pre /home, keďže však /etc/fstab v Ubuntu používa na označenie disku UUID, nájde pri štarte správnu partíciu, bez ohľadu na jej označenie. Očakával som problém pre paertíciu so swap, lebo je zmazaním a vytvorením novej sa zmenilo aj jej UUID, ale na moje prekvapenie partícia swap bola v /etc/fstab identifikovaná menom a nie UUID. Takže to bolo vlastne jedno. UUID partície swap som si našiel pomocou:

ls -l /dev/disk/by-uuid/
total 0
lrwxrwxrwx 1 root root 10 Aug 2 15:36 03dfa5f4-2bf1-4d8d-8958-eb6a02aae911 -> ../../sda9
lrwxrwxrwx 1 root root 10 Aug 2 15:36 668a81e4-bd10-4d65-90a7-44aadcafb035 -> ../../sda6
lrwxrwxrwx 1 root root 10 Aug 2 15:36 bc43d1dc-9e40-475d-83c9-cac5ee62c5a8 -> ../../sda1
lrwxrwxrwx 1 root root 10 Aug 2 15:36 d65dd6b3-f8a4-4a32-a473-786d2a0d70c0 -> ../../sda5
lrwxrwxrwx 1 root root 10 Aug 2 15:36 d692d6e5-729b-449b-8ad4-b82ac9847740 -> ../../sda7
lrwxrwxrwx 1 root root 10 Aug 2 15:36 f9a55cca-504d-454b-94c5-1495fb58397a -> ../../sda8

Keďže môj swap je na partícii sda8, tak som riadok pre swap v /etc/fstab zmenil na:

UUID=f9a55cca-504d-454b-94c5-1495fb58397a none swap sw 0 0

Pre istotu som sa reštartoval do systému notebooku, ale len pre kontrolu, že všetko funguje a fungovalo. Domovský adresár i swap boli pripojené na správnu partíciu, tak som sa zase reštartoval do prostredia záchranného CD a pokračoval.

Príprava presunu

Po vytvorení, zoradení partícií a malej úprave /etc/fstab prichádza na rad presun dát. Najprv však potrebujeme partície niekam pripojiť. Hoci je na pripájanie partícii predpripravený adresár /mnt (prípadne /media), na takéto dočasné pripojenia rád používam dočasný adresár, pretože po reštarte sa vytvorené súbory stratia a mne odpadá potreba čistenia… Aby som sa v tom nestratil, vytvoril som si v dočasnom adresári adresáre pomenované tak, ako v reále:

mkdir /tmp/koren
mkdir /tmp/usr
mkdir /tmp/var
mkdir /tmp/src

Do týchto adresárov som si pripojil príslušné partície:

mount /dev/sda1 /tmp/koren
mount /dev/sda5 /tmp/usr
mount /dev/sda6 /tmp/var
mount /dev/sda7 /tmp/src

Pre istotu som si skontroloval vlastníctvo a práva originálnych adresárov s pripojenými, a zistil som, že rozdiel je len pri src.

ls -ld /usr/src/
drwxrwsr-x 13 root 40 544 2009-08-02 15:15 /usr/src/

Ako sami vidíte, adresár vlastní iná skupina, ktorá má GID (číslo skupiny) 40 a keďže taká na záchrannom CD neexistuje, zobrazuju ako číslo a nie ako meno skupiny. Trochu odlišné sú i práva. Náprava je relatívne jednoduchá, najprv som si vytvoril skupinu s príslušným GID a potom som zmenil vlastníctvo a práva adresára /tmp/src tak, aby bolo všetko zhodné s originálom:

groupadd -g 40 src
chown :src /tmp/src
chmod 2775 /tmp/src

Presun údajov

Keď sme si to takto pekne všetko pripravili, môžeme sa pustiť do presunu súborových systémov (respektíve ich častí). Nepoužil som v tomto prípade príkaz mv, ktorý je na presun určený, ale spoľahol som sa radšej na príkaz cp, ktorý má prepínač na zaistenie zachovania všetkých atribútov súboru, v mojom prípade mi išlo najmä o vlastníctvo a práva:

cd /tmp/koren
cp -af usr/src/* /tmp/src/
rm -rf usr/src/*
cp -af usr/* /tmp/usr/
cp -af var/* /tmp/var/

Keže sme dáta kopírovali, nie presúvali, je treba ešte obsah pôvodných adresárov vymazať (src už vymazaný máme, inak by sme ho prekopírovali dva krát):

rm -rf usr/*
rm -rf var/*

Nastavenie pripájania

Po úspešnom presune dát ostáva už len nastavenie pripájania tak, aby sa naše nové partície pripojili na správne miesto. Tento krok je veľmi dôležitý, inak by sa pravdepodobne systém po reštarte ani nerozbehol, prípadne aj rozbehol, ale s veľmými problémami. Takže potrebujeme upraviť nastavenie v súbore /etc/fstab, ktorý je práve na tieto nastavenia určený. Pre moje potreby (teda partície a súborové systémy) som do neho pridal tieto riadky:

# /usr na /dev/sda5
UUID=d65dd6b3-f8a4-4a32-a473-786d2a0d70c0 /usr          reiserfs notail,noatime,relatime   0    0
# /var na /dev/sda6
UUID=668a81e4-bd10-4d65-90a7-44aadcafb035 /var          reiserfs notail,noatime,relatime   0    0
# /usr/src na /dev/sda7
UUID=d692d6e5-729b-449b-8ad4-b82ac9847740 /usr/src      reiserfs notail,noatime,relatime   0    0

UUID partícií som zistil z už spomínaného /dev/disk/by-uuid. Ak používate iný súborový systém, nezabudnite zameniť označenie reiserfs za to správne pre váš súborový systém a určite aj nasledujúce parametre pripojenia (napr. notail je len pre reiserfs).

Ostáva už len reštartovať do pôvodného systému a pre istotu skontrolovať, či je všetko v poriadku. V mojom prípade je!