Hello, Freebsd-geom. I've just committed (a branch with) the project, I worked on for last month (and imagined for last two years). It is GEOM Events subsystem. What is it? We now have pretty impressive set of GEOM modules, which covers many areas: infrastructure support (like geom_part), encryption (like geom_eli) and, what is interesting me most, RAID transformations like geom_stripe, geom_mirror and geom_raid. One thing is missed from software RAIDs is spare drives and state monitoring (yes, I know, that geom_raid supports spare drivers for metadata formats which supports them, but it not universal solution). My long-standing dream was to write special daemon for this, but, when I got some time for this project, and started to design, I understood, that we have such daemon: devd(8). So, here it is. GEOM Events. Project consists of several parts (all are ready and commited to project branch!): (1) Simple kernel API, which wraps up devctl_notify() call to unify different GEOM events. Now 4 events are specified: (a) DISCONNECT -- when GEOM loses (orphans or throw away due to errors) underlying provider. (b) DESTROY -- when GEOM destorys it provider. (c) SYNCSTART -- when GEOM starts to synchronizing volume (synchronizing new mirror component or recalculate RAID3/RAID5 checksum) (d) SYNCSTOP -- wwen GEOM finishes synchronization. Each event has arguments like class of GEOM, geom itself, provider in question and some others. For details, please, see geom-events(8) man page :) (2) Simple change in devd(8) config to process events from GEOM system and forward them to geom-events(8) scirpt. (3) geom-events(8) script which processes these events. It is fully-configurable and could perform these actions in reaction to events: (a) Replace failed providers with spare ones in case of DISCONNECT events. (b) Log events to syslog(8) with logger(1) (c) Notify administrator (typically -- root) with mail(1). (4) geom-events needs one small helper binary program: ggetmode(8). ggetmode(8) takes one argument -- provider name -- and prints its access mode, like r1w1e1 or r0w0e0. geom-events(8) script determines is spare provider avail or not, comparing it access mode with "r0w0e0" string. (5) Changes in all geom classes to post these events. I've covered all "actual" base classes with some exceptions: (a) geom_mbr and other old-stlye partition classes is untouched, as they are obsolete now. (b) geom_vinum is not covered. It is too complex for me, sorry :( (c) geom_raid is covered, but changes are not trivial ones. It needs review from Alexander Motin. Commit message describes what and why was changed. I've wrote extensive documentation for all new components -- especially for geom-events(8) script, which is main source of information about this project now. I've tested all classes in virtual machine, with spare drives and all stuff. Everything work perfectly. **I really appreciate your comments, and I want to see this project committed to CURRENT and MFCed to 9-STABLE in (near) future.** Project sources are in "projects/geom-events" SVN branch. All but last commits are organized by component, so you could review only changes in your part of tree. http://svnweb.freebsd.org/base/projects/geom-events/ This branch contains fix from kern/160562, to make raid3 spare drives work. Patch against CURRENT is attached. Thank you. -- // Black Lion AKA Lev Serebryakov <lev_at_FreeBSD.org>Received on Tue Oct 04 2011 - 16:05:19 UTC
This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:40:18 UTC