เช่นเดียวกับผู้ใช้ 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 ดอลลาร์สหรัฐฯ ดังนั้นฉันจึงส่งอีเมลถึงผู้ขายโดยหวังว่าโฆษณาจะยังคงทำงานอยู่ เมื่อทราบว่าเป็นกรณีนี้ ฉันก็มุ่งหน้าไปที่ซานมาเทโอเพื่อรับเซิร์ฟเวอร์นี้โดยไม่ต้องคิดซ้ำสอง ซึ่งเมื่อเห็นแวบแรกก็ทำให้ฉันพอใจอย่างแน่นอน มีการสึกหรอเพียงเล็กน้อยและยกเว้นฝุ่นเล็กน้อย ส่วนอื่นๆ ก็เยี่ยมมาก
รูปถ่ายของเซิร์ฟเวอร์ทันทีหลังจากการซื้อ
ต่อไปนี้เป็นข้อกำหนดสำหรับชุดอุปกรณ์ที่ฉันซื้อ:
- ซีพียู: โปรเซสเซอร์ 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 ของพวกเขา
การติดตั้ง 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
แล้วใช้
$ 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
...
การตั้งค่างานที่เกิดซ้ำ
ฉันใช้
การติดตั้ง Netatalk
การตั้งค่าคอนฟิกูเรชัน
$ 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 * HP ProLiant N40L = 75 ดอลลาร์
- ECC RAM ขนาด 2 * 8 GB = 174 USD
- 4 * HDD WD Red ความจุ 3 TB = 440 USD
เบ็ดเสร็จ = $ 689
ตอนนี้บอกได้เลยว่าราคาก็คุ้มครับ
คุณสร้างเซิร์ฟเวอร์ NAS ของคุณเองหรือไม่?
ที่มา: will.com