如何用構建Raspberry Pi驅動的NAS伺服器—附加收穫:HURRiCANE冷卻系統!

目錄
1 簡介
1.1 適用的網路附屬儲存
1.2 啟動並運行自己的NAS
1.2.1 磁片設置
1.2.2 NAS服務
1.2.3 磁片和網路性能
2 附加收穫:Raspberry Pi “HURRiCANE!”冷卻系統
2.1 BOM
2.2 項目完成!

1 簡介

多年來,許多電腦愛好者都會向為設計供大眾使用的Pi而辛勞工作的工程師們哭訴:“USB3有了嗎?USB3快點出來吧,拜託了!”。Raspberry Pi 3 B+幾乎是完美的微型電腦,但是仍然不適用於網路附屬儲存(NAS),或者快速USB,甚至USB。由於乙太網連接受限而出現的鍵盤輸入滯後現象就是不良反應之一。

如果您的祖母打電話給您,問如何將她的老照片以“現代潮流的方式”進行數位化,您會怎麼做呢?她只是想能夠在新型iPad上流暢地瀏覽這些照片,因為她的手指已經沒有那麼大的力氣去翻閱笨重的相簿,來重溫那些含有珍貴回憶的柯達照片了。現在,她要開始迎接使用科技產品的新生活。

但是,本文並不是專門針對數位化照片而寫的。我們這裡將要介紹的是有關儲存的內容:簡單、快速的網路儲存。

1.1 適用的網路附屬儲存

首先,任何能夠在網路上儲存資料並為使用者提供服務的功能都可以稱為網路附屬儲存(NAS)。但是,該功能的實現是以一種用戶友好的、流暢且不會對使用者造成困擾的方式進行的。

例如,我的Android盒子裡有KODI。它的速度不太快,並且microSD裡裝滿了舊的資料。但是,在我安裝了KODI外掛程式從而連接到本地網路上的Samba伺服器之後,觀看電影和播放音樂就都十分流暢了。它在容納十億位元音訊資源的同時,僅用了幾分鐘的時間就完成了我的舊路由器(包含未知固件)的設置,以處理從插入的USB2硬碟中獲取的資料。這就是NAS,但它是比較差的NAS。我們可以做得更好一些。

優質的NAS具有穩定、可快速傳輸資料、延遲少的特點,且具有冗餘性(例如RAIDI),在系統運行時可以支援磁片的熱交換,並且提供了用於訪問所儲存資料的少量協定。如FTP,SMB/CIFS,NFS和AFP等現在常用的協議。多年來,我一直在尋找一種性能優於USB2和100Mbit/s,且具有足夠的CPU能源和RAM來承載所有服務內容的低耗能系統。我對具有出色的SATA 埠的Cubieboard 2十分有興趣,但是Armbian對我來說實在太陌生了。

當所有希望都變成絕望的時候,Raspberry Pi 4發佈了,它具有四核1.5GHz CPU,1/2/4GB DDR4 RAM,真正的千兆乙太網和USB 3.0。您再也不會因為乙太網埠被USB2匯流排阻塞而被迫使用Wi-Fi了。它具有雙microHDMI埠,不過對性能來說無功無過。

我現在需要一台小型的微型電腦, 來驗證其是否能夠在處理一些較大的網路傳輸負載的同時還可以可靠地運行。

我用這種方式對Raspberry Pi 4進行了測試,並且測試成功了。當然,會產生發熱的問題。在卸載後,該微型電腦會通過自發熱來進行調節。載入時,它的系統溫度將會迅速達到176華氏度,這時候電腦並沒有死機或者壞掉,也沒有冒出什麼奇特的煙霧,它只是變成了一個無法使用的紙壓——以600MHz的頻率運行。但是,有一個方法可以解決這個問題,就如您將會在第2部分看到的那樣,使用一種破解版GPIO控制的功率小於或等於45瓦的散熱風扇。

儘管有過熱問題,這款Pi還是非常適合於家庭/工作組NAS,並且2.5″的USB3硬碟足夠了。如果您希望能夠獲得最佳性能,建議您在磁片托架中安裝一個12V 3.5″的驅動器,而不是只用一根線纜的2.5″驅動器。我的2.5″USB驅動器使用一根線纜,最大功率為4.48W,所以如果您選擇了不帶外部電源的2.5″驅動器,那麼肯定需要為您的Pi提供15W的電源。

