利用 Raspberry Pi 4 架設一個隨身 NAS

所有跟 4C 相關的自我創作、製作相關資訊都會放在這邊
這邊不是教學網站,所以不要期望有正式的教學步驟,這邊比較像是工作筆記或是隨筆,所以會比較沒有規劃性的東一篇、西一篇,若想要自學,建議去找專業的教學網站

版主: lincy

回覆文章
lincy
文章: 16
註冊時間: 2020年 4月 14日, 11:39

利用 Raspberry Pi 4 架設一個隨身 NAS

文章 lincy »

由於 Raspberry 小巧,加上 Pi 4 (4G) 版本的強大,利用這個新的 CPU 及更大的容量,我們可以用它來做很多事,我除了把它當作測試及研發用的隨身伺服器之外,也拿來接螢幕看 youtube,不過看片這不是正事,不提也罷,今天我想把它拿來當作一個隨身 NAS,隨身攜帶到了有需要的地方,接上電源跟網線,就能當作 NAS 來用。

怎麼在 Raspberry Pi 4 (以下簡稱 Pi4) 上安裝 Linux 我就不再說明,有需要的可以看這篇。當然你也可以裝其他版本的 Linux,只要是 Linux 操作的方式不會差太多。

現在假設已經在 Pi 4 上裝好了 Linux Server,我這邊用的是 Ubuntu Server 20.04 LTS 版本,我習慣直接用 root 操作,如果你不習慣用直接用 root,請在所有指令前加上 sudo。

由於是隨身專用,所以容量大小不是我主要的考量,攜帶方便才是,所以我選用體積小的隨身碟,單顆容量是 256G,買了兩顆做 Raid 1,當然大家可以考慮其他容量,256G 是我覺得價格跟需要達到平衡的容量,我用的是 SanDisk SDCZ430 系列,pchome 上買一個大約台幣 1100 有找,我是不到一千入手。

SanDisk SDCZ430-256G-G46
SanDisk SDCZ430-256G-G46
2020-07-09-01s.jpg (54.37 KiB) 已瀏覽 48111 次

這是我目前找到體積最小,又是 USB 3.0 以上 (其實是 3.1,但 Pi4 只吃 3.0啊),裝在 Pi4 上看起來只是一個小突起,不影響攜帶。

接在 Pi4 屁股上的隨身碟
接在 Pi4 屁股上的隨身碟
2020-07-09-02s.jpg (57.8 KiB) 已瀏覽 48111 次

現在我們登入 Pi4,並查詢一下這兩顆隨身碟的磁碟標籤是啥,其實 Pi4 若插入第一顆硬碟或是隨身碟,自動抓到 dev/sda ,第二顆是 /dev/sdb,所以理論上我們只插了兩個隨身碟,所以應該是 /dev/sda 跟 /dev/sdb 兩個,不過我們這邊還是用指令查詢確認一下好了:

用以下指令查詢系統上有那些區塊裝置 (block device)

代碼: 選擇全部

lsblk
我這邊查到的資訊如下:

lsblk 查詢
lsblk 查詢
pi4-raid-create-000.JPG (45.97 KiB) 已瀏覽 48110 次

果然是 sda 跟 sdb,雖然都各有 sda1 跟 sdb1 的磁碟區 (partition) 而且應該是 exFAT,不過這邊我們不需理會,也不需先進行處裡 (前提是新買的,如果你用舊的而且上面有資料的話,先把該備份的資料先備份吧),因為後面的過程中我們需要重新格式化。

現在先用 mdadm 指令來建立磁碟陣列 (Disk Array),我為了容錯所以選用的是 Raid 1,這樣若是其中一個隨身碟壞了我的資料還會在,但如果你追求的是快速而不是安全性,你可以用 Raid 0,這樣在存取上速度會更快,不過萬一其中一個隨身碟掛了,你就要跟資料說掰掰了,以下指令建立一個名為 md0 的Raid 1 磁碟陣列:

代碼: 選擇全部

mdadm --create --verbose /dev/md0 --level=1 --raid-devices=2 /dev/sda /dev/sdb
以上指令是告訴 mdadm 我們要建立一個新的磁碟陣列 /dev/md0,使用兩顆磁碟分別是 /dev/sda 及 /dev/sdb,建立的過程如下:

