我和許多其他 MacBook Pro 用戶一樣,面臨記憶體不足的問題。更精確的來說,我日常使用的rMBP配備的SSD容量只有256GB,自然不夠用很長一段時間。
最重要的是,當我開始在飛行期間錄製影片時,情況只會變得更糟。這樣的飛行後拍攝的素材量達到了 50+ GB,而我那可憐的 256GB SSD 很快就被填滿了,迫使我買了一個外部 1TB 硬碟。然而,一年後,它無法再處理我產生的資料量,更不用說缺乏冗餘和備份使其不適合託管重要資訊。
因此,有一次我決定要建造一個大型 NAS,希望這個系統能持續至少幾年而不需要再次升級。
我寫這篇文章主要是為了提醒我到底做了什麼以及我是如何做的,以防我需要再做一次。如果您決定這樣做,我希望它對您也有用。
也許更容易購買?
所以,我們知道我們想要得到什麼,問題仍然是:如何得到?
我首先考慮了商業解決方案,特別是 Synology,它應該提供市場上最好的消費級 NAS 系統。然而,這項服務的成本卻相當高。最便宜的 4 碟位系統售價超過 300 美元,並且不包括硬碟。此外,這樣的套件本身的內部填充並不是特別令人印象深刻,這讓人質疑它的真實性能。
後來我想:為什麼不自己搭建一個NAS伺服器呢?
尋找合適的伺服器
如果您要組裝這樣的伺服器,那麼首先您需要找到合適的硬體。使用過的伺服器應該非常適合此構建,因為我們不需要太多效能來執行儲存任務。在必要的東西中,我們應該注意大量的 RAM、多個 SATA 連接器和良好的網路卡。由於我的服務器將在我的永久住所工作,因此噪音水平也很重要。
我開始在 eBay 上搜尋。雖然我在那裡發現了很多價格低於 410 美元的二手 Dell PowerEdge R210/R100,但由於有在伺服器機房工作的經驗,我知道這些 1U 設備噪音太大,不適合家庭使用。一般來說,塔式伺服器通常噪音較小,但不幸的是,eBay 上的塔式伺服器很少,而且要么價格昂貴,要么效能不足。
下一個要去的地方是 Craiglist,我發現有人以 40 美元的價格出售二手 HP ProLiant N75L!我很熟悉這些伺服器,即使使用它們通常也要花費 300 美元左右,所以我給賣家發了電子郵件,希望廣告仍然有效。得知這種情況後,我毫不猶豫地前往聖馬特奧購買了這台伺服器,乍一看確實讓我很滿意。它的磨損很小,除了一點灰塵之外,其他一切都很好。

