การสร้างระบบ NAS ภายในบ้านราคาไม่แพงบน Linux

การสร้างระบบ NAS ภายในบ้านราคาไม่แพงบน Linux

เช่นเดียวกับผู้ใช้ MacBook Pro คนอื่น ๆ ต้องเผชิญกับปัญหาหน่วยความจำภายในไม่เพียงพอ เพื่อให้แม่นยำยิ่งขึ้น rMBP ที่ฉันใช้ทุกวันนั้นมาพร้อมกับ SSD ที่มีความจุเพียง 256GB ซึ่งโดยธรรมชาติแล้วจะไม่เพียงพอเป็นเวลานาน

และเหนือสิ่งอื่นใด ฉันเริ่มบันทึกวิดีโอระหว่างเที่ยวบิน สถานการณ์ยิ่งแย่ลงไปอีก ปริมาณฟุตเทจที่ถ่ายหลังจากเที่ยวบินดังกล่าวคือ 50+ GB และ SSD ขนาด 256GB ที่ไม่ดีของฉันก็เต็มในไม่ช้า ทำให้ฉันจำเป็นต้องซื้อไดรฟ์ภายนอกขนาด 1TB อย่างไรก็ตาม หลังจากผ่านไปหนึ่งปี มันก็ไม่สามารถจัดการกับปริมาณข้อมูลที่ฉันสร้างขึ้นได้อีกต่อไป และยังไม่ต้องพูดถึงการขาดความซ้ำซ้อนและการสำรองข้อมูลทำให้ไม่เหมาะสมสำหรับการโฮสต์ข้อมูลสำคัญ

ดังนั้น จนถึงจุดหนึ่ง ฉันจึงตัดสินใจสร้าง NAS ขนาดใหญ่โดยหวังว่าระบบนี้จะใช้งานได้อย่างน้อยสองสามปีโดยไม่ต้องอัปเกรดอีก

ฉันเขียนบทความนี้เป็นหลักเพื่อเตือนใจถึงสิ่งที่ฉันทำและวิธีที่ฉันทำในกรณีที่จำเป็นต้องทำอีกครั้ง ฉันหวังว่ามันจะเป็นประโยชน์สำหรับคุณเช่นกันหากคุณตัดสินใจทำเช่นเดียวกัน

บางทีมันอาจจะง่ายกว่าที่จะซื้อ?

เรารู้ว่าเราต้องการอะไร คำถามยังคงอยู่: ทำอย่างไร?

อันดับแรกฉันดูโซลูชันเชิงพาณิชย์และโดยเฉพาะที่ Synology ซึ่งควรจะจัดหาระบบ NAS ระดับผู้บริโภคที่ดีที่สุดในตลาด อย่างไรก็ตาม ค่าบริการนี้กลับกลายเป็นว่าค่อนข้างสูง ระบบ 4-bay ที่ถูกที่สุดมีราคา 300 เหรียญสหรัฐขึ้นไป และไม่รวมฮาร์ดไดรฟ์ นอกจากนี้การบรรจุภายในของชุดอุปกรณ์ดังกล่าวนั้นไม่ได้น่าประทับใจเป็นพิเศษซึ่งทำให้ตั้งคำถามถึงประสิทธิภาพที่แท้จริงของมัน

แล้วฉันก็คิดว่า: ทำไมไม่สร้างเซิร์ฟเวอร์ NAS ด้วยตัวเองล่ะ?

ค้นหาเซิร์ฟเวอร์ที่เหมาะสม

หากคุณกำลังจะประกอบเซิร์ฟเวอร์ดังกล่าว ก่อนอื่นคุณต้องค้นหาฮาร์ดแวร์ที่เหมาะสมก่อน เซิร์ฟเวอร์ที่ใช้แล้วควรจะค่อนข้างเหมาะสมกับโครงสร้างนี้ เนื่องจากเราไม่ต้องการประสิทธิภาพมากนักสำหรับงานจัดเก็บข้อมูล ในบรรดาสิ่งที่จำเป็นเราควรสังเกต RAM จำนวนมาก ตัวเชื่อมต่อ SATA หลายตัว และการ์ดเครือข่ายที่ดี เนื่องจากเซิร์ฟเวอร์ของฉันจะทำงานในสถานที่ที่ฉันอาศัยอยู่ถาวร ระดับเสียงจึงมีความสำคัญเช่นกัน