1.2 啟動並運行自己的NAS

讓我們來構建一個Raspberry Pi 4 NAS吧!

請注意,如果您使用的是較早的Pi型號,仍然可以按照本文中的說明進行操作,不過Pi 2是最低要求。在Pi 3上,您應該通過Wi-Fi介面傳輸檔,因為這樣更快!

首先要做的是對Pi進行設置。按照此處的說明進行操作,您將會很快實現Pi的啟動和運行。我們假設您已經準備好外部硬碟驅動裝置了。這裡需要注意的一點是,如果是在Slashdot上,相信馬上就會引發一場關於“btrfs”(或者那些完美主義者所堅持的寫法“Btrfs”)優點的討論。我使用過它,也使用過ZFS。除非您想要拍快照,不然無論是btrfs還是ZFS都是無關緊要的,對於家庭/工作組NAS也是如此。這是一個磁片的單獨設置,您絕對應該使用ext4,這很酷。

對您的系統進行更新。將以下指令複製並粘貼到您的Pi終端。

 

然後重新開機,運行以下指令,這將會安裝ProFTPd,Samba,一個密碼生成器,SMB/CIFS的用戶端以及用於實現簡單GPIO控制的WiringPi。

 

1.2.1 磁片設置

如果您不是一個極簡主義者,那麼您很可能使用的是Pi上的圖形化使用者介面。如果是這樣,請按照以下說明設置磁片。注意:請牢記您打算設置的磁片,而不是對連接的microSD卡或者任何您不打算修改的磁片進行設置。

如果您選擇僅安裝Raspbian Lite(沒有圖形化使用者介面),則可以使用“cfdisk”對磁片進行設置。確保沒有其他USB驅動器連接到您的Pi後,我們就可以將其稱為“sda”了。將USB驅動器插入您的Pi,打開一個終端視窗,然後發送指令:“sudo cfdisk /dev/sda”。

Choose "dos" here.

選擇 “dos”。

Create a new partition.

如果已經有了一個分區,選擇“Delete(刪除)”。然後,選擇“New(新建)”。或者可以直接選擇“New(新建)”。其類型將會是“Linux”,如下圖所示。使用驅動器上的所有可用空間。

Partition type "Linux", now exit.

使用方向鍵將高亮區移動到“Write(寫入)”的地方,並在出現提示對話方塊時點擊“yes(是)”。然後,將高亮區移動到“Quit(退出)”的地方,按回車鍵。

回到提示對話方塊,讓我們稍事休息,思考一下。在一個沒有承載任何系統檔的檔案系統上,我們是否要為“root”使用者保留磁碟空間的5%,甚至10%?畢竟這不是“/var”或者“/”。

不需要。我們希望所有的可用空間都被用於奶奶的照片數位化工作以及媒體/工作組的資料。mkfs.ext4的“-m”用於設置為“root”用戶保留的空間。“-L”用於設置磁片名稱,您可以將其設置為任意名稱。如果有疑問,可以使用“FOO”進行查詢。現在,發出指令:

 

稍後,您的日誌檔案系統就在“/dev/sda1”上準備好了。
Filesystem created, ready for mounting.

您可以將其掛載在任意位置,但是我們還是為NAS創建一個用戶吧。我們稱他為“nas”。我們將他的私人目錄設置為在任何地方都可寫且可粘滯。可粘滯即像“/tmp”那樣可以暫存檔。複製並粘貼以下指令到您的終端。

 

為了確保我們每次都在“/home/nas”處掛載此磁片,請使用磁片識別字。“/dev/sda1”設備可能會被更改。“sda”可能會變成下一次啟動時的USB拇指驅動硬碟。但是,磁片識別字不會被更改。那我們就來實現它吧!

 

將輸出類似以下的內容:

 

我們想要命令列以“磁片識別字”作為開頭。刪除“0x0acb1143”中開頭的“0x”,並在後面加上“-01”,這樣您就能夠得到與“/dev/sda1”意義相同、並且具有唯一性的磁片識別字了。現在我們把所需要的字串“0acb1143-01”添加到fstab:

 

