Zmenseni RAIDu a partition

Slávek Banko slavek.banko na axis.cz
Pondělí Červen 12 23:36:59 CEST 2017


On Monday 12 of June 2017 22:54:14 Jan Kasprzak wrote:
> Slávek Banko wrote:
> : On Monday 12 of June 2017 22:21:28 Jan Kasprzak wrote:
> : > 	Zdravim,
> : >
> : > na jednom stroji me ceka zmenseni sw RAIDu a diskovych oblasti,
> : > nad kterymi ten RAID bezi. Tak si to tady zkousim ve virtualnim
> : > stroji a zjistuji, ze asi nevim jek to presne udelat:
> : >
> : > - mam 4 disky /dev/vd[c-f], na kazdem partition /dev/vd[c-f]1 pres
> : > cely disk - na tom celem je RAID-10 /dev/md0
> : > - mam snahu pres mdadm --grow --size=<neco> /dev/md0 zmensit disk.
> : > Toto projde, ale ted nevim jak presne zmensit diskove oblasti pod
> : > tim - pres mdadm --detail /dev/md0 si vypisu "Used Dev Size" a
> : > naivne si predstavuji, ze presne takhle velkou partition mam
> : > vytvorit - spustim tedy  mdadm --stop /dev/md0, zrusim
> : > /dev/vd[c-f]1 a vytvorim novou partition presne podle "Used Dev
> : > Size".
> : > - mdadm ale odmita sestavit pole zpatky:
> : >
> : > # mdadm --assemble --scan
> : > mdadm: failed to add /dev/vdd1 to /dev/md/0: Invalid argument
> : > mdadm: failed to add /dev/vde1 to /dev/md/0: Invalid argument
> : > mdadm: failed to add /dev/vdf1 to /dev/md/0: Invalid argument
> : > mdadm: failed to add /dev/vdc1 to /dev/md/0: Invalid argument
> : > mdadm: failed to RUN_ARRAY /dev/md/0: Invalid argument
> : > mdadm: No arrays found in config file or automatically
> : >
> : > - kdyz vratim diskove oblasti na plnou velikost, tak totez projde,
> : > 	a mdadm --detail ukazuje spravnou (zmensenou) Used Dev Size
> : >
> : > Z toho usuzuji, ze tyto informace jsou i nadale ulozeny v
> : > superbloku MD pole, ktery ve verzi metadat 1.2 je az na konci
> : > diskove oblasti.
> : >
> : > Jeste je mozne, ze ten superblok je i nekde pobliz toho mista kde
> : > konci ta zmensena partition, ale ne presne. V manualove strance se
> : > pise:
> : >
> : >        -z, --size=
> : >               Amount  (in  Kibibytes)  of space to use from each
> : > drive in RAID levels 1/4/5/6.  This must be a multiple of the chunk
> : > size, and must  leave about 128Kb of space at the end of the drive
> : > for the RAID superblock.  If this is not specified (as  it 
> : > normally  is not) the smallest drive (or partition) sets the size,
> : > though if there is a variance among the drives of greater than 1%,
> : > a warn‐ ing is issued.
> : >
> : > Cili mozna by ta partition mela byt presne o 128k vetsi nez
> : > vypisuje "Used Dev Size"? Ale fdisk zrejme kvuli zarovnani
> : > "cylindru" nechce vytvorit partition presne o tuto velikost vetsi.
> : >
> : > Zkouseli jste nekdo zmensovat MD RAID pole? Jak se presne spocita
> : > velikost te zmensene fyzicke oblasti? Pripadne je tam jeste nejaka
> : > dalsi magie?
> : >
> : > 	Jeste je taky moznost, ze to takto nejde - ze musim zmensit
> : > pole pres --grow, a pak postupne vyhazovat jednotlive partisny z
> : > pole, zmensovat, vracet je po jedne do pole, a nechat
> : > synchronizovat.
> : >
> : > 	Diky,
> : >
> : > -Y.
> :
> : Pokud jsou metadata verze 0.90 nebo 1.0, jsou na konci oddílu a
> : muselo by se s nimi pohnout. Pokud ale jsou metadata verze 1.2, jsou
> : na začátku oddílu, takže pro zmenšování by to mělo být díky tomu
> : jednodušší.
>
> 	Nojovlastne, je to tak. Uz mi to nemysli takhle vecer.
>
> : Na přesnou shodu velikosti pole a oddílu si určitě nehraje - tedy
> : pokud oddíl není menší, než stanovená velikost pole. Takže nějaké
> : zarovnávání fdiskem by nemělo hrát roli.
> :
> : Při skládání pole, u kterého jsem měnil velikosti oddílů (v mém
> : případě to bylo zvětšování), se mi také vzpouzel - už si sice
> : nepamatuji, zda též hlásil Invalid argument, ale pomohlo mi při
> : assemble přidat ještě parametr: --update=devicesize
>
> 	Ja jsem zatim bisekci zjistil, ze kdyz vyhodim jeden disk z pole
> pomoci --fail a --remove, zmensim partition, a pak chci pridat zpet,
> tak pro partition s velikosti 15099904K (podle fdisk -l) musim zmensit
> pole az na Used Dev Size = 15083520, a az pak jde takto velka partition
> pridat do pole.
>
> 	Kdyz to spojim s tvou vyse uvedenou radou, tak skutecne jde
> zmensit pole na 15083520K Used Dev Size, pak pole stopnout,
> zmensit partisny na 15099904K, a pak --assemble s --update=devicesize.
> Cili pole musi mit "Used Dev Size" o 16384K (=16MiB) mensi nez je
> velikost fyzicke partition. Coz je teda brutalni rozdil, a je divne, ze
> se o nem nikde nepise (a naopak u popisu --size (cituji vyse) se uvadi
> tech 128k).
>

Těch 16 MiB je zajímavé. Informace o 128 KiB mi připadá neaktuální, 
protože zmiňuje "space at the end of the drive". Předpokládám, že to se 
mohlo týkat metadat verze 0.90 a 1.0.

V dokumentaci vidím pro metadata 1.2 jen to, že jsou 4 KiB od začátku 
disku. Ale zmiňovaná je ještě hodnota "Data Offset", která by měla být 
vidět ve výpisu mdadm --examine. Zdá se, že dříve bývala 1 MiB, zatímco 
nyní je 128 MiB. A od nějaké verze by mělo být možné zadat hodnotu ručně:

http://git.neil.brown.name/?p=mdadm.git;a=commitdiff;h=40c9a66a5c1a89d621daa2184888e66952b06a71

> 	Kazdopadne diky za popostrceni.
>
> -Y.

Pro zajímavost: Nedávno jsem na jednom "příliš chytrém" řadiči dělal RAID0 
pro každý disk. A když jsem pak řadič vyměnil, tak jsem viděl, že ten 
předchozí úžasný řadič si z každého disku ukrojil 550 MiB. Proti tomu 
vypadá 16 MiB docela zanedbatelně :)

-- 
Slávek


Další informace o konferenci Linux