本文譯自樹莓派雜誌85期(MagPi issue 85),原文標題為Build your own NAS(插圖來源取自雜誌內頁)。本篇與原文同樣使用CC 3.0 BY-NC-SA授權,歡迎標註原作者轉載,若有任何不妥與指教敬請告知。

如果你有很多檔案(例如圖片、音樂或電影等)儲存在硬碟的某些地方,若沒有使用昂貴的網路附加儲存(Network Attached Storage, 以下簡稱NAS)方案,要確保存取資料時不受硬碟故障影響是有難度的,但這種提供文件和媒體服務的黑匣子也可能存在漏洞,特別是針對企業級的專業版。幸運的是, 樹莓派第4代提昇了USB和乙太網路傳輸的吞吐量(譯註:Pi4搭載2個USB 3.0 埠,乙太網路傳輸率最高可達1Gbps),所以現在我們可以用更少的成本建置一個功能齊全的NAS。

 

01 NAS適合你嗎?

一個好的網路連接儲存裝置通常是無頭裝置(與鍵盤或螢幕不同),它可以從網路上的任何位置存取大量的資料,同時也必須提供資料的可用性與彈性,這代表NAS應該要能夠保護資料不系統故障影響,並確保不會因此遺失資料。檔案本身應該要能在預計的協議(desire protocals)上獲得適當的安全防護措施,簡單來說,它是一個盒子,你可以將所有的電影、照片、音樂以及其他檔案儲存到裡面,並且可以隨時隨地的存取盒子裡面的資料。

 

02 儲存空間

自製一個NAS最重要的是決定你需要多少儲存空間,以樹莓派的設計來說,使用USB外接硬碟是比較適合的選擇。比起SSD,傳統硬碟(HDD)的價錢更低,容量更大。Pi 4 支援USB3.0傳輸,確保你的外接裝置也擁有相同的傳輸速度。為了提供多一層的防護,你需要多一倍的硬碟數量以以確保資料安全。

  • USB 3.0和1Gbps的乙太網路傳輸埠

如果儲存空間有1TB,就代表需要用到兩顆1TB的外接硬碟,為了有可靠的電力供應,我們增加了提供電源的USB擴充埠(hub)。

 

你將會需要
  • USB外接式硬碟x2
  • 可供電的USB 3.0擴充埠
  • Gigabit乙太網路
  • UPS(非必要)

 

03 安裝與設定作業系統

