Xây dựng hệ thống NAS gia đình rẻ tiền trên Linux

Xây dựng hệ thống NAS gia đình rẻ tiền trên Linux

Tôi cũng như nhiều người dùng MacBook Pro khác đã gặp phải vấn đề không đủ bộ nhớ trong. Nói chính xác hơn, rMBP tôi sử dụng hàng ngày được trang bị ổ SSD có dung lượng chỉ 256GB, điều này đương nhiên là không đủ trong một thời gian dài.

Và trên hết, khi tôi bắt đầu quay video trong các chuyến bay của mình, tình hình chỉ trở nên tồi tệ hơn. Dung lượng cảnh quay được quay sau những chuyến bay như vậy là hơn 50 GB và ổ SSD 256 GB kém cỏi của tôi rất nhanh chóng bị đầy, buộc tôi phải mua ổ 1TB bên ngoài. Tuy nhiên, sau một năm, nó không còn có thể xử lý lượng dữ liệu tôi tạo ra nữa, chưa kể việc thiếu tính dự phòng và sao lưu khiến nó không phù hợp để lưu trữ những thông tin quan trọng.

Vì vậy, đã có lúc tôi quyết định xây dựng một NAS lớn với hy vọng rằng hệ thống này sẽ tồn tại ít nhất vài năm mà không cần nâng cấp thêm.

Tôi viết bài viết này chủ yếu như một lời nhắc nhở về chính xác những gì tôi đã làm và cách tôi đã làm trong trường hợp tôi cần phải làm lại. Tôi hy vọng rằng nó cũng sẽ hữu ích cho bạn nếu bạn quyết định làm điều tương tự.

Có lẽ nó dễ mua hơn?

Vì vậy, chúng ta biết mình muốn đạt được điều gì, câu hỏi vẫn là: bằng cách nào?

Lần đầu tiên tôi xem xét các giải pháp thương mại và đặc biệt là Synology, công ty được cho là cung cấp hệ thống NAS cấp tiêu dùng tốt nhất trên thị trường. Tuy nhiên, chi phí của dịch vụ này hóa ra khá cao. Hệ thống 4 khay rẻ nhất có giá trên 300 USD và không bao gồm ổ cứng. Ngoài ra, bản thân việc lấp đầy bên trong của một bộ sản phẩm như vậy không có gì đặc biệt ấn tượng, điều này đặt ra câu hỏi về hiệu suất thực sự của nó.

Sau đó tôi nghĩ: tại sao không tự mình xây dựng một máy chủ NAS?

Tìm một máy chủ phù hợp

Nếu bạn định lắp ráp một máy chủ như vậy, thì trước hết bạn cần tìm phần cứng phù hợp. Một máy chủ đã qua sử dụng sẽ khá phù hợp cho bản dựng này vì chúng ta sẽ không cần nhiều hiệu năng cho các tác vụ lưu trữ. Trong số những thứ cần thiết, chúng ta cần lưu ý dung lượng RAM lớn, một số đầu nối SATA và card mạng tốt. Vì máy chủ của tôi sẽ hoạt động ở nơi thường trú của tôi nên mức độ tiếng ồn cũng có vấn đề.

Tôi bắt đầu tìm kiếm trên eBay. Mặc dù tôi tìm thấy ở đó rất nhiều Dell PowerEdge R410/R210 đã qua sử dụng với giá dưới 100 USD, nhưng có kinh nghiệm làm việc trong phòng máy chủ, tôi biết rằng các thiết bị 1U này tạo ra quá nhiều tiếng ồn và không phù hợp để sử dụng tại nhà. Theo quy định, các máy chủ tháp thường ít ồn ào hơn, nhưng thật không may, có rất ít máy chủ trên eBay và tất cả chúng đều đắt tiền hoặc không đủ mạnh.

Nơi tiếp theo để tìm là Craiglist, nơi tôi tìm thấy ai đó đang bán một chiếc HP ProLiant N40L đã qua sử dụng với giá chỉ 75 USD! Tôi đã quen với những máy chủ này, thậm chí thường có giá khoảng 300 USD đã được sử dụng, vì vậy tôi đã gửi email cho người bán với hy vọng rằng quảng cáo vẫn còn hoạt động. Khi biết được trường hợp này, tôi không cần suy nghĩ kỹ đã đến San Mateo để nhận máy chủ này, điều này thoạt nhìn chắc chắn làm tôi hài lòng. Nó ít bị mài mòn và ngoại trừ một chút bụi, mọi thứ khác đều tuyệt vời.

Xây dựng hệ thống NAS gia đình rẻ tiền trên Linux
Hình ảnh máy chủ, ngay sau khi mua