ฉันเริ่มค้นหาบนอีเบย์ แม้ว่าฉันจะพบ Dell PowerEdge R410/R210 มือสองจำนวนมากที่นั่นในราคาต่ำกว่า 100 ดอลลาร์ โดยมีประสบการณ์ทำงานในห้องเซิร์ฟเวอร์ แต่ฉันรู้ว่าหน่วย 1U เหล่านี้ส่งเสียงรบกวนมากเกินไป และไม่เหมาะสำหรับใช้ในบ้าน ตามกฎแล้ว เซิร์ฟเวอร์แบบทาวเวอร์มักจะมีเสียงรบกวนน้อยกว่า แต่น่าเสียดายที่มีไม่กี่เซิร์ฟเวอร์บน eBay และทั้งหมดก็มีราคาแพงหรือมีกำลังไม่เพียงพอ

สถานที่ต่อไปที่ต้องไปดูคือ Craiglist ซึ่งฉันพบคนขาย HP ProLiant N40L มือสองในราคาเพียง $75! ฉันคุ้นเคยกับเซิร์ฟเวอร์เหล่านี้ ซึ่งโดยปกติแล้วจะมีราคาประมาณ 300 ดอลลาร์สหรัฐฯ ดังนั้นฉันจึงส่งอีเมลถึงผู้ขายโดยหวังว่าโฆษณาจะยังคงทำงานอยู่ เมื่อทราบว่าเป็นกรณีนี้ ฉันก็มุ่งหน้าไปที่ซานมาเทโอเพื่อรับเซิร์ฟเวอร์นี้โดยไม่ต้องคิดซ้ำสอง ซึ่งเมื่อเห็นแวบแรกก็ทำให้ฉันพอใจอย่างแน่นอน มีการสึกหรอเพียงเล็กน้อยและยกเว้นฝุ่นเล็กน้อย ส่วนอื่นๆ ก็เยี่ยมมาก

การสร้างระบบ NAS ภายในบ้านราคาไม่แพงบน Linux
รูปถ่ายของเซิร์ฟเวอร์ทันทีหลังจากการซื้อ

ต่อไปนี้เป็นข้อกำหนดสำหรับชุดอุปกรณ์ที่ฉันซื้อ:

  • ซีพียู: โปรเซสเซอร์ AMD Turion(tm) II Neo N40L Dual-Core (64 บิต)
  • แรม: 8 GB non-ECC RAM (ติดตั้งโดยเจ้าของคนก่อน)
  • แฟลช: ไดรฟ์ USB ขนาด 4 กิกะไบต์
  • ขั้วต่อ SATA:4+1
  • นิค: NIC ออนบอร์ด 1 Gbps

แม้จะอายุหลายปีแล้วก็ตาม แต่คุณสมบัติของเซิร์ฟเวอร์นี้ยังคงเหนือกว่าตัวเลือก NAS ส่วนใหญ่ในตลาด โดยเฉพาะอย่างยิ่งในแง่ของ RAM หลังจากนั้นไม่นาน ฉันก็อัปเกรดเป็น ECC ขนาด 16 GB ด้วยขนาดบัฟเฟอร์ที่เพิ่มขึ้นและการปกป้องข้อมูลที่เพิ่มขึ้น

การเลือกฮาร์ดไดรฟ์

ตอนนี้เรามีระบบการทำงานที่ยอดเยี่ยมและสิ่งที่เหลืออยู่คือการเลือกฮาร์ดไดรฟ์ให้ใช้งาน แน่นอนว่าด้วยราคา $75 ฉันมีเพียงเซิร์ฟเวอร์ที่ไม่มี HDD เท่านั้น ซึ่งฉันไม่แปลกใจเลย