最後一個掛載參數是“noauto”,含義為在系統啟動時Pi不會自動將該分區掛載到指定掛載點中。這在您忘記插入磁片的時候會很有用。在您準備部署NAS的時候可以忽略“noauto”。“noauto”的唯一缺點是您必須以“pi”的身份登錄並運行以下指令:

 

……每次重啟之後。

現在使用以下指令掛載磁片:

 

一切都進展的很順利!好吧,也不完全是。

1.2.2 NAS服務

您需要啟用一些服務功能。幸運的是,我們安裝了ProFTPd,Samba,並且在第一次啟動的時候就已經安裝了OpenSSH。

首先,將此文件解壓到“pi”主目錄中。您將會進行大量的檔案傳輸,所以最好現在安裝FileZilla。將rpi4_nas+hurricane.zip複製到您Pi上的“/home/pi”中,然後將以下內容複製並粘貼到Pi的終端:

 

當您的Pi完成了指令的接收後(並且您已經輸入了一些密碼),您就可以通過FTP、SMB/CIFS以及SSH訪問您的NAS了。FTP和SSH都可以讓您使用“nas”使用者的密碼登錄到您的NAS中。您可以根據需要使用“sudo passwd nas”指令對密碼進行更改。“smbclient”已經安裝好了,那麼我們來看一下您的系統為網路提供了哪些功能:

 

輸出內容

 

用我的“nas”用戶名(密碼為“foo bar baz”)進行登錄,並將磁片掛載到“/home/nas”中。

 

“smbclient”的程式可能不太簡單易懂,但是我們只需要關注兩個指令就可以了。這兩個指令是相同的,不過第一個是說明性的,第二個會連接到“nas”用戶的主資料夾。

 

1.2.3 磁片和網路性能

USB3.0的傳送速率最高可以達到5Gbit/s (625MByte/s),但是幾乎沒有旋轉(如磁力)驅動器的傳送速率可以超過800Mbit/s (100MByte/s)。那要怎麼辦呢?

在這種情況下,使用2.5″驅動器,並且使用少於5W的功率是個不錯的選擇。我在網路上和本地Pi上的速度測試結果幾乎都約為640Mbit/s。您可以通過包含“disk_speed_test.sh”的腳本自己進行測試,或者直接用以下指令進行測試:

 

USB2的理論最高傳送速率為480Mbit/s (~60Mbyte/s),但實際上卻從來沒有達到過這個速度,所以從這一點來說是一個很大的進步。基於這種資料傳輸速率,您可以在一分鐘以內傳輸約5.1GB的資料量,一小時內傳輸超過300GB的資料量。如果測試性能不佳,使用指令“sudo hdparm -B 255 /dev/sda”,然後再次進行測試。如果沒有成功,用“lsusb”指令檢查一下您的USB3設備是否真的是一個USB3設備。查找bcdUSB。我的磁片報告顯示的是“bcdUSB 3.0”。您的結果呢?

 

報告的內容很全面,而且我的驅動器確實是USB3。同時,它顯示使用了最大功率4.48W。太好了!

對於網路,請使用CAT6線纜,如果您的路由器和Pi之間有交換機,請確保是千兆交換機。我費了較大的功夫才找到了適用於許多TCP資料包的最佳設置,事實證明Raspbian在這方面已經做的很好了。如果您發現有什麼問題,請在您的Pi終端嘗試以下操作:

 

如果有説明的話,請按照以下方式來保存您的更改,使其不會在重啟後失效:

 

2 附加收穫:Raspberry Pi “HURRiCANE!”冷卻系統

大量的能耗會產生大量的熱量。Raspberry Pi 4無法避免溫度高達176度的過熱問題,而這種過熱問題會導致CPU的頻率低至600MHz。您大可以將四個Raspberry Pi的集群設備放置到您的桌面上,但是如果沒有冷卻裝置,您就只能流覽文本形式的網頁,以及用vi來閱讀電子書了。

