Để máy Linux không bao giờ bị treo cứng lâu
Kernel của Linux có các module để điều khiển các mạch watchdog trong máy. Các mạch watchdog đó có tính chất là một khi đã được bật lên rồi thì phải đụng đến nó đều đặn. Nếu nó thấy để lâu không đụng tới thì nó sẽ khởi động lại máy giống như ta bấm nút Reset.
Các máy PC trong khoảng 10 năm tuổi trở xuống thường có mạch watchdog sẵn trong mainboard. Có nhiều mạch watchdog tích hợp trong các chipset khác nhau, ví dụ như chip 8xx ICH của Intel, chip 83627HF của Winbond, chip M1535 của Ali… Để biết mainboard đang dùng có mạch watchdog nào thì phải biết nó dùng chipset nào bằng cách xem tài liệu hoặc lấy kính lúp coi số hiệu mấy con chip trên mainboard. Mainboard tôi đang dùng có chip ICH5 của Intel và có luôn chip 83627HF của Winbond, chỉ có watchdog trong ICH5 được dùng còn watchdog trong Winbond không dùng. Mainboard Pentium 100 thì cũng có chip 83877 của Winbond nhưng lại không được nối tới mạch reset nên không dùng được.
Kernel tạo sẵn trong các distribution thường có sẵn module watchdog driver cho nhiều loại chip. Ví dụ với máy cài FC6, kernel được build sẵn với các module driver sau:
[lhboi@desktop opt]$ ls /lib/modules/2.6.18-1.2798.fc6/kernel/drivers/char/watchdog/ alim1535_wdt.ko i8xx_tco.ko pcwd_pci.ko w83627hf_wdt.ko wdt_pci.ko alim7101_wdt.ko ibmasr.ko pcwd_usb.ko w83877f_wdt.ko i6300esb.ko machzwd.ko softdog.ko w83977f_wdt.ko
Nhìn tên một số file trong đám đó có thể đoán ra đó là driver cho chip gì: ALI M1535, ALI M7101, Intel ICH 8xx, Winbond 83… Nếu đã biết mainboard có chip nào trong đám đó thì load module đó lên bằng lệnhmodprobe w83627hf_wdt.
Nếu chưa biết chip nào thì cứ thử load lần lượt từng module vào. Khi load module mà không đúng với chip thì nó sẽ báo ngay là không đúng, nếu nó không báo gì hết thì dùng lệnh dmesg xem thông báo device watchdog đã được initialize
WDT driver for the Winbond(TM) W83627HF Super I/O chip initialising. w83627hf WDT: initialized. timeout=60 sec (nowayout=0)Load module rồi thử coi module đó có dùng được không bằng lệnh echo x > /dev/watchdog, rồi ngồi chờ chừng 1-2 phút, nếu máy khởi động lại tức là module đó dùng được. Máy khởi động y như bị bấm nút Reset chứ không phải là init 6, do đó nên thử ở runlevel 1 để ít ảnh hưởng tới các service của máy. Trong 1-2 phút đó có thể dùng lệnh dmesg để xem các thông báo của driver watchdog như:
w83627hf WDT: Unexpected close, not stopping watchdog!
Nhiều khi load module được nhưng máy không khởi động, đó là do mainboard có chip đó nhưng nó không nối tới mạch reset CPU. Nếu thử hết đám module đó mà vẫn chưa tìm thấy module nào dùng được thì config và build kernel lại để chọn những module khác (trong mục Device Drivers - Character devices - Watchdog Cards). Trong các module driver có một module là Software watchdog. Nó không dùng chip gì hết mà tự làm bằng code trong kernel, dùng tạm cũng được nhưng đôi khi không có tác dụng.
Để dùng watchdog, ta chạy 1 script gồm 1 vòng lặp bất tận, trong vòng lặp đó làm 2 việc là ghi vào /dev/watchdog và kiểm tra một số dấu hiệu chứng tỏ là máy còn làm việc bình thường. Chu kỳ của vòng lặp đó không lớn hơn x giây (x tuỳ thuộc vào chip và thông số đặt cho watchdog, thường trong khoảng 30-60 giây). Nếu phát hiện thấy dấu hiệu bất thường thì exit khỏi vòng lặp, mạch watchdog sẽ khởi động lại máy; hoặc nếu việc kiểm tra quá lâu (cũng là dấu hiệu bất thường) thì máy cũng sẽ khởi động lại. Tuỳ theo nhiệm vụ của máy mà ta chọn kiểm tra dấu hiệu nào. Ví dụ để kiểm tra web server thì ta connect tới TCP port 80, GET về một trang html, rồi ping tới default gateway, có thể sleep 10 giây nữa; như vậy khi web server không trả lời hoặc ping không được default gateway thì máy sẽ khởi động lại.
Các máy ATM của ngân hàng đều dùng mạch watchdog để bảo đảm là máy không bị treo quá lâu. Những máy dùng Windows thì không có sẵn driver cho chip on board như Linux mà phải mua card watchdog về cắm vào và cài driver.