mdadm 建立磁碟陣列
mdadm 建立磁碟陣列
pi4-raid-create-001.JPG (54.48 KiB) 已瀏覽 48110 次

過程中它會警告你磁碟中已有磁碟區但是陣列建立後就沒意義了,不用理它那個就是新購入的隨身碟原廠先幫我們格式化成 exFAT 讓我們買來之後就能直接使用,剛剛就說過,不過跟我們無關。完成後我們查詢一下,用以下指令:

代碼: 選擇全部

cat /proc/mdstat
結果如下:

查詢陣列狀態
查詢陣列狀態
pi4-raid-create-002.JPG (28.44 KiB) 已瀏覽 48110 次

建完磁碟陣列之後,系統就開始進行同步化,同步需要一段時間,你可以晚點再用同樣的指令查詢同步化完成多少。不過我們不需等它完成就可以繼續做接下來的動作,我們先將新的 md0 磁碟進行格式化,因為是 Linux 系統,我直接使用 ext4,指令如下:

代碼: 選擇全部

mkfs.ext4 -F /dev/md0

過程如下:

格式化 /dev/md0
格式化 /dev/md0
pi4-raid-create-003.JPG (42.28 KiB) 已瀏覽 48110 次

再用 lsblk 指令看一下我們剛建立磁碟陣列之後,系統可以看到的區塊裝置有哪些:

再次用 lsblk 查詢
再次用 lsblk 查詢
pi4-raid-create-004.JPG (47.8 KiB) 已瀏覽 48110 次

接者我們用 df -kh 指令來查詢掛載的磁區 (df 指令是查詢容量,但可以看到已掛載的磁區):

代碼: 選擇全部

df -kh

我這邊查詢的結果如下:

掛載的磁區查詢
掛載的磁區查詢
pi4-raid-create-005.JPG (52.15 KiB) 已瀏覽 48110 次

這時還沒有我們新建的 md0,所以我們還需要兩個動作,一個是建立掛載點,另一個動作就是把 md0 掛載上去。用以下兩個指令來分別建立掛載點以及掛載磁碟區:

代碼: 選擇全部

mkdir -p /mnt/md0
mount /dev/md0 /mnt/md0
除非出錯,否則以上兩個指令不會顯示任何訊息,所以我們再用一次 df -kh 指令查詢:

查詢掛載後的磁區
查詢掛載後的磁區
pi4-raid-create-006.JPG (53.31 KiB) 已瀏覽 48110 次

這時候應該可以看到最下面一行出現了
/dev/md0 229G 61M 217G 1% /mnt/md0
當然,上面的數字可能會有點不同,主要是看你使用的隨身碟容量,如果跟我用同一個型號的,看到的數值應該相同。這時候,硬碟跟磁區的準備工作應該已經完成。不過我們希望以後開機之後能自動掛載這個磁碟區,所以我們要再做一些設定工作,先來修改 /etc/mdadm/mdadm/conf ,把最新的磁碟陣列訊息加進去,我們利用以下指令:

代碼: 選擇全部

mdadm --detail --scan >> /etc/mdadm/mdadm.conf
這個指令會把磁碟陣列的詳細參數加到 mdadm.conf 的最後面,接下來我們再更新一下 initramfs 以便以後在開機時期這個陣列就能被使用,最後在 fstab 裡面加上這個磁碟陣列磁區,以便開機後能夠自動掛載,使用以下指令:

代碼: 選擇全部

echo '/dev/md0 /mnt/md0 ext4 defaults,nofail,discard 0 0' >> /etc/fstab
好了,準備工作至此完成,之後就是進行網路分享的設定工作了


...

lincy
文章: 16
註冊時間: 2020年 4月 14日, 11:39

Re: 利用 Raspberry Pi 4 架設一個隨身 NAS

文章 lincy »