Dưới đây là thông số kỹ thuật của bộ sản phẩm tôi đã mua:

  • CPU: Bộ xử lý lõi kép AMD Turion(tm) II Neo N40L (64-bit)
  • RAM: RAM 8 GB không phải ECC (được chủ sở hữu trước cài đặt)
  • Đèn flash: Ổ USB 4GB
  • Kết nối SATA: 4 + 1
  • NIC: 1 Gbps trên NIC trên bo mạch

Không cần phải nói, dù đã ra đời được vài năm nhưng thông số kỹ thuật của máy chủ này vẫn vượt trội so với hầu hết các lựa chọn NAS trên thị trường, đặc biệt là về RAM. Một thời gian sau, tôi thậm chí còn nâng cấp lên 16 GB ECC với kích thước bộ đệm tăng lên và khả năng bảo vệ dữ liệu tăng cường.

Lựa chọn ổ cứng

Bây giờ chúng tôi có một hệ thống làm việc tuyệt vời và tất cả những gì còn lại là chọn ổ cứng cho nó. Rõ ràng, với 75 đô la đó, tôi chỉ có máy chủ mà không có ổ cứng HDD, điều này không làm tôi ngạc nhiên.

Sau khi thực hiện một số nghiên cứu, tôi phát hiện ra rằng ổ cứng WD Red phù hợp nhất để chạy hệ thống NAS 24/7. Để mua chúng, tôi đã tìm đến Amazon, nơi tôi mua 4 bản, mỗi bản 3 TB. Về cơ bản, bạn có thể kết nối bất kỳ ổ cứng nào mà bạn thích nhưng hãy đảm bảo rằng chúng có cùng dung lượng và tốc độ. Điều này sẽ giúp bạn tránh được các vấn đề về hiệu suất RAID có thể xảy ra về lâu dài.

Thiết lập hệ thống

Tôi nghĩ rằng nhiều người sẽ sử dụng hệ thống này để xây dựng NAS của họ FreeNAS, và điều đó không có gì sai cả. Tuy nhiên, mặc dù có khả năng cài đặt hệ thống này trên máy chủ của mình, tôi vẫn thích sử dụng CentOS hơn vì hệ thống ZFS trên Linux ban đầu được chuẩn bị cho môi trường sản xuất và nói chung, việc quản lý máy chủ Linux quen thuộc hơn với tôi. Ngoài ra, tôi không quan tâm đến giao diện và tính năng ưa thích do FreeNAS cung cấp - mảng RAIDZ và chia sẻ AFP là đủ đối với tôi.

Việc cài đặt CentOS trên USB khá đơn giản - chỉ cần chỉ định USB làm nguồn khởi động và khi khởi chạy, trình hướng dẫn cài đặt sẽ hướng dẫn bạn qua tất cả các giai đoạn của quá trình cài đặt.

xây dựng RAID

Sau khi cài đặt thành công CentOS, tôi cũng cài đặt ZFS trên Linux theo hướng dẫn trong danh sách các bước ở đây.

Khi quá trình này hoàn tất, tôi đã tải mô-đun ZFS Kernel:

$ sudo modprobe zfs

Và tạo mảng RAIDZ1 bằng lệnh 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

Xin lưu ý rằng ở đây tôi đang sử dụng ID của ổ cứng thay vì tên hiển thị của chúng (sdx) để giảm khả năng chúng không thể gắn kết sau khi khởi động do thay đổi chữ cái.

Tôi cũng đã thêm bộ đệm ZIL và L2ARC chạy trên một ổ SSD riêng, chia ổ SSD đó thành hai phân vùng: 5GB cho ZIL và phần còn lại cho L2ARC.

Còn với RAIDZ1 thì có thể chịu được 1 ổ đĩa bị hỏng. Nhiều ý kiến ​​cho rằng không nên sử dụng tùy chọn nhóm này do có khả năng đĩa thứ hai bị lỗi trong quá trình xây dựng lại RAID, có thể dẫn đến mất dữ liệu. Tôi đã bỏ qua khuyến nghị này vì tôi thường xuyên tạo bản sao lưu của dữ liệu quan trọng trên một thiết bị từ xa và việc lỗi toàn bộ mảng chỉ có thể ảnh hưởng đến tính khả dụng của dữ liệu chứ không ảnh hưởng đến sự an toàn của dữ liệu. Nếu bạn không có khả năng tạo bản sao lưu thì tốt hơn nên sử dụng các giải pháp như RAIDZ2 hoặc RAID10.

Bạn có thể xác minh rằng việc tạo nhóm đã thành công bằng cách chạy:

$ sudo zpool status

и

$ sudo zfs list
NAME                               USED  AVAIL  REFER  MOUNTPOINT
data                               510G  7.16T   140K  /mnt/data

Theo mặc định, ZFS gắn trực tiếp nhóm mới được tạo vào /, điều này nói chung là không mong muốn. Bạn có thể thay đổi điều này bằng cách chạy:

zfs set mountpoint=/mnt/data data

