После обновления FreeBSD 8.1 на 8.4 вылез неприятный момент: при ребуте сервер подвисает на сообщении:
usb0 disconnected
Всему виной оказался USB 3G модем Novatel U720, из-за которого и получали подвисание.
Ясно было одно – нужно найти параметр, который отвечает либо за таймауты, после которых модем “выбрасывается” системой или параметры, которые тупо ложат на “usb0 disconnected“.
Решение пришло, после внимательного просмотра переменных sysctl, которые отвечают за USB. После внимательного изучения, тестирования, выявил такие параметры и нужные значения для них:
– /etc/sysctl.conf
hw.usb.no_shutdown_wait=1
hw.usb.no_suspend_wait=1
– /boot/loader.conf
hw.usb.timings.port_powerup_delay=50
hw.usb.timings.resume_delay=50
hw.usb.timings.port_reset_recovery=50
hw.usb.timings.port_root_reset_delay=50
После этого, нужно ребутнуться, что бы применились параметры из /boot/loader.conf. И вот уже после этого, ребут уже не должен приводить к зависаниям. Хотя, если признаться честно, то мне хватило (а может просто повезло) параметров hw.usb.no_*. Параметры hw.usb.timings.* добавил на всякий случай.
Интересным оказался ещё один параметр, который не влияет на данную ситуацию, но убирает информацию usbX из вывода netstat. Согласитесь, в 99% случаев строки вида usbX там не нужны. Вот, он этот параметр (прописать в /boot/loader.conf и перегрузиться):
hw.usb.no_pf=1