偷懶了好久,剛好又看到這邊文章,才想起來還有後續的沒寫完,看看時間,已經事隔兩年了,雖然已經過了一段時間,不過還是把做到一半的事情做完吧。之前原本是打算弄一個隨身 NAS 的,後來發生的事情大家也都知道,就是新冠疫情變得更嚴重了,所以自主降低出門的次數,每次出門辦事也都是盡快辦完盡快結束,避免增加暴露在新冠風險的機率,自然而然的,需要用到隨身 NAS 的機會就變小了,不得已的時候,隨身碟還反而比較快,找個 USB 一插幾分鐘之內閃人。

又扯遠了,話雖如此,隨身 NAS 對一部分人還是有些用處的,況且實作也不難,今天就花點時間介紹一下該怎麼做吧。

代碼: 選擇全部

apt-get install samba samba-common
先用以上指令把 SAMBA 安裝起來,畢竟目前大環境下使用 Windows 桌面系統的機器比較多,所以微軟的 SMB/CIFS 還是比較好用的網路檔案共享協定,市面上各種爛大街的 NAS 系統也大多內定支援 SMB/CIFS ,因為這樣對 Windows 桌面用戶來說最容易使用。

接下來我們要設定 Samba 的組態檔,系統內定的檔名是 smb.conf,在我們的例子中,這檔案是放在 /etc/samba 目錄之下,而且安裝 Samba 套件時會自動安裝一個內定的組態檔,記得上一篇我們設定了一個名為 md0 的 Raid 1 磁碟並且卦在 /mnt 之下嗎? 我打算把這個共享目錄掛在 /mnt/md0 的 sharefolder 之下,所以先來建立這個目錄 :

代碼: 選擇全部

mkdir /mnt/md0/sharefolder
chown nobody:nogroup /mnt/md0/sharefolder
chmod -R 0777 /mnt/md0/sharefolder
chgrp sambashare /mnt/md0/sharefolder
建立目錄之後設置適當的擁有者及權限,以便之後遠端使用者可以存取這個目錄。

接下來我們來設定 Samba 的組態,我不想花時間解說 Samba 的設置,所以我也不用系統內定的 smb.conf ,打算自己建一個新的且比較簡潔的組態檔,先把系統內定的組態檔改個名字 :

代碼: 選擇全部

mv /etc/samba/smb.conf /etc/samba/smb.conf.sample
接下來建立新的 smb.conf 並輸入以下內容 :

代碼: 選擇全部

[Global]
workgroup = WORKGROUP
server string = Pi4_NAS %v
netbios namd = Pi4_NAS
security = user
map to guest = bad user
name resolve order = bcast host
dns proxy = no


[Public]
	comment = Pi4_NAS file share
	path = /mnt/md0/sharefolder
	browseable = yes
	writeable = yes
	guest ok = yes
	read only = no
	create mode = 0777
	directory mode = 0777
	force user = nobody
接下來重新啟動 samba 的服務

代碼: 選擇全部

systemctl restart smbd nmbd
之後就能夠在 windows 的網路芳鄰裡面看到這個共享區了
NAS 共享目錄
NAS 共享目錄
RPi4-NAS-01.png (6.29 KiB) 已瀏覽 46685 次

以上的設定檔是開放給所有人使用的公用目錄,若想要改變名稱就改掉 [Public] 為你想要的名字,至於這邊看到的 Ubuntu 則是這台 RPi4 的 Hostname

也許有人會問,弄一個隨身 NAS 到底有啥用處 !? 這樣說吧,像我這樣到處幫客戶搞東搞西,喔不,到處幫客戶做事,咳咳,有時候要把檔案給客戶,有時候也有機會要跟客戶要些檔案,這時候有個 NAS 就很方便了,直接掛到網路上,然後叫客戶自己去 NAS 上把檔案抓下來,也可以讓客戶把要給我的檔案直接放上 NAS,當然,我自己的話,用不用這個 NAS 都還好,畢竟我的檔案不會太大,但是如果對那些做美工或是做影片剪接的朋友,那就很有用了,有時候交給客戶的檔案動輒好幾 G 好幾十 G,雖然隨身碟也是可用拉,但畢竟沒有放在網上的 NAS 好用是吧,就我這個例子來說,兩個 256G 隨身碟組成的磁碟陣列當成 NAS,怎麼說也有兩百多 G 的使用空間可供使用,真是太方便了。

.

回覆文章