změna velikosti UFS partition
Dan Lukes
dan at obluda.cz
Fri Mar 11 21:24:23 CET 2011
On 11.3.2011 20:43, Radek Krejča:
> Virtualizacni nastroje timto umoznuji, aby jejich vnitrni struktura predstavujici disk (v tomto pripade nekolik souboru) se tvarila na venek jako "nejak velka" a pritom byla mensi a v pripade potreby se roztahla na vice.
> Nicmene filesystem daneho hosta uz o tom nema tuseni a virtualizacni software hostovi v podstate podstrkuje falesne informace, kdy mu tvrdi, ze ta diskova jednotka ma kapacitu rekneme 20 GB, ale ona ve skutecnosti ma 5
Obavam se, ze uroven "lhani" je jeste o uroven niz. Dokonce ani
virtualizacni system nevi (pokud si to specialne nezjisti), ze onen 20GB
soubor, ktery prave vytvoril, zabira na hostujicim OS jen 5GB.
Zacnu tim, ze vlasttnost "sparse" neni neco, co by se muselo nejak
specialne nastavovat. Kazdy soubor na filesystemu (pokud dany FS vubec
principialne tuto feature podporuje) muze obsahovat "diry".
SPARSE soubory funguji takto - soubor ma nejakou deklarovanou velikost.
To ale neznamena, ze ma pro celou deklarovanou velikost take naalokovane
datove bloky.
Datove bloky se k souboru alokuji az v okamziku, kdy se do nich skutecne
zapisuje.
Cist lze i z neexistujicich bloku - pri cteni z takoveho mista souboru,
ktere nema alokovany datovy blok vrati filesystem "simulovany obsah",
obvykle same 0x00. Cteni samo nezpusobuje alokaci bloku. Teprve zapis ano.
Typicky zpusob, jak vytvorit soubor, ve kterem se nasledne emuluje
nejaky hostovany FS je takovy, ze vytvorite soubor, seeknete na
pozadovany konec (tim "nastavite" delku) a je hotovo. Soubor nema zadny
naalokovany datovy blok. Pokud se podivate pomoci 'ls', ukaze se vam
deklarovana velikost souboru - ale pomoci 'df' zjistite, ze na disku
zadne misto neubylo.
O neco pozdeji ho naformatujete - to znamena, ze na nekolik malo mist
zapisete formatovaci informace - kopie superbloku, nejake alokacni
tabulky, no proste to, co fs po disku potrebuje mit. Tim dojde k zapisu
na nekolik malo mist - a alokaci nekolika malo datovych bloku.
Deklarovana velikost souboru se nezmeni, 'df' ukaze ubytek trochy mista,
ale stale o dost mene nez je deklarovana velikost.
Pri zapisu souboru na simulovany disk dochazi k zapisu do ruznych mist
souboru a tim se teprve skutecne alokuji datove bloky.
Pokud datovy blok neni k dispozici, zapis selze (ENOSPC). Mimochodem -
programatorskym poucenim z tohoto popisu budiz poznani, za zapis muze an
nedostatek mista na disku selhat nejen pri "psani na konec", ale
kdykoliv - pri psani do kterekoliv casti souboru.
Pro zajemce nabizim, nasledujici ukazku:
> df -g / ; ls -la ; dd if=/dev/zero oseek=250G bs=512 count=1 of=sparse.file ; df -g / ; ls -la
> Filesystem 1G-blocks Used Avail Capacity Mounted on
> /dev/ada0s1a 27 17 7 70% /
> total 8
> drwxr-xr-x 2 dan wheel 512 Mar 11 21:08 .
> drwxr-xr-x 28 dan wheel 5120 Mar 11 21:06 ..
> 1+0 records in
> 1+0 records out
> 512 bytes transferred in 0.000121 secs (4227330 bytes/sec)
> Filesystem 1G-blocks Used Avail Capacity Mounted on
> /dev/ada0s1a 27 17 7 70% /
> total 88
> drwxr-xr-x 2 dan wheel 512 Mar 11 21:09 .
> drwxr-xr-x 28 dan wheel 5120 Mar 11 21:06 ..
> -rw-r--r-- 1 dan wheel 137438953472512 Mar 11 21:09 sparse.file
Jak je videt, deklarovana velikost vytvoreneho souboru vyznamne
previsuje celkovou velikost FS na kterem byl vytvoren (o volnem miste
nemluve) - a volne misto neubylo.
> Dalsi veci je, ze zvetsit teoreticky problem neni (pokud to samozrejme dany filesystem umi), ale zmensit je problem - na urezavane casti mohou byt data a ty je treba nejak osetrit.
To se v praxi (na zivem systemu) vetsinou dela tak, ze se se snazis
vsechny bloky, ktere jsou kandidaty na budouci "odriznuti" shromazdit do
jednoho souboru, ktery sisi pro tyto ucely vytvoril. Volne alokujes
primo, zabrane musis nejprve nekam premistit.
To, samozrejme, musu delat nekdo, kdo strukture FS rozumi a navic musi
mit k systemu dostatecne vhodny prostup = musi byt schopen "pridat" do
souboru konkretni blok, ktery oznaci, a musi byt chopen u existujicich
souboru manipulovat se seznamena alokovanych bloku.
Pote, co mas relokaci dokoncenou muzes FS zmensit a pritom odstranis
zminky o tom dvem pomocnem souboru.
Prave takovy tool pro FreeBSD neexistuje, a pokud vim, ani FS API
neobsahuje funkce, ktere by jeho vytvoreni umoznily (to znamena, ze by
stale mohl byt vytvoren, ale uz by nemohl pracovat na "zivem" FS).
Dan
More information about the Users-l
mailing list