Pochybuji ze nadelas nejakou paradu tim, ze pridas mensi disk. Teoreticky to muze fungovat do te doby, nez se zaplni.. ale co pak? Pujde system do RO, nebo se po pridani disku snizi kapacita na N-nasobek nejmensiho?
"Nebo mi ukaz, jak udelam snadno a trivialne zrcadlo pres 3 disky ktery bude ale obsahovat 2 nikoli 3 kopie tehoz"
Koupis si HW raid ktery umi RAID-1E :-) (nebo si doimplementujes tu hruzu do mdadm)
Nepochopil jsi ho. Jde o to, že můžeš mít třeba RAID1 nad 2TB, 3TB a 4TB diskem a jeho kapacita bude (2+3+4)/2 = 4.5 TB. A disky můžeš libovolně přidávat a odebírat (tam samozřejmě musí platit zbývající kapacita > obsazené místo) a ono to na ně bude distribuovat jenom nové bloky / přehazovat ty co jsou potřeba - na rozdíl od MD, kde se musí udělat kompletní reshape.
Půjde to udělat a budete mít k dispozici 1 TB. Když pak ten 1 TB disk vyměníte za 2 TB, budete mít pro data 2 TB, když místo toho přidáte další 2 TB disk, budete mít 3 TB atd. Nebo třeba můžete k tomu 12 TB disku dát 12 jednoterových disků a budete mít 12 TB. Prostě je to flexibilní a BTRFS využije dostupné disky a zařídí, aby každý datový blok byl uložen alespoň na dvou z nich.
pokud je rec o RAID1 tak nemis byt demagog aby si pouzival termin jako "obecny", protoze RAID1 je RAID1, nic jako obecny neexistuje...
"BTRFS RAID1" znamena (v pripade NEpouziti RAID1) ze BTRFS nepouzije RAID1 i presto ze tomu RAID1 rika... pokud by BTRFS zacalo rikat manualovym strankam "BTRFS Filesystem" znamena to ze je to Filesystem nebo ze pojmenovana neco spatne?
Taky se mi ten nápad příliš nezamlouvá, ale výhody to nesporně má. Pouze filesystem může vědět, které bloky (extenty) jsou využité a které jsou prázdné. Při (re)synchronizaci RAIDu tak může synchronizovat pouze bloky, které jsou využité, což celou operaci až násobně urychlí. Při uvolňování bloků může zase zavolat TRIM, aby řadič věděl, že daný blok je prázdný a smí si s ním udělat, co sám uzná za vhodné.
Například takový, že můžete vzít tři 1TB disky, udělat na nich RAID1 (tedy vše je zapsané aspoň na dvou discích) a dostanete kapacitu 1,5 TB v RAID1. Kdybyste použil klasický RAID, kde se zrcadlí celé disky, budete mít kapacitu jenom 1 TB a k tomu jeden zbytečný disk.
Další výhodou je třeba to, že souborový systém ví, kde má zapsaná data a kde je jen smetí, a nebude to smetí synchronizovat na nový disk v případě výměny disku.
Tri disky jen se dvema kopiema (3T -> 1.5T) je zcela nestandadni RAID-1E. To uz muzete rovnou pouzit RAID5 a mit dokonce 2TB.
ad kde jsou data - mdraid to vi priblizne take - ma bitmapy (tedy vi co se zmenilo - predpokladam ze nevyuzivana cast disku se nikdy menit nebude). A jakykoliv hw raid zvladajici trim tuhle informaci dostane podobne.
Ten RAID1 se třemi stejnými disky byl jen příklad, jak jde s disky „kouzlit“, netvrdil jsem, že je to nejlepší využití těch disků. Můžete mít tři různě velké disky, BTRFS to opět sám poskládá, aby data byla vždy aspoň na dvou discích. A nemusíte čarovat s LVM a nějak to ručně skládat po oddílech.
Trim se pokud vím používá na větší oblast, než je jeden blok, takže mdraid se to dozví teprve tehdy, když se vyprázdní souvislá řada bloků.
to ze si obecny RAID1 neprovozoval, neznamena ze kdyz pouzijes BTRFS RAID1 kde ale nebudou vsechna data mirrorovana na vsechny disky, ze pouzijes RAID1, ale ze pouzijes neco cemu BTRFS rika RAID1 ale pritom to neni RAID1... muzes tomu rikat RAID1E, ale rozhodne ne RAID1 protoze to definici RAID1 NEsplnuje...
taky je rec o tom ze RAID1 je jenom 1, opakovanim toho ze BTRFS rika RAID1 necemu co NENI RAID1 z toho pravdu neudelas...
Tohle je RAID1: https://cs.wikipedia.org/wiki/RAID#/media/File:RAID_1.svg
Cokoliv jineho NENI RAID1, tedy BTRFS RAID1 je ve zkutecnosti RAID1E:
https://en.wikipedia.org/wiki/Non-standard_RAID_levels#/media/File:RAID_1E.png
Jaky vyznam ma michat RAID do filesystemu? Jezi se me z toho chlupy.
Krom již uvedeného (libovolný počet libovolně velkých disků) je to taky ochrana dat.
BTRFS dělá checksum bloků, takže pokud z jednoho disku přečte data a checksum neodpovídá, tak to může načíst ještě z vedlejšího disku a pokud checksum odpovídá, tak ví, že tato data jsou správná. (A může to potom zapsat i na ten první disk a tu chybu opravit.)
Zatímco na klasickém mirroru se bloky vrací tak jak jsou a když jeden z disků vrací špatný blok, tak to md nepozná (nekontroluje data proti druhému disku ani nemá checksum bloků) a stejně nepozná, který z disků obsahuje správná data. Navíc staré systémy souborů nedělaly ani checksum na data, takže ani starý fs nepozná, že md vrátil špatný blok. (Dnes tuším třeba XFS má alespoň checksum pro metadata.)