有兩種方法可以解決這個問題。第一個方法是使用像ICE Tower CPU散熱器這樣的僅對CPU進行散熱的裝置。第二個方法是在每個負載下發熱的晶片上都安裝一個小尺寸的長款散熱片,然後將足夠的氣流推入並穿過這些晶片。但是在本項目中,我僅使用了一個3W的風扇,就將系統溫度降低到了約104度。CPU風扇需要能在12伏電壓下運行。讓我們一起來實現它吧!

2.1 BOM:

 

1x ROHM SLR343BC4TT32 3mm LED https://www.avnet.com/shop/us/products/rohm/slr343bc4tt32-3074457345627700657
Raspberry Pi 4 https://www.adafruit.com/product/4296
Raspberry Pi 4 電源 (USB-C) https://www.raspberrypi.org/products/type-c-power-supply/
microHDMI 到 HDMI 適配器 https://www.newark.com/pro-signal/psg03627/audio-video-connector-a-hdmi-plug/dp/86T1307
16GB microSD 卡 https://www.newark.com/transcend/tsraspi10-16gv2/microsd-card-raspberry-pi-board/dp/49AC7645
USB3 硬碟 https://www.amazon.com/Seagate-Portable-External-Drive-STGX1000400/dp/B07CRG7BBH
1x IRLZ24N N通道 MOSFET https://www.newark.com/infineon/irlz24npbf/n-channel-mosfet-55v-18a-to-220ab/dp/63J7702
2x BAT86 肖特基二極體 https://www.newark.com/nexperia/bat86/rectifier-diode-single-50-v-200/dp/96K6771
2x 330 歐姆電阻 https://www.newark.com/multicomp/mccfr0w4j0331a50/carbon-film-resistor-330-ohm-250mw/dp/58K5042
1x 4K7 歐姆電阻 https://www.newark.com/multicomp/mccfr0w4j0472a50/carbon-film-resistor-4-7kohm-250mw/dp/58K5056
1x 12V 1A 電源 https://www.newark.com/xp-power/vel12us120-us-ja/adaptor-ac-dc-12v-1a/dp/71Y7923
1x 12V 風扇 https://www.newark.com/sanyo-denki/9a0812h401/axial-fan-80mm-12vdc-130ma/dp/96M6913
跳線 https://www.newark.com/adafruit/758/kit-contents/dp/88W2570
萬用板 https://www.newark.com/multicomp/mc001796/stripboard-100mm-x-100mm/dp/24AC5039
麵包板 https://www.newark.com/global-specialties/ubs-100/breadboard-mold-in-bus-strips/dp/17C6982
3x 2P 2.54mm 螺絲端子 https://www.newark.com/phoenix-contact/1725656/terminal-block-pcb-2-position/dp/71C4107
焊接 https://www.newark.com/kester-solder/24-6040-0027/solder-wire-60-40-sn-pb-190-c/dp/34C5648
3x 長款散熱片 https://www.adafruit.com/product/3082

2.2 ‘HURRiCANE!’ Raspberry Pi 控制腳本

首先,將以下腳本程式複製到您的Pi主文件下。複製後,在您的Pi終端輸入“cat >>hurricane.sh<<-“EOF”。然後,粘貼腳本,按回車鍵,輸入EOF,再按回車鍵。

[begin hurricane.sh]

 

[end hurricane.sh]

需要注意的是變數“_temp_upper”和“_temp_lower”之間的間隔很短。第一個設定的是您希望能夠觸發冷卻系統啟動的溫度值,第二個設定的是風扇停止運作的最低溫度值。這樣既可以降低噪音,也可以延長風扇的使用壽命。

剩下的就是製作電路板了。不用擔心這會很複雜,其實非常簡單。

2.3 項目完成!

看這張Fritzing示意圖!展示的是已經應用到NASA太空實驗室以外的微型電腦上的最棒的通風系統!什麼?通風系統?因為外太空太冷了,冷卻系統其實就相當於一個氣閥室,而且全面通風對於太空站來說是完全不可能的。

HURRICANE cooling system diagram

好吧,我們先來看一下兩種不同的冷卻方式:

Bad active CPU cooling

功能強大,但是閒置的時候溫度為55C/131F。

