Dobre rano,
Prosim opravte me pokud nemam pravdu. Prijde mi ze pouziti md raid 1 na ssd neni uplne nejlepsi. Pokud budu delat raid1, tak se pri vytvareni obsah prvniho disku prepise na druhy disk na blokove urovni. Tim si druhy disk bude myslet ze je cely obsazeny. Asi by se to dalo resit tim ze pokud necham oba disky zesynchronizovat, muzu je pote zfromatovat, tam by mel zafungovat trim. Nicmene md raid musi poslat trim oboum diskum. Nevim zdali to umi.
Radek
Trochu nad tím dumám, a je to zajímavý tenký led :-)
Tady o tom debatěj. Sesynchronizovat oba disky při vytváření mirroru je dobré k tomu, aby se později ten mirror dal podrobovat pravidelné kontrole (porovnávat oba disky). Protože ta kontrola jede šmahem po celé ploše na blokové vrstvě, o vrstvu níž, než žije filesystém (a o filesystému nic neví).
TRIM resp. Discard tu pravidelnou kontrolu nijak neovlivní = ani neusnadní. Trim totiž z filesystému MD RAIDem de facto jenom "propadne skrz", aniž by si RAID vedl nějaká metadata pro svou pozdější potřebu, který blok je obsazený (má se kontrolovat) a který nikoli (při periodické kontrole na něj kašlat, minimálně nekontrolovat disky v zrcadle proti sobě).
Pravidelně kontrolovat celou plochu RAIDu je vhodné, protože se tím včas objeví vadné sektory. Protože když se pravidelná kontrola zanedbá, mohou vadné sektory vzniknout potichu na obou discích. Třeba na různých adresách (LBA offsetech) - ale v logice RAIDu to znamená, že oba disky budou při kompletním přečtení označeny za vadné.
Takže v tomto ohledu: počáteční sync ano, bez ohledu na to, že filesystém stejně poroste "od prázdného disku" a postupně ho zaplní svým platným payloadem a metadaty - a cokoli zapsaného bude z principu synchronní mezi oběma disky.
Ten počáteční sync lze vypnout argumentem --assume-clean, ale pak je myslím vhodné, vypnout taky pravidelnou kontrolu :-(
Tak mě napadá, resp. vrtá mi hlavou, jak je vůbec možné, že při pravidelné kontrole není principielně na škodu taky TRIM/Discard. Touto transakcí totiž disku říkáte "tento prostor je volný" = lze zrecyklovat, v případě potřeby přemapovat apod. Chápal bych to tak, že pokud takový sektor přečtete, není definováno, co tou operací získáte za data.
Takže nemá smysl, řešit jejich porovnání mezi disky navzájem při pravidelném RAID skenu. Je vůbec platná operace, číst ze sektoru, na který byl naposledy proveden TRIM? A je v tom případě skutečně uvolněn? Neznamená to spíš, že při pokusu o čtení se ten sektor musí napřed někam namapovat? Takže ten TRIM přijde vniveč? Spousta dobrých otázek :-)
No on na to
zřejmě pamatuje ATA standard (hledejte první odpověď, která se zabývá variantami "Read After Trim"). Variant chování disku je dle normy možných několik, konkrétní model disku nemusí podporovat všechny, existuje ATA příkaz na zjištění podporovaných variant, a vyšší vrstvy (FS, RAID) si zřejmě mohou říct o konkrétní variantu... Zajímavé věci toto, asi bych to měl někdy pod Linuxem vyzkoušet. A zapnout si k tomu "maximum verbosity" :-) Jestli MDRAID oficiálně TRIM podporuje, měl by si být této nuance vědom. Heh vždyť ona se ta situace pro konkrétní RAID volume může změnit i výměnou disku za jiný kus (/model / verzi firmwaru).
Každopádně mi z toho plyne, že správně by bylo, použít FS, který si redundanci nějakých sektorů/bloků/clusterů prostě alokačních jednotek řeší sám, a případnou kontrolu provádí jenom nad bloky, které má dle metadat alokovány do souborů (modulo ještě třeba "děravé" soubory = alokované pouze částečně). U FS které jedou přímo nad NAND Flash je to jasná věc. U FS které jedou nad blokovou vrstvou s TRIMem je to trochu nesamozřejmé. Který to umí? Co třeba ZFS?
Anebo mít RAID, který si taky vede nějakou "bitmapu využití bloků". Per sektor by to asi trochu zabolelo kapacitně (0.2%, nebo 0.025%), sežralo by to na režii pár IOps (asi by to nemuselo běžet v "direct" režimu), ty bitmapy by se přepisovaly pořád na jednom místě, a to tak že pravidelně (tohle by mohlo zabolet z hlediska opotřebení flashky, možná i plotny).
On MD RAID má v modernějších verzích headeru tzv.
write-intent bitmap - což se uplatní při rebuildu, ale nevede si to informaci o využití/nevyužití bloku vyššími vrstvami (navíc to má zřejmě dost hrubé rozlišení = velkou "velikost bloku"). Přesto ale: ejhle další věc, která by mohla zvyšovat počet zápisů na disky = opotřebení SSD, pokud porovnáváme "RAID 1" vs. "žádný RAID". Ta bitmapa dá vypnout, při vytváření pole mdadm --bitmap=none. Ale jakýkoli rebuild pak jede po celé ploše...