利用 Raspberry Pi 4 架設一個隨身 NAS
發表於 : 2020年 7月 9日, 11:20
由於 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 有找,我是不到一千入手。
這是我目前找到體積最小,又是 USB 3.0 以上 (其實是 3.1,但 Pi4 只吃 3.0啊),裝在 Pi4 上看起來只是一個小突起,不影響攜帶。
現在我們登入 Pi4,並查詢一下這兩顆隨身碟的磁碟標籤是啥,其實 Pi4 若插入第一顆硬碟或是隨身碟,自動抓到 dev/sda ,第二顆是 /dev/sdb,所以理論上我們只插了兩個隨身碟,所以應該是 /dev/sda 跟 /dev/sdb 兩個,不過我們這邊還是用指令查詢確認一下好了:
用以下指令查詢系統上有那些區塊裝置 (block device)
我這邊查到的資訊如下:
果然是 sda 跟 sdb,雖然都各有 sda1 跟 sdb1 的磁碟區 (partition) 而且應該是 exFAT,不過這邊我們不需理會,也不需先進行處裡 (前提是新買的,如果你用舊的而且上面有資料的話,先把該備份的資料先備份吧),因為後面的過程中我們需要重新格式化。
現在先用 mdadm 指令來建立磁碟陣列 (Disk Array),我為了容錯所以選用的是 Raid 1,這樣若是其中一個隨身碟壞了我的資料還會在,但如果你追求的是快速而不是安全性,你可以用 Raid 0,這樣在存取上速度會更快,不過萬一其中一個隨身碟掛了,你就要跟資料說掰掰了,以下指令建立一個名為 md0 的Raid 1 磁碟陣列:
以上指令是告訴 mdadm 我們要建立一個新的磁碟陣列 /dev/md0,使用兩顆磁碟分別是 /dev/sda 及 /dev/sdb,建立的過程如下:
過程中它會警告你磁碟中已有磁碟區但是陣列建立後就沒意義了,不用理它那個就是新購入的隨身碟原廠先幫我們格式化成 exFAT 讓我們買來之後就能直接使用,剛剛就說過,不過跟我們無關。完成後我們查詢一下,用以下指令:
結果如下:
建完磁碟陣列之後,系統就開始進行同步化,同步需要一段時間,你可以晚點再用同樣的指令查詢同步化完成多少。不過我們不需等它完成就可以繼續做接下來的動作,我們先將新的 md0 磁碟進行格式化,因為是 Linux 系統,我直接使用 ext4,指令如下:
過程如下:
再用 lsblk 指令看一下我們剛建立磁碟陣列之後,系統可以看到的區塊裝置有哪些:
接者我們用 df -kh 指令來查詢掛載的磁區 (df 指令是查詢容量,但可以看到已掛載的磁區):
我這邊查詢的結果如下:
這時還沒有我們新建的 md0,所以我們還需要兩個動作,一個是建立掛載點,另一個動作就是把 md0 掛載上去。用以下兩個指令來分別建立掛載點以及掛載磁碟區:
除非出錯,否則以上兩個指令不會顯示任何訊息,所以我們再用一次 df -kh 指令查詢:
這時候應該可以看到最下面一行出現了
這個指令會把磁碟陣列的詳細參數加到 mdadm.conf 的最後面,接下來我們再更新一下 initramfs 以便以後在開機時期這個陣列就能被使用,最後在 fstab 裡面加上這個磁碟陣列磁區,以便開機後能夠自動掛載,使用以下指令:
好了,準備工作至此完成,之後就是進行網路分享的設定工作了
...
怎麼在 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 有找,我是不到一千入手。
這是我目前找到體積最小,又是 USB 3.0 以上 (其實是 3.1,但 Pi4 只吃 3.0啊),裝在 Pi4 上看起來只是一個小突起,不影響攜帶。
現在我們登入 Pi4,並查詢一下這兩顆隨身碟的磁碟標籤是啥,其實 Pi4 若插入第一顆硬碟或是隨身碟,自動抓到 dev/sda ,第二顆是 /dev/sdb,所以理論上我們只插了兩個隨身碟,所以應該是 /dev/sda 跟 /dev/sdb 兩個,不過我們這邊還是用指令查詢確認一下好了:
用以下指令查詢系統上有那些區塊裝置 (block device)
代碼: 選擇全部
lsblk
果然是 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
過程中它會警告你磁碟中已有磁碟區但是陣列建立後就沒意義了,不用理它那個就是新購入的隨身碟原廠先幫我們格式化成 exFAT 讓我們買來之後就能直接使用,剛剛就說過,不過跟我們無關。完成後我們查詢一下,用以下指令:
代碼: 選擇全部
cat /proc/mdstat
建完磁碟陣列之後,系統就開始進行同步化,同步需要一段時間,你可以晚點再用同樣的指令查詢同步化完成多少。不過我們不需等它完成就可以繼續做接下來的動作,我們先將新的 md0 磁碟進行格式化,因為是 Linux 系統,我直接使用 ext4,指令如下:
代碼: 選擇全部
mkfs.ext4 -F /dev/md0
過程如下:
再用 lsblk 指令看一下我們剛建立磁碟陣列之後,系統可以看到的區塊裝置有哪些:
接者我們用 df -kh 指令來查詢掛載的磁區 (df 指令是查詢容量,但可以看到已掛載的磁區):
代碼: 選擇全部
df -kh
我這邊查詢的結果如下:
這時還沒有我們新建的 md0,所以我們還需要兩個動作,一個是建立掛載點,另一個動作就是把 md0 掛載上去。用以下兩個指令來分別建立掛載點以及掛載磁碟區:
代碼: 選擇全部
mkdir -p /mnt/md0
mount /dev/md0 /mnt/md0
這時候應該可以看到最下面一行出現了
當然,上面的數字可能會有點不同,主要是看你使用的隨身碟容量,如果跟我用同一個型號的,看到的數值應該相同。這時候,硬碟跟磁區的準備工作應該已經完成。不過我們希望以後開機之後能自動掛載這個磁碟區,所以我們要再做一些設定工作,先來修改 /etc/mdadm/mdadm/conf ,把最新的磁碟陣列訊息加進去,我們利用以下指令:/dev/md0 229G 61M 217G 1% /mnt/md0
代碼: 選擇全部
mdadm --detail --scan >> /etc/mdadm/mdadm.conf
代碼: 選擇全部
echo '/dev/md0 /mnt/md0 ext4 defaults,nofail,discard 0 0' >> /etc/fstab
...