很多電子設備會因為熱應力導致損壞,尤其是沒有移動部件的電子設備。熱應力來自於物體尺寸的膨脹和收縮,而這種尺寸變化肉眼是無法識別的。幾年更換一次風扇要比無形中損失一個Pi好得多。Robinsons可承擔不了失去機器人朋友帶來的損失。

所幸的是,“HURRiCANE!”可以解決所有問題!我們想要的是在CPU和Wi-Fi/藍牙晶片上,在主機板的左上方,以及在CPU左邊的晶片上能夠有一些不錯的長款散熱器。銅的導熱性很好,但是鋁能夠更容易地將其釋放到“HURRiCANE!”的氣流中。

豎高型的結構可以增加散熱的表面積,這意味著我們可以避免Raspberry Pi 4發生遲滯。

以上組件清單中的散熱器均帶有導熱膠帶。我們之所以需要三個,是因為Raspberry Pi左上角的三個大的晶片高度不均勻。

CPU 和Wi-Fi/藍牙晶片上有RF遮罩罩,這使得在上面放置一個大尺寸散熱器變得非常困難。在接入三個散熱器之前,請務必先用蘸有異丙醇的棉簽將其擦拭乾淨。

我為我的Raspberry Pi 4購買了性能最好的小型“動態冷卻系統”產品中的一種。但是它沒有達到冷卻的效果,反而吸收了很多熱量。IRLZ24N MOSFET消除了所有不合理的功率問題,在2V電壓下順利導通(所以3.1V電壓會更好),並且以防MOSFET出現故障,我們使用BAT86肖特基勢壘二極體來保護我們的輸出引腳BCM18/BOARD12和BCM23/BOARD16。注意,BCM18/BOARD12引腳是PWM引腳,您可以根據需要將電壓降低到3.1V以下。

將12V電壓連接到風扇的正極端子,並將風扇的負極端子連接到MOSFET的漏極後,我們可以將負載放置到相應位置。然後,我們將MOSFET的源極接地,將BCM18/BOARD12與一個正向偏置到柵極的BAT86二極體串聯,最後連接一個330歐姆的電阻以將 最大電流限制在10mA。

請注意,從柵極到GND有一個4K7下拉電阻,如果沒有這個電阻,當柵極的供電沒有達到3.1V時會產生振盪,這樣的話就無法可靠地(或者快速地)關閉MOSFET。所以一定記得加上下拉電阻。

然後,製作小尺寸電路板。
Fan control board

使用三個2P 2.54mm螺絲端子可以讓您Raspberry Pi的信號線連接變得更加容易,您需要為其做上永久性的標記。我標記的是“Fan S+”,“12V”,“GND”和“LED S+”,而在風扇上,我只標記了“+”和“-”。

保護您Pi輸出引腳的兩個二極體很重要。如果您的二極體偏置錯誤,就必須把它們拆解下來並進行翻轉。您需要將陰極面向Pi引腳,陽極面向MOSFET和LED的陽極。在上面的圖示中,陽極用黑色小環進行了標記。肖特基二極體僅產生大約0.2V的壓降,所以我們可以放心地將它們與Pi配合使用, 並且可以保證MOSFET啟動時產生合理的導通電阻。在3W的負載下,我們的IRLZ24N溫度甚至不會升高到室溫以上。如果您使用大功率CPU風扇,比如10-12W,那可能需要連接一個1W的小散熱器,尺寸不要太大。

組裝並焊接好電路板後,將其連接到您的Raspberry Pi 4,該冷卻系統可以持續工作很多很多年。

使用WiringPi庫可以使其比上文中的腳本簡單很多,我們只用將引腳上的電壓值在3.3V和0V之間進行翻轉就可以了。需要注意的是,使用12伏的風扇只是因為它們功率大並且數量多。您也可以根據自己的需要選擇5伏的風扇。

祝您玩得愉快!

Lasse Efrayim Jespersen
Lasse Efrayim Jespersen
Lasse出生於以色列,後移居到緯度較冷的地區。出於個人天然的興趣愛好,他一步步走近了直接的Perl、高效的C/C++、以及優雅的MicroPython。他非常喜歡用ESP8266/ESP32/Raspberry Pi 和Arduino來構建機器。

Check us out on Social Media