Từ đây bạn có thể chọn tạo một hoặc nhiều bộ dữ liệu để lưu trữ dữ liệu. Tôi đã tạo hai cái, một để sao lưu Time Machine và một để lưu trữ tệp dùng chung. Tôi đã giới hạn kích thước của tập dữ liệu Time Machine ở hạn mức 512 GB để ngăn chặn sự tăng trưởng vô tận của nó.

Tối ưu hóa

zfs set compression=on data

Lệnh này cho phép hỗ trợ nén ZFS. Tính năng nén sử dụng năng lượng CPU tối thiểu nhưng có thể cải thiện đáng kể thông lượng I/O, do đó luôn được khuyến khích.

zfs set relatime=on data

Với lệnh này, chúng tôi giảm số lượng cập nhật xuống atimeđể giảm việc tạo IOPS khi truy cập tệp.

Theo mặc định, ZFS trên Linux sử dụng 50% bộ nhớ vật lý cho ARC. Trong trường hợp của tôi, khi tổng số tệp nhỏ, con số này có thể tăng lên 90% một cách an toàn vì sẽ không có ứng dụng nào khác chạy trên máy chủ.

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

Sau đó sử dụng arc_summary.py Bạn có thể xác minh rằng những thay đổi đã có hiệu lực:

$ 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
...

Thiết lập nhiệm vụ định kỳ

Tôi đã sử dụng systemd-zpool-chà để định cấu hình bộ hẹn giờ systemd để thực hiện dọn dẹp mỗi tuần một lần và ảnh chụp nhanh zfs-auto để tự động tạo ảnh chụp nhanh sau mỗi 15 phút, 1 giờ và 1 ngày.

Cài đặt Netatalk

nettalk là một triển khai mã nguồn mở của AFP (Giao thức nộp hồ sơ của Apple). Tiếp theo hướng dẫn cài đặt chính thức cho CentOS, theo đúng nghĩa đen, tôi đã nhận được gói RPM được lắp ráp và cài đặt chỉ trong vài phút.

Thiết lập cấu hình

$ 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

Xin lưu ý rằng vol dbnest là một cải tiến lớn trong trường hợp của tôi, vì theo mặc định Netatalk ghi cơ sở dữ liệu CNID vào thư mục gốc của hệ thống tệp, điều này hoàn toàn không mong muốn vì hệ thống tệp chính của tôi chạy trên USB và do đó tương đối chậm. Bật lên vol dbnest dẫn đến việc lưu cơ sở dữ liệu trong thư mục gốc của Tập, trong trường hợp này thuộc về nhóm ZFS và đã hoạt động hiệu quả hơn rất nhiều.

Kích hoạt cổng trong Tường lửa

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

sudo tường lửa-cmd --permanent --zone=public --add-port=afpovertcp/tcp
Nếu mọi thứ được định cấu hình chính xác, máy của bạn sẽ hiển thị trong Finder và Time Machine cũng sẽ hoạt động.

Cài đặt thêm
Giám sát THÔNG MINH

Bạn nên theo dõi trạng thái ổ đĩa của mình để ngăn ngừa lỗi ổ đĩa.

$ sudo yum install smartmontools
$ sudo systemctl start smartd

Daemon cho UPS

Giám sát mức sạc của UPS APC và tắt hệ thống khi mức sạc sắp hết.

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

Nâng cấp phần cứng

Một tuần sau khi thiết lập hệ thống, tôi bắt đầu ngày càng lo ngại về bộ nhớ không phải ECC của máy chủ. Ngoài ra, trong trường hợp ZFS, bộ nhớ bổ sung để đệm sẽ rất hữu ích. Vì vậy, tôi quay lại Amazon nơi tôi mua 2 RAM Kingston DDR3 8GB ECC với giá 80 USD mỗi chiếc và thay thế RAM máy tính để bàn do chủ sở hữu trước đó lắp đặt. Hệ thống khởi động lần đầu tiên mà không gặp bất kỳ sự cố nào và tôi đảm bảo rằng hỗ trợ ECC đã được kích hoạt:

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

Kết quả

Tôi rất hài lòng với kết quả. Giờ đây, tôi có thể liên tục giữ cho kết nối mạng LAN 1Gbps của máy chủ luôn bận rộn bằng cách sao chép tệp và Time Machine hoạt động hoàn hảo. Vì vậy, nhìn chung, tôi hài lòng với việc thiết lập.

Tổng chi phí:

  1. 1 * HP ProLiant N40L = $75
  2. RAM 2 * 8 GB ECC = $174
  3. Ổ cứng 4 * WD Red 3 TB = $440

trong tổng số = $ 689

Bây giờ tôi có thể nói rằng cái giá đó là xứng đáng.

Bạn có tạo máy chủ NAS của riêng mình không?

Xây dựng hệ thống NAS gia đình rẻ tiền trên Linux

Xây dựng hệ thống NAS gia đình rẻ tiền trên Linux

Nguồn: www.habr.com

Thêm một lời nhận xét