購買後立即看到的伺服器照片
以下是我購買的套件的規格:
- 中央處理器:AMD Turion(tm) II Neo N40L 雙核心處理器(64 位元)
- 內存:8 GB 非 ECC RAM(由前任所有者安裝)
- 閃:4 GB USB 隨身碟
- SATA 連接器:4+1
- NIC:1 Gbps 板載 NIC
不用說,儘管已經有好幾年了,但該伺服器的規格仍然優於市場上大多數 NAS 選項,尤其是在 RAM 方面。稍後,我甚至升級到 16 GB ECC,增加了緩衝區大小並增強了資料保護。
選擇硬碟
現在我們已經有了一個優秀的工作系統,剩下的就是為其選擇硬碟了。顯然,我花了 75 美元只得到了伺服器本身,沒有硬碟,這並不讓我感到驚訝。
經過一番研究後,我發現 WD Red HDD 最適合運行 NAS 系統 24/7。為了購買它們,我轉向亞馬遜,在那裡我購買了 4 份,每份 3 TB。基本上,您可以連接任何您喜歡的硬碟,但請確保它們具有相同的容量和速度。從長遠來看,這將幫助您避免可能出現的 RAID 效能問題。
系統設定
我認為許多人會使用該系統來建立 NAS ,這並沒有什麼問題。然而,儘管可以在我的伺服器上安裝這個系統,但我更喜歡使用 CentOS,因為 Linux 系統上的 ZFS 最初是為生產環境準備的,一般來說,管理 Linux 伺服器對我來說更熟悉。此外,我對 FreeNAS 提供的花哨介面和功能不感興趣 - RAIDZ 陣列和 AFP 共享對我來說已經足夠了。
在 USB 上安裝 CentOS 非常簡單 - 只需指定 USB 作為啟動來源,啟動後安裝精靈將引導您完成所有階段。
RAID建置
成功安裝 CentOS 後,我還在 Linux 上安裝了 ZFS,如下圖所示 .
此過程完成後,我載入了 ZFS 核心模組:
$ sudo modprobe zfs 並使用指令建立 RAIDZ1 陣列 zpool:
$ sudo zpool create data raidz1 ata-WDC_WD30EFRX-68AX9N0_WD-WMC1T0609145 ata-WDC_WD30EFRX-68AX9N0_WD-WMC1T0609146 ata-WDC_WD30EFRX-68AX9N0_WD-WMC1T0609147 ata-WDC_WD30EFRX-68AX9N0_WD-WMC1T0609148
$ sudo zpool add data log ata-SanDisk_Ultra_II_240GB_174204A06001-part5
$ sudo zpool add data cache ata-SanDisk_Ultra_II_240GB_174204A06001-part6 請注意,這裡我使用的是硬碟的 ID,而不是它們的顯示名稱(sdx)以減少因字母變更而導致啟動後無法安裝的可能性。
我還添加了在單獨的 SSD 上運行的 ZIL 和 L2ARC 緩存,將該 SSD 分為兩個分區:5GB 用於 ZIL,其餘用於 L2ARC。
至於RAIDZ1,它可以承受1個磁碟故障。許多人認為不應使用此池選項,因為第二個磁碟可能在 RAID 重建過程中發生故障,從而導致資料遺失。我忽略了這個建議,因為我定期在遠端設備上備份重要數據,即使整個陣列發生故障也只會影響數據的可用性,而不會影響其安全性。如果您沒有能力進行備份,那麼最好使用 RAIDZ2 或 RAID10 等解決方案。
您可以透過執行以下命令來驗證池創建是否成功:
$ sudo zpool statusи
$ sudo zfs list
NAME USED AVAIL REFER MOUNTPOINT
data 510G 7.16T 140K /mnt/data 預設情況下,ZFS 將新建立的池直接掛載到 /,這通常是不希望的。您可以透過執行以下命令來變更此設定:
zfs set mountpoint=/mnt/data data從這裡您可以選擇建立一個或多個資料集來儲存資料。我創建了兩個,一個用於時間機器備份,一個用於共享文件儲存。我將 Time Machine 資料集的大小限制為 512 GB 的配額,以防止其無限增長。
優化
zfs set compression=on data此命令啟用 ZFS 壓縮支援。壓縮使用最少的 CPU 功率,但可以顯著提高 I/O 吞吐量,因此始終建議使用。
zfs set relatime=on data 透過此命令,我們可以減少更新次數 atime以減少存取文件時產生的 IOPS。
預設情況下,Linux 上的 ZFS 將 50% 的實體記憶體用於 ARC。就我而言,當檔案總數很小時,可以安全地增加到 90%,因為伺服器上不會運行其他應用程式。
$ cat /etc/modprobe.d/zfs.conf
options zfs zfs_arc_max=14378074112然後使用 您可以驗證變更是否已生效:
$ python arc_summary.py
...
ARC Size: 100.05% 11.55 GiB
Target Size: (Adaptive) 100.00% 11.54 GiB
Min Size (Hard Limit): 0.27% 32.00 MiB
Max Size (High Water): 369:1 11.54 GiB
...設定重複任務
我用了 配置 systemd 計時器每週執行一次清理,並且 每 15 分鐘、1 小時和 1 天自動建立快照。
安裝 Netatalk
是 AFP 的開源實作()。下列的 S,我實際上在短短幾分鐘內就收到了一個組裝並安裝的 RPM 包。
配置設定
$ cat /etc/netatalk/afp.conf
[datong@Titan ~]$ cat /etc/netatalk/afp.conf
;
; Netatalk 3.x configuration file
;
[Global]
; Global server settings
mimic model = TimeCapsule6,106
; [Homes]
; basedir regex = /home
; [My AFP Volume]
; path = /path/to/volume
; [My Time Machine Volume]
; path = /path/to/backup
; time machine = yes
[Datong's Files]
path = /mnt/data/datong
valid users = datong
[Datong's Time Machine Backups]
path = /mnt/data/datong_time_machine_backups
time machine = yes
valid users = datong Обратитевнимание,что vol dbnest 對我來說這是一個重大改進,因為預設情況下 Netatalk 將 CNID 資料庫寫入檔案系統的根目錄,這根本不是可取的,因為我的主檔案系統在 USB 上運行,因此速度相對較慢。正在開啟 vol dbnest 結果將資料庫保存在卷根中,在本例中屬於 ZFS 池,生產力已經提高了一個數量級。
在防火牆中啟用連接埠
$ sudo firewall-cmd --permanent --zone=public --add-service=mdns
$ sudo firewall-cmd --permanent --zone=public --add-port=afpovertcp/tcp sudo 防火牆-cmd --permanent --zone=public --add-port=afpovertcp/tcp
如果一切配置正確,您的機器應該顯示在 Finder 中,並且 Time Machine 也應該可以工作。
附加設定
智慧監控
建議監視磁碟的狀態以防止磁碟故障。
$ sudo yum install smartmontools
$ sudo systemctl start smartdUPS 守護程式
監控 APC UPS 的電量,並在電量嚴重不足時關閉系統。
$ sudo yum install epel-release
$ sudo yum install apcupsd
$ sudo systemctl enable apcupsd硬體升級
設定係統一週後,我開始越來越關心伺服器的非ECC記憶體。此外,對於 ZFS,用於緩衝的額外記憶體將非常有用。於是我回到亞馬遜,以每條 2 美元的價格購買了 3 條金士頓 DDR8 80GB ECC 內存,並更換了前任所有者安裝的台式機內存。系統第一次啟動沒有任何問題,並且我確保 ECC 支援已啟動:
$ dmesg | grep ECC
[ 10.492367] EDAC amd64: DRAM ECC enabled.導致
我對結果非常滿意。現在,我可以透過複製檔案來持續保持伺服器的 1Gbps LAN 連線繁忙,並且 Time Machine 可以完美運作。所以,總的來說,我對這個設定很滿意。
總成本:
- 1 * HP ProLiant N40L = 75 美元
- 2 * 8 GB ECC 記憶體 = 174 美元
- 4 * WD Red 3 TB HDD = 440 美元
在總 = $ 689
現在我可以說這個價格是值得的。
你們自己製作 NAS 伺服器嗎?
來源: www.habr.com
