LVM SSD raid felett

Fórumok

Tesztelek egy gépet, ahol egy SSD-kből összállított raid6 felett van LVM.
A /etc/lvm/lvm.conf-ben be van állítva a issue_discards = 1 azaz ha törlök egy logikai volume-ot akkor azt felszabadítja az SSD-n is.

Törléskor ilyen üzenetet kapok:
/dev/md1: BLKDISCARD ioctl at offset 1118110744576 size 1073741824000 failed: A művelet nem támogatott.

Ebből arra következtetek, hogy az LVM igen helyesen továbbadja a discard hívást a raid alrendszernek, de az nem adja tovább az SSD-knek.
Rá lehet valahogy beszélni, hogy mégis menjen?

Lehet az LVM-el is raid6-ot csinálni - ilyet még nem csináltam és sejtem, hogy itt sem menne, de hátha valakinek van más tapasztalata.

Üdv
Gyula

Hozzászólások

Ha még "teszt" állapotban van a rendszer, én első körben kipróbálnám, hogy csak egy lemezre teszek előbb egy lvm-et, és úgy tesztelem az LV törlést.
Abból kiderül, hogy fizikailag az SSD nem támogatja esetleg a discard opciót, vagy az MD driverben maradt ki valami fontos lépés.

Gyors google kereséssel ilyen találatokat kaptam:
https://serverfault.com/questions/508459/implementing-linux-fstrim-on-s…
https://www.centos.org/forums/viewtopic.php?t=3607
In addition, keep in mind that MD (software raid) does not support discards. [...] Red Hat also warns that software RAID levels 1, 4, 5, and 6 are not recommended for use on SSDs. During the initialization stage of these RAID levels, some RAID management utilities (such as mdadm) write to all of the blocks on the storage device to ensure that checksums operate properly. This will cause the performance of the SSD to degrade quickly.
https://wiki.debian.org/SSDOptimization

Egy ötlet: Ha "lv"-ket és raid-et is szeretnél egyszerre, gondolkodtál-e már a ZFS-en? Rugalmasabb és jobb adatkonzisztenciát kínál, mint a hagyományos md+dm+vfs alrendszerek kombinációi. Szerintem.

"In addition, keep in mind that MD ..."
Azért a cikk régiségéről elárul az utána levő hozzászólásban idézett kernel egyet s mást: rpm -qi kernel-2.6.32-358.el6.x86_64
Kérdés, hogy például a Debian jelenlegi 4.9-es kernelében ez az állapot mennyit változott?

És ha már itt tartunk, régóta foglalkoztat a kérdés, hogy ha az "fstrim -v /" szépen lefut, azaz

$ sudo fstrim -v /
/: 0 B (0 bytes) trimmed

az jót jelent, vagy ettől még lehet hogy a trim nem hajtódik valójában végre?
Azaz előfordulhat-e olyan, hogy például az LVM-crypt-MD rétegek valamelyike valójában lenyeli és false pozitív nyugtát ad felfelé?

Köszönöm az együttgondolkodást.
Az általad is linkelt oldalakon a raid1 és raid10-ről állítják, hogy megy a discard a többiről meg hogy nem.
Találtam viszont most egy bejegyzést: http://home.icequake.net/~nemesis/blog/index.php/archives/796
ami szerint ez nem ilyen egyértelmű.

A ZFS-re gondoltam, de elbizonytalanít az, hogy nem ez a teljes végleges komplexitás amit leírtam, hanem valami ilyesmi:
SSD --> RAID6 --> LVM --> DRBD (aktív-passzív) --> LVM --> virtuális gép lemeze

(Ebben az az okosság, hogy az alsó LVM-el ki lehet szakítani darabokat a virtuális gépeknek, amiket a DRBD tükröz két szerver között. A felső LVM-mel meg könnyen lehet snapshotot csinálni a virtuális gépről.
Azt még nem teszteltem, hogy mi van, ha az alsó LVM-en csinálok a master gépen snapshotot és egy idő után visszaállítom, vajon ilyenkor a visszaállítás is átszinkronizálódik vagy megzuhan a DRBD amiatt, hogy a metaadatai és a lemezen levő adatok deus ex machina megváltozik alatta - ez utóbbit tartom valószínűnek.

A zfs-nél meg azt írják, hogy adjuk neki oda a fizikai lemezeket és az lesz a jó neki.
Ha ettől el is tekintek és a DRBD device tetején csinálom a zfs-t az csak az egyik node-on lehet aktív (aktív-aktív nem lehet, mert a zfs nem cluster fs) azaz az összes DRBD ugyanazon a node-on kell aktív legyen a másikon passzív, így az összes virtruális gép az egyiken fut a másik nem csinál semmit. Ha külön DRBD van minden virtuális gépnek akkor egyik itt a másik a másikon lehet aktív.

Üdv
Gyula

Noss, ha snapshotról is szó van, akkor én messziről el is kerülném az LVM-et!

ZFS a diszkekre. posix layer nélküli sima zvol -okat csinálnia vm-eknek. És a zvol-okat meg egyesével lehet drbd-n szinkronban tartani, ha épp az kell.

Akkor akár a linuxot is ki lehet húzni a képletből ha külön lehet választani a storage backendet a vm-eket futtató résztől: iSCSI-n kiexportálni a zvol-okat. Ott a "kliens" (vm-eket futtató) oldalon még mindig lehet egy dm-raid1 -et csinálni két iscsi diszk közt.

Ha meg nem fontos a "live" replikáció, cserébe inkább odavernél a performanciának, akkor lehet azt csinálni, hogy 5 percenként nyomsz egy snapshotot és zfs send|ssh zfs receive -el tartod szinkronban a másolatot.

Mellesleg ebből a linkből, nekem nem tűnik túl bíztatónak az md layer trim supportja. A raid1/raid10-ről meg nem látom hol írnak, hogy menne.
dm-raid -del talán megy, mivel azt gondolnám, hogy mind a crypt, mind a pv/vg/lv rétegeknél a dm alrendszer az, ami kb. implementálja a trim parancsok megfelelő passthrough-ját. -> még egy indok a ZFS mellett. Szerintem.

Szia!

A cat /sys/block/sdX/queue/discard_zeroes_data és cat /sys/module/raid456/parameters/devices_handle_discard_safely mit ad vissza?

Van a gépben 5 egyforma - ők alkotják a raig6-ot itt discard_zeroes_data = 1 és van 2 másik fajta mirrorban azokra 0.

devices_handle_discard_safely = N
Ez utóbbit nem igazán értem, hogy miért, lehet, hogy azért, mert olyan is van a rendszerben amire nem igaz, viszont amikből a raid6 lesz azoknál az lsblk -D szerint megtörténik a nullázás. Hacsak nem ijeszt meg valaki azzal, hogy abból nagy baj lesz átállítom Y-ra és meglátjuk mi történik.

A devices_handle_discard_safely nincs alapból engedve, mert ha rosszul működik az trim, akkor adatvesztés lehet.
Ha biztosan jó a trim implementációja és a discard_zeroes_data 1 az összes RAID6-ban lévő diszknél, akkor kernel paraméterrel lehet engedélyezni: raid456.devices_handle_discard_safely=1

Most már csak az marad kérdés, hogy a Micron_5100_MTFD jól csinálja-e a trim-et.
Ki fogom próbálni, hogy engedélyezem, írok valamit a raid-re egy fs-en keresztül, megnézem mi van a raiden blokk szinten, törlöm a file-t és trimelem az fs-t utána megnézem, hogy blokk szinten nullákat kapok vagy a file eredeti tartalmát.