Is there a way to periodically verify that a linux software raid is valid and has no errors? Like a daemon that would scan all blocks and verify them.
On Debian (and therefore Ubuntu) machines, cron runs:
/usr/share/mdadm/checkarray --cron --all --quiet
the first Sunday of the month. This does exactly what you want.
It basically boils down to:
# echo check > /sys/block/$array/md/sync_action
but with a lot of sanity around it. Steal it from your nearest Debian install, or from the mdadm source package.
From the the Linux Software Raid How To:
...basic example. Running:
mdadm --monitor --mail=root@localhost --delay=1800 /dev/md2
should release a mdadm daemon to monitor /dev/md2. The delay parameter means that polling will be done in intervals of 1800 seconds. Finally, critical events and fatal errors should be e-mailed to the system manager.