หลังจากค้นคว้าข้อมูลเล็กน้อย ฉันพบว่า WD Red HDD เหมาะที่สุดสำหรับการรันระบบ NAS ตลอด 24 ชั่วโมงทุกวัน หากต้องการซื้อ ฉันหันไปหา Amazon โดยซื้อสำเนา 7 ชุด ชุดละ 4 TB โดยพื้นฐานแล้ว คุณสามารถเชื่อมต่อ HDD ใดก็ได้ที่คุณต้องการ แต่ต้องแน่ใจว่ามีความจุและความเร็วเท่ากัน สิ่งนี้จะช่วยคุณหลีกเลี่ยงปัญหาประสิทธิภาพการทำงานของ RAID ที่อาจเกิดขึ้นได้ในระยะยาว

ติดตั้งระบบ

ฉันคิดว่าหลายคนจะใช้ระบบนี้สำหรับการสร้าง NAS ของพวกเขา FreeNASและก็ไม่มีอะไรผิดปกติกับเรื่องนั้น อย่างไรก็ตาม แม้จะมีความเป็นไปได้ในการติดตั้งระบบนี้บนเซิร์ฟเวอร์ของฉัน แต่ฉันก็ยังเลือกที่จะใช้ CentOS เนื่องจากในตอนแรกระบบ ZFS บน Linux ได้รับการจัดเตรียมสำหรับสภาพแวดล้อมการใช้งานจริง และโดยทั่วไปแล้ว การจัดการเซิร์ฟเวอร์ Linux นั้นคุ้นเคยกับฉันมากกว่า นอกจากนี้ ฉันไม่สนใจอินเทอร์เฟซที่หรูหราและฟีเจอร์ที่ FreeNAS มอบให้ - อาร์เรย์ RAIDZ และการแชร์ AFP ก็เพียงพอสำหรับฉัน

การติดตั้ง CentOS บน USB ค่อนข้างง่าย - เพียงระบุ USB เป็นแหล่งการบูต และเมื่อเปิดใช้งาน วิซาร์ดการติดตั้งจะแนะนำคุณตลอดทุกขั้นตอน

บิลด์การโจมตี

หลังจากติดตั้ง CentOS สำเร็จ ฉันยังได้ติดตั้ง ZFS บน Linux ตามรายการ ขั้นตอนที่นี่.

เมื่อกระบวนการนี้เสร็จสมบูรณ์ ฉันจึงโหลดโมดูล ZFS Kernel:

$ 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) เพื่อลดโอกาสที่ไฟล์เหล่านี้จะล้มเหลวในการติดตั้งหลังจากบูตเนื่องจากการเปลี่ยนตัวอักษร

ฉันยังเพิ่มแคช ZIL และ L2ARC ที่ทำงานบน SSD แยกกัน โดยแยก 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 และอีกอันสำหรับการจัดเก็บไฟล์ที่ใช้ร่วมกัน ฉันจำกัดขนาดของชุดข้อมูล Time Machine ไว้ที่โควต้า 512 GB เพื่อป้องกันการเติบโตอย่างไม่มีที่สิ้นสุด

การเพิ่มประสิทธิภาพ

zfs set compression=on data

คำสั่งนี้เปิดใช้งานการสนับสนุนการบีบอัด ZFS การบีบอัดใช้พลังงาน CPU น้อยที่สุด แต่สามารถปรับปรุงปริมาณงาน I/O ได้อย่างมาก ดังนั้นจึงขอแนะนำเสมอ

zfs set relatime=on data

ด้วยคำสั่งนี้ เราจะลดจำนวนการอัพเดตลง atimeเพื่อลดการสร้าง IOPS เมื่อเข้าถึงไฟล์

ตามค่าเริ่มต้น ZFS บน Linux จะใช้หน่วยความจำกายภาพ 50% สำหรับ ARC ในกรณีของฉัน เมื่อจำนวนไฟล์ทั้งหมดมีน้อย สามารถเพิ่มได้อย่างปลอดภัยถึง 90% เนื่องจากจะไม่มีแอปพลิเคชันอื่นใดทำงานบนเซิร์ฟเวอร์

$ cat /etc/modprobe.d/zfs.conf 
options zfs zfs_arc_max=14378074112

แล้วใช้ arc_summary.py คุณสามารถตรวจสอบว่าการเปลี่ยนแปลงมีผล:

