lm_sensors is very conservative with its fan divisor settings. It assumes low resolution sensors which is less and less the case on modern hardware. As a result the fan divisor value must be set with sensors -s to get a meaningful fan reading. This operation seems unreliable - it works but not always the first time, especially early in the boot process sensors -s will not retry to set parameters in the background - you have to script the retries lm_sensors will no wait for the setting to succeed to monitor fan values. It will compare the fan readings to the alert levels while they're still garbage (because the divisor is still wrong) As a result on my hardware linux boot = continuous LOUD alert beep. The workaround is to do a /usr/bin/sensors -s /usr/bin/sensors (sometimes you have to do a read for the setting to be taken into account) manually after the boot sequence which will set the divisor and shut up the alert (put into the rc.local, only beeps a few minutes now) This means you can't boot linux with other people around (office space, home box late in the evening) I had this problem with my previous mobo too (Via chipset, now nVidia one) - except it was not beeping on alert, so the sensors reads were being silently wrong. Please add a few retries and sleeps in the sensors init script. The current one is fast but unreliable
See also: http://www2.lm-sensors.nu/~lm78/readticket.cgi?ticket=2095
After investigation upstream, the problem is some configuration directives in sensors.conf were not in the order expected by sensors. And libsensors is too dumb to reorder them by itself. -> Long-term fix : enhance libsensors to automatically reorder configuration directives or at least warn when they're not in canonical order