下載Raspbian Buster Lite(http://magpi.cc/raspbian),並燒錄到記憶卡中。開機後請先開啟SSH,在命令列打上 sudo raspi-config,在界面選項中啟用SSH。如果你需要,也可以在這個時候設定Wi-Fi,但在一般的NAS中會使用乙太網路插孔,使最高網路傳輸速度達到1Gbps。接著更改預設的密碼,如果你想要的話也可以在網路選項中更改Hostname(NAS在網路上的名稱)。假設我們將Hostname改成「nas」,那網路地址就會是nas.local。

最後確認一切都已經更新:sudo apt update && sudo apt -y upgrade,然後重新開機。

 

04 新增儲存空間

將USB3.0擴充埠接上樹莓派,插入隨身硬碟並等待幾秒,輸入lsblk

這個指令會告訴你目前連接到系統的裝置,「mmcblko」開頭的名稱是裝有Raspbian的MicroSD卡,如果兩個USB隨身硬碟都已經安裝成功,就會顯示「sda」與「sdb」(裝置A與裝置B),如果還有其他的硬碟,字母就會繼續向下顯示sdc,以此類推。

 

05 設定硬碟分割

接下來,我們需要分割硬碟,使Rapbian了解如何在硬碟中儲存資料,我們需要使用fdisk指令:

sudo fdisk dev/sda
當命令列提示出現後,輸入n增加一個新的磁碟分區,如果出現分區已經存在的錯誤訊息,輸入d刪除它,磁碟中的所有資料將被刪除。

然後輸入p(設定主要磁區)會被詢問一連串有關磁區的問題,不用擔心,只要一直按下Enter鍵選擇預設的設定,直到「建立新分區(Created a new partition)」出現,再按下w儲存磁碟的設定。

第一顆硬碟已經設定完成,我們需要重複剛才的過程設定第二顆磁碟,輸入:sudo fdisk dev/sdb,並重複剛才的過程。

 

〃使用RAID-1(容錯式磁碟陣列)或是鏡像,任何寫入硬碟的資料也會同時寫到另一顆硬碟中〃

 

06 建立RAID

RAID(Redundant Array of Inexpensive Disks, 容錯式磁碟陣列)是一種在多個硬碟上備份以保護資料的方法。它有很多不同的格式,我們使用最簡單的一種:RAID-1,或是鏡像。 任何寫入硬碟的資料也會同時寫到另一顆硬碟中,當其中一顆硬碟發生問題時,NAS還是可以維持運作,並且不會遺失任何資料,只要替換損壞的磁碟,磁碟陣列就能夠再次「重生」。

 

  • 要在win10中存取NAS,請先開啟檔案管理員,選擇「我的電腦」,進入後選擇上方標籤列的「Map Network Drive」,輸入 \\NAS的IP位址\shared

  • 在macOS中存取你分享的檔案,請開啟Finder,選擇「網路」,等待幾秒後,就能看到NAS的主機名稱出現。

 

重要提示

除了Raspbian以外,你還有其他選擇

OpenMediaVault是專門的NAS伺服器映像檔,有100%基於網頁的設定介面,雖然它不支援USB的RAID,但它擁有許多伺服器主機的功能。

 

首先,安裝RAID的軟體管理員mdadm: sudo apt install mdadm

現在讓madam建立一個RAID-1的磁碟陣列:

sudo mdadm --create --verbose dev/md0 --level=mirror --raid-devise=2 /dev/sda1 /dev/sdb1

 

完成後,使用者pi就能藉由Samba伺服器共享存取windows、macOS或其他樹莓派設備的檔案。

 

07 安裝虛擬硬碟

Raspbian現在已經將兩個USB硬碟視為同一個裝置了,你可以格式化或安裝新的虛擬硬碟:

sudo mkdir -p /mnt/raid1

sudo mkfs.ext4 /dev/md0

sudo mount /dev/md0 /mnt/raid1

ls -l /mnt/raid1/

你應該會看到一個項目:'lost +found',這代表RAID-1系統正在運作。接下來確認每次開機時硬碟都有正確安裝:

sudo nano rtc/fstab

加上這行:

/dev/md0 /mnt/raid1/ ext4 defaults, noatime 0 1

退出(CTRL + X,按Y)然後執行以下指令,使RAID陣列在開機時能夠正確的啟動:

sudo mdadm --detail --scan | sudo tee -a /etc/mdadm/mdadm.conf

輸入完成之後重新啟動。

 

08 使用Samba共享

現在,使用著名的SMB/CIFS協議在網路上共享一些檔案,即使Raspbian的Samba版本有更友善一點的名稱,但它仍沒有被預先安裝。

執行以下指令:

sudo apt install samba samba-common-bin

如果執行過程被詢問任何問題,請選擇預設的選項。接著讓我們建立一個目錄,並讓所有使用者都能存取:

sudo mkdir /mnt/raid1shared

sudo chmod -R 777 /mnt/raid1/shared

 

更改設定檔讓Samba在網路上分享目錄:

sudo nano /rtc/samva/smb.conf

 

在最下方加上這些文字:

[shared]

path=/mnt/raid1/shared

writeable=Yes

create mask=0777

directory mask=0777

public=no

按下CTRL+X再按Y儲存,然後重新啟動Samba:

sudo systemctl restart smbd

 

09 允許存取

為了給特定的使用者存取的權限,我們需要執行一行特殊的指令設定Samba的密碼。

讓目前的使用者Pi擁有權限:sudo smbpasswd -a pi

系統會要求你選擇密碼(不用和樹莓派的密碼一樣),完成後使用者Pi就可以使用Samba共享windows、macOS或其他樹莓派裝置,並擁有讀寫檔案的權限。

建立其他的使用者:

sudo adduser username

sudo smbpasswd -a username

其中‘username’是你要新增的使用者名稱

 

  • NAS有許多用途,例如像Plex一樣充當媒體伺服器儲存大型文件。

 

重要提示:保留備用零件

這個專案的成本相對較低,可以在手邊保留一些備用零件,日後就能快速的替換硬碟或樹莓派。

 

10 建立家目錄

如果想建立個別使用者的文件分享功能,只需要在RAID陣列上建立自己的目錄:

mkdir /mnt/raid1/shared/username

sudo chown -R username /mnt/raid1/shared/username

sudo chmod -R 700 /mnt/raid1/shared/username

與前一步驟相同,將username換成你想建立的使用者名稱,現在只有該名使用者擁有進入與讀取目錄的權限。或者你可以在smb.conf新增用於不同權限的目錄。

 

11 備份、備份再備份

RAID不是備份系統,它提供了一定程度的資料冗餘,但如果不小心刪除了檔案,它也無法幫上忙。如果硬碟發生故障的情形,會使系統冗餘的程度降低,這代表在更換硬碟之前,資料將處於危險中,如果第二顆硬碟也發生故障,那將會是一場災難。

理想的解決方法是使用雲端儲存服務,比如Google或Dropbox備份任何重要資料,利用像Rclone(rclone.org)可以同步整個目錄結構到不同服務提供商的儲存裝置。設定好備份的目錄與工作排程以確保資料存儲的安全。

 

12 不要中斷它

你可以使用不斷電系統(UPS, Uninterruptible Power System)來完善這個專案,因為Linux系統處理記憶體資料方式的緣故,突然斷電可能會導致NAS的災難。這種備用電池可以在斷電時使樹莓派和USB擴充埠還能夠安全的運作。許多UPS可以透過USB和樹莓派溝通,使其能夠安全的觸發關機程序。

 

13 增加更多功能

我們的NAS可以實現檔案共享,這也是最基本的功能。專業的NAS軟體經常提供額外的協議,像是Apple的AFS、FTP等,多數協議也都能夠在樹莓派的NAS上實現。對於更進階的使用者來說,Docker是一種使NAS可以執行多種功能但又不會陷入配置惡夢的絕佳方式。為什麼不設置一個DLNA串流伺服器或是執行多個資料庫呢?如果你啟用了SSH,就能夠使用SFTP,只要使用你喜歡的FTP用戶端,將/mnt/raid1/shared作為起點連接即可。

 

14 結論

一般而言NAS都所資不斐,如果只是想輕鬆的分享檔案給朋友或家人,使用樹莓派實作製作NAS是經濟實惠的好選擇。雖然它在速度上或功能上還無法與Intel的系統競爭,但如果你手邊有一些USB外接硬碟,這會是一種可以提供資料也能保護資料的好方法。

 

感謝Alex Ellis和Emmet Youngy在部落格上的優質好文。

RAID(http://magpi.cc/qzPmjo)和Samba(http://magpi.cc/H0ivNg)