Raspberry Pi 插入 USB 網卡後會一直當機?
最近接了一個案子,Server 是用一台 Raspberry Pi 2,連接三個網段。但由於 Raspberry Pi 也只有一個 10/100 的 Ethernet 孔,要 bind 其他不同網段的 IP,就只能外接網卡了,當然是 USB 無線網卡。
↑ USB Ethernet 示意圖,取自 ASUS 官網
前言
這邊是在講這個案例遇到的問題,如果你只想看解決辦法,請跳到後面。
接起來是沒有什麼問題,固定 IP 也都綁好了,程式丟進去跑好像也沒什麼問題。附帶一提,程式是用 node.js 寫的。
後來發現,好像每隔兩三天 Server 會掛掉。起先以為是 Power Failure,換了 N 顆充電器、N 台 Raspberry Pi 2,但一直都無法解決。
難道是哪個 service 出錯了?翻了各式各樣的 log:/var/log/syslog、/var/log/dmesg、/var/log/messages …,好像也都沒重點。唯一的奇怪的地方只有我的 SSH 一直被暴力破解。
這樣就有兩種可能:
- SSH 被打太慘,導致 Server 撐不住。
- 出現 Kernel Panic,所以來不及紀錄。
說到 SSH 被暴力破解,當然先想到 fail2ban 這個工具:用 fail2ban 防止 BIND DNS 一直被 DDOS 攻擊,但安裝到一半我居然在螢幕上看到 Kernel 出錯的訊息!
Message from syslogd@raspberrypi at Mar 5 16:15:37 …
kernel:[ 5230.480519] skbuff: skb_over_panic: text:803c1c48 len:1536 put:1536 h ead:a399f900 data:a399f942 tail:0xa399ff42 end:0xa399ff40 dev:eth1
Message from syslogd@raspberrypi at Mar 5 16:15:37 …
kernel:[ 5230.508621] Internal error: Oops – BUG: 0 [#1] SMP ARM
Message from syslogd@raspberrypi at Mar 5 16:15:37 …
kernel:[ 5230.625388] Process swapper/0 (pid: 0, stack limit = 0x807e4210)
Message from syslogd@raspberrypi at Mar 5 16:15:37 …
kernel:[ 5230.633185] Stack: (0x807e5d70 to 0x807e6000)
Message from syslogd@raspberrypi at Mar 5 16:15:37 …
kernel:[ 5230.639298] 5d60: 00000600 a399f9 00 a399f942 a399ff42
Message from syslogd@raspberrypi at Mar 5 16:15:37 …
kernel:[ 5230.651042] 5d80: a399ff40 b7844800 00000600 a399ff42 a399ff40 000000 00 807e5dc4 807e5da8
Message from syslogd@raspberrypi at Mar 5 16:15:37 …
kernel:[ 5230.662800] 5da0: 8046b0f4 80555ac8 b7844c40 b61c7a00 b966ff00 000000 00 807e5dec 807e5dc8
Message from syslogd@raspberrypi at Mar 5 16:15:37 …
kernel:[ 5230.674574] 5dc0: 803c1c48 8046b0a4 b61c7a00 60000113 b61c7a00 600001 13 00000000 00000000
Message from syslogd@raspberrypi at Mar 5 16:15:37 …
kernel:[ 5230.686454] 5de0: 807e5e0c 807e5df0 803c9904 803c1c20 b61c7a00 b96f5c 00 b61c7a00 807de254
Message from syslogd@raspberrypi at Mar 5 16:15:37 …
kernel:[ 5230.698524] 5e00: 807e5e2c 807e5e10 803c9a24 803c9890 b96f5cc8 b9552c 80 b96f5c00 b61c7a00
Message from syslogd@raspberrypi at Mar 5 16:15:37 …
kernel:[ 5230.710761] 5e20: 807e5e54 807e5e30 803f0388 803c99e4 802eb5b0 200001 13 807e0c74 b8c8b400
Message from syslogd@raspberrypi at Mar 5 16:15:37 …
kernel:[ 5230.723188] 5e40: b8c8b404 00000000 807e5e64 807e5e58 803fe888 803f03 28 807e5e8c 807e5e68
Message from syslogd@raspberrypi at Mar 5 16:15:37 …
kernel:[ 5230.735773] 5e60: 8002aca0 803fe874 8002ac24 8002a864 807e6080 000000 01 00000000 00000001
上 Google 查了一下,好像說是外接 USB 網卡會出現這樣的 driver bug 吧?
解決辦法
後來我在 這裡 找到解決辦法,只要在 /boot/cmdline.txt
最後面加上這三個參數就可以了:
smsc95xx.turbo_mode=N dwc_otg.dma_enable=1 dwc_otg.dma_burst_size=256
記得這個檔案只能有一行,不同參數要空格而不是換行,不然會導致你的 Raspberry Pi 無法開機。
雖然把 turbo mode
關掉,會讓你的網路速度變慢,但是網路上很多人都說感覺不出來。Noob 也沒實際去測,但目前傳什麼檔案或是資料都沒有問題。如果你的 Raspberry Pi 也出現這個問題的話,可以試試看在後面加入這幾個參數。
目前這台 Server 已經撐了三天了 :good!