$ 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-zpool-scrub เพื่อกำหนดค่าตัวจับเวลา systemd เพื่อทำการล้างข้อมูลสัปดาห์ละครั้งและ zfs-สแนปชอตอัตโนมัติ เพื่อสร้างสแนปชอตโดยอัตโนมัติทุกๆ 15 นาที 1 ชั่วโมง และ 1 วัน

การติดตั้ง Netatalk

netatalk เป็นการนำ AFP ไปใช้แบบโอเพ่นซอร์ส (โปรโตคอลการยื่นของ Apple). กำลังติดตาม คำแนะนำการติดตั้งอย่างเป็นทางการสำหรับ CentOก ฉันได้รับแพ็คเกจ 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 ส่งผลให้เกิดการบันทึกฐานข้อมูลใน Volume root ซึ่งในกรณีนี้เป็นของพูล ZFS และมีประสิทธิผลมากขึ้นตามลำดับ

การเปิดใช้งานพอร์ตในไฟร์วอลล์

$ sudo firewall-cmd --permanent --zone=public --add-service=mdns
$ sudo firewall-cmd --permanent --zone=public --add-port=afpovertcp/tcp

sudo firewall-cmd --ถาวร --zone=public --add-port=afpovertcp/tcp
หากทุกอย่างได้รับการกำหนดค่าอย่างถูกต้อง เครื่องของคุณควรปรากฏใน Finder และ Time Machine ก็ควรจะทำงานเช่นกัน

การตั้งค่าเพิ่มเติม
การตรวจสอบสมาร์ท

ขอแนะนำให้ตรวจสอบสถานะของดิสก์ของคุณเพื่อป้องกันความล้มเหลวของดิสก์

$ sudo yum install smartmontools
$ sudo systemctl start smartd

ภูตสำหรับ UPS

ตรวจสอบการชาร์จของ APC UPS และปิดระบบเมื่อประจุเหลือน้อยมาก

$ sudo yum install epel-release
$ sudo yum install apcupsd
$ sudo systemctl enable apcupsd

การอัพเกรดฮาร์ดแวร์

หนึ่งสัปดาห์หลังจากการตั้งค่าระบบ ฉันเริ่มกังวลมากขึ้นเกี่ยวกับหน่วยความจำที่ไม่ใช่ ECC ของเซิร์ฟเวอร์ นอกจากนี้ ในกรณีของ ZFS หน่วยความจำเพิ่มเติมสำหรับการบัฟเฟอร์จะมีประโยชน์มาก ฉันจึงกลับไปที่ Amazon โดยซื้อ Kingston DDR2 3GB ECC RAM จำนวน 8x ในราคาตัวละ 80 เหรียญสหรัฐ และเปลี่ยน RAM เดสก์ท็อปที่ติดตั้งโดยเจ้าของคนก่อน ระบบบูตครั้งแรกโดยไม่มีปัญหาใดๆ และฉันแน่ใจว่าเปิดใช้งานการรองรับ ECC แล้ว:

$ dmesg | grep ECC
[   10.492367] EDAC amd64: DRAM ECC enabled.

ผล

ฉันพอใจมากกับผลลัพธ์ ตอนนี้ฉันสามารถรักษาการเชื่อมต่อ LAN ความเร็ว 1Gbps ของเซิร์ฟเวอร์ให้ยุ่งอยู่เสมอได้โดยการคัดลอกไฟล์ และ Time Machine ก็ทำงานได้อย่างไม่มีที่ติ โดยรวมแล้วฉันพอใจกับการตั้งค่า

ค่าใช้จ่ายทั้งหมด:

  1. 1 * HP ProLiant N40L = 75 ดอลลาร์
  2. ECC RAM ขนาด 2 * 8 GB = 174 USD
  3. 4 * HDD WD Red ความจุ 3 TB = 440 USD

เบ็ดเสร็จ = $ 689

ตอนนี้บอกได้เลยว่าราคาก็คุ้มครับ

คุณสร้างเซิร์ฟเวอร์ NAS ของคุณเองหรือไม่?

การสร้างระบบ NAS ภายในบ้านราคาไม่แพงบน Linux

การสร้างระบบ NAS ภายในบ้านราคาไม่แพงบน Linux

ที่มา: will.com

เพิ่มความคิดเห็น