Thiết lập máy chủ NFS trên Ubuntu: Hướng dẫn cần thiết để chia sẻ tệp trong HomeLab của bạn

HomeLab tutorial - IT technology blog
HomeLab tutorial - IT technology blog

Tại sao chia sẻ tệp truyền thống không hiệu quả trong HomeLab

Xây dựng một HomeLab rất thú vị, nhưng khi thiết lập của bạn phát triển, việc quản lý tệp trên nhiều máy có thể nhanh chóng trở thành một vấn đề đau đầu. Bạn sẽ sớm tích lũy các máy ảo để thử nghiệm, các vùng chứa chạy nhiều dịch vụ khác nhau, có thể là một máy chủ phương tiện chuyên dụng và một máy chủ tệp chuyên dụng.

Đột nhiên, bạn không chỉ xử lý một vài tệp; bạn có thể cần chia sẻ phương tiện với máy chủ Jellyfin của mình, phân phối bản sao lưu cấu hình trên nhiều nút hoặc duy trì một cơ sở mã chung để phát triển. Mặc dù sao chép tệp thủ công hoặc sử dụng các công cụ đơn giản như scp hoạt động cho các tác vụ một lần, nhưng cách tiếp cận này nhanh chóng sụp đổ khi các máy khách khác nhau cần truy cập liên tục, theo thời gian thực vào dữ liệu được chia sẻ.

Những hạn chế của chia sẻ ngẫu nhiên (Ad-Hoc Sharing)

Vấn đề cốt lõi với chia sẻ tệp không chính thức là thiếu một giải pháp lưu trữ gắn mạng thống nhất. Nếu không có một trung tâm mà tất cả các máy HomeLab của bạn có thể truy cập một cách minh bạch, bạn sẽ liên tục phải đối mặt với sự không nhất quán dữ liệu và mất hàng giờ để đồng bộ hóa thủ công.

Quyền truy cập trở thành một cuộc đấu tranh liên tục; việc điều hòa ID người dùng và ID nhóm trên các hệ điều hành khác nhau hoặc thậm chí các cài đặt khác nhau là một công việc khó chịu. Hơn nữa, việc dựa vào các giao thức ít được tối ưu hóa cho truy cập liên tục có thể gây ra các nút thắt cổ chai về hiệu suất đáng kể, khiến các ứng dụng chậm chạp hoặc thậm chí không đáng tin cậy. Điều bạn thực sự cần là một hệ thống mà mỗi máy khách cảm thấy như bộ nhớ cục bộ, nhưng thực tế lại nằm trên mạng của bạn.

Khám phá các tùy chọn chia sẻ tệp mạng

Khi xem xét chia sẻ tệp mạng cho một HomeLab, một vài tùy chọn phổ biến thường xuất hiện:

Samba (SMB/CIFS)

Samba rất tuyệt vời cho các môi trường hỗn hợp, đặc biệt nếu bạn có các máy Windows trong thiết lập HomeLab của mình. Nó là tiêu chuẩn thực tế cho việc chia sẻ tệp trên Windows.

Tuy nhiên, đối với một HomeLab thuần túy dựa trên Linux, Samba đôi khi có thể hơi quá mức cần thiết. Việc cấu hình ánh xạ người dùng và nhóm có thể phức tạp hơn – ví dụ, cố gắng đồng bộ hóa user1 trên Linux với user1 trên máy Windows yêu cầu thiết lập cẩn thận. Mặc dù hiệu suất nhìn chung tốt, nhưng nó có thể không nhẹ bằng các lựa chọn thay thế cho các máy khách Linux bản địa.

FTP/SFTP

FTP (File Transfer Protocol) và đối tác bảo mật của nó, SFTP (SSH File Transfer Protocol), rất tuyệt vời để truyền tệp. Chúng rất dễ thiết lập cho việc di chuyển tệp cơ bản, như tải một tệp từ PC của bạn lên máy chủ.

Tuy nhiên, hạn chế lớn của chúng là chúng không được thiết kế để gắn một chia sẻ mạng như thể nó là bộ nhớ cục bộ. Các ứng dụng sẽ không thể đọc và ghi tệp trực tiếp trên một chia sẻ FTP như cách chúng làm trên một đĩa cục bộ. Điều này khiến chúng không phù hợp cho các trường hợp mà các dịch vụ yêu cầu truy cập trực tiếp, liên tục vào hệ thống tệp dữ liệu.

Đồng bộ hóa lưu trữ đám mây

Các tùy chọn như Nextcloud hoặc các giải pháp lưu trữ đám mây thương mại (ví dụ: Google Drive, Dropbox) cung cấp quyền truy cập tệp được đồng bộ hóa.

Mặc dù tiện lợi, chúng thường yêu cầu kết nối internet, gây ra độ trễ (ngay cả trên kết nối nhanh, việc truyền một tệp 10GB có thể mất vài phút so với vài giây cục bộ) và có thể phát sinh chi phí (ví dụ: $10/tháng cho 2TB). Đối với nhiều người đam mê HomeLab, mục tiêu thường là tự lưu trữ và giữ dữ liệu cục bộ, vì vậy các giải pháp đám mây, mặc dù mạnh mẽ, thường đi ngược lại mục đích cốt lõi đó.

Tại sao NFS nổi bật trong HomeLab tập trung vào Linux

Đối với các HomeLab được xây dựng chủ yếu trên các máy Linux, Network File System (NFS) nổi bật là lựa chọn ưu việt. Giao thức này được xây dựng có mục đích để chia sẻ tệp giữa các hệ thống giống Unix.

NFS mang lại lợi ích hiệu suất đáng kể, đặc biệt là trên mạng cục bộ, phần lớn là do nó được tích hợp sâu vào nhân Linux. Nó nhẹ, cực kỳ hiệu quả và một khi được cấu hình, nó hoạt động âm thầm trong nền, cho phép các máy khách của bạn truy cập dữ liệu được chia sẻ như thể nó là một ổ đĩa cục bộ.

Theo kinh nghiệm của tôi, việc thành thạo cấu hình NFS là một kỹ năng cực kỳ có giá trị đối với bất kỳ người đam mê HomeLab hoặc kỹ sư DevOps nào. Thiết lập NFS chính xác ngay từ đầu có thể tiết kiệm hàng trăm giờ về lâu dài bằng cách tập trung hóa quản lý dữ liệu và hợp lý hóa việc triển khai trên toàn bộ cơ sở hạ tầng của bạn.

Thiết lập máy chủ NFS của bạn trên Ubuntu

Hãy cùng tìm hiểu cách thiết lập máy chủ NFS trên máy Ubuntu của bạn.

Điều kiện tiên quyết: Chuẩn bị sẵn sàng

  • Một cài đặt Ubuntu Server (hướng dẫn này giả định phiên bản 20.04 LTS trở lên).
  • Mạng cơ bản được cấu hình (rất khuyến nghị sử dụng địa chỉ IP tĩnh cho máy chủ NFS của bạn).
  • Quyền truy cập root hoặc sudo vào máy chủ của bạn.

Cài đặt các gói máy chủ NFS

Để bắt đầu, chúng ta cần cài đặt các gói cần thiết trên máy chủ Ubuntu của bạn. Lệnh sau sẽ tìm nạp và cài đặt nfs-kernel-server, gói này cung cấp tất cả các thành phần phía máy chủ thiết yếu cho NFS.


sudo apt update
sudo apt install nfs-kernel-server -y

Tạo các thư mục được chia sẻ

Tiếp theo, hãy định nghĩa thư mục (hoặc các thư mục) bạn muốn chia sẻ. Thực hành tốt nhất là tạo một vị trí chuyên dụng cho các chia sẻ NFS của bạn, thường là dưới /srv hoặc /export để dễ quản lý.


sudo mkdir -p /srv/nfs/shared_data

Bây giờ, hãy đặt các quyền thích hợp. Đối với một HomeLab, quyền truy cập rộng thường được mong muốn. Sử dụng nobody:nogroup đảm bảo rằng các tệp được tạo bởi máy khách NFS thuộc sở hữu của người dùng ẩn danh, điều này giúp ngăn chặn hiệu quả các xung đột quyền phổ biến. Đặt 777 cấp quyền đọc, ghi và thực thi đầy đủ cho mọi người. Hãy thận trọng với 777 trong môi trường sản xuất; nó thường quá dễ dãi về mặt bảo mật. Tuy nhiên, đối với một HomeLab cá nhân, nó đơn giản hóa đáng kể việc quản lý quyền.


sudo chown nobody:nogroup /srv/nfs/shared_data
sudo chmod 777 /srv/nfs/shared_data

Cấu hình NFS Exports: Tệp /etc/exports

Tệp /etc/exports là nơi bạn định nghĩa chính xác những thư mục nào được chia sẻ và với ai. Mỗi dòng trong tệp này chỉ định một thư mục được chia sẻ, tiếp theo là máy khách được phép truy cập và cuối cùng là các tùy chọn xuất cụ thể.

Mở tệp bằng trình soạn thảo văn bản yêu thích của bạn:


sudo nano /etc/exports

Thêm một dòng tương tự như ví dụ này, hãy nhớ thay thế 192.168.1.0/24 bằng dải mạng thực tế của HomeLab của bạn:


/srv/nfs/shared_data 192.168.1.0/24(rw,sync,no_subtree_check)

Hãy cùng phân tích các tùy chọn quan trọng này:

  • rw: Cho phép cả quyền đọc và ghi vào chia sẻ. Sử dụng ro cho quyền truy cập chỉ đọc.
  • sync: Tùy chọn này đảm bảo rằng các thay đổi được ghi vào đĩa trước khi máy chủ xác nhận hoạt động với máy khách. Điều này ưu tiên tính toàn vẹn dữ liệu nhưng có thể ảnh hưởng nhẹ đến hiệu suất so với async. Đối với HomeLab, sync nói chung an toàn hơn và là mặc định được ưu tiên.
  • no_subtree_check: Tù chọn này tắt kiểm tra cây con. Khi một máy khách NFS gắn một thư mục con của một hệ thống tệp được xuất, máy chủ thường thực hiện kiểm tra để đảm bảo máy khách không truy cập các tệp bên ngoài thư mục con đó. Việc tắt tùy chọn này cải thiện độ tin cậy và đôi khi có thể tăng tốc độ truyền, đặc biệt với các thư mục lồng sâu.
  • no_root_squash: (Sử dụng hết sức thận trọng!) Theo mặc định, NFS “squashes” quyền truy cập người dùng root từ các máy khách. Điều này có nghĩa là các yêu cầu bắt nguồn từ người dùng root của máy khách được xử lý như thể chúng đến từ người dùng nobody ít đặc quyền hơn trên máy chủ. Đây là một biện pháp bảo mật quan trọng. Việc tắt tùy chọn này bằng no_root_squash cho phép người dùng root của máy khách có đầy đủ các đặc quyền root trên thư mục được xuất của máy chủ NFS. Điều này thể hiện một rủi ro bảo mật đáng significant và nói chung không được khuyến nghị trừ khi bạn hiểu đầy đủ các hàm ý của nó và hoạt động trong một môi trường được kiểm soát chặt chẽ.

Lưu và đóng tệp.

Áp dụng thay đổi Export và khởi động lại dịch vụ NFS

Sau khi bạn đã sửa đổi /etc/exports, bạn phải hướng dẫn NFS đọc lại cấu hình của nó và áp dụng các thay đổi mới. Sau đó, khởi động lại máy chủ NFS để đảm bảo tất cả các cài đặt được khởi tạo chính xác.


sudo exportfs -a
sudo systemctl restart nfs-kernel-server
sudo systemctl enable nfs-kernel-server # Đảm bảo NFS tự động khởi động khi boot
sudo systemctl status nfs-kernel-server # Xác nhận dịch vụ đang chạy như mong đợi

Cấu hình tường lửa: Cho phép kết nối NFS

Nếu bạn đang chạy tường lửa (và bạn hoàn toàn nên làm như vậy!), bạn cần phải cho phép rõ ràng các kết nối đến máy chủ NFS của mình. Giả sử bạn đang sử dụng UFW (Uncomplicated Firewall) trên Ubuntu, đây là cách thực hiện:


sudo ufw allow from 192.168.1.0/24 to any port nfs
# Nếu UFW chưa hoạt động, hãy bật nó trước:
sudo ufw enable
sudo ufw status # Xác nhận các quy tắc của bạn đang hoạt động

Hãy nhớ thay thế 192.168.1.0/24 bằng dải mạng máy khách của bạn. Quy tắc này cho phép lưu lượng truy cập trên cổng NFS tiêu chuẩn (2049) và các cổng được gán động được sử dụng bởi các dịch vụ như rpcbind và mountd, đặc biệt là từ mạng được chỉ định của bạn.

Kết nối máy khách NFS của bạn

Bây giờ máy chủ NFS của bạn đã được cấu hình đầy đủ và sẵn sàng, hãy thiết lập các máy khách của bạn để gắn thư mục được chia sẻ.

Cài đặt các gói máy khách NFS

Trên mỗi máy khách cần truy cập chia sẻ NFS, bạn sẽ cần cài đặt gói nfs-common. Gói này cung cấp các công cụ cần thiết cho các hoạt động của máy khách NFS.


sudo apt update
sudo apt install nfs-common -y

Tạo điểm gắn kết (Mount Point)

Trước khi gắn chia sẻ, hãy tạo một thư mục cục bộ trên máy khách nơi chia sẻ NFS sẽ xuất hiện. Thư mục này hoạt động như một cổng truy cập vào các tệp được chia sẻ của bạn.


sudo mkdir -p /mnt/nfs_share

Gắn chia sẻ NFS

Bạn có thể gắn thủ công chia sẻ bằng lệnh mount để truy cập ngay lập tức:


sudo mount <NFS_SERVER_IP>:/srv/nfs/shared_data /mnt/nfs_share

Thay thế <NFS_SERVER_IP> bằng địa chỉ IP thực của máy chủ NFS của bạn. Sau khi gắn, hãy xác minh nó:


df -h
ls -l /mnt/nfs_share

Bạn sẽ thấy chia sẻ đã gắn được liệt kê trong đầu ra df -h. Hãy thử tạo một tệp trong /mnt/nfs_share; nó sẽ ngay lập tức xuất hiện trên máy chủ.

Tự động hóa gắn kết với /etc/fstab

Để truy cập vĩnh viễn, bạn sẽ muốn chia sẻ NFS của mình tự động gắn mỗi khi máy khách của bạn khởi động. Bạn có thể đạt được điều này bằng cách thêm một mục vào tệp /etc/fstab trên máy khách.

Mở /etc/fstab:


sudo nano /etc/fstab

Thêm dòng sau, một lần nữa thay thế <NFS_SERVER_IP> và cân nhắc thêm tùy chọn _netdev cho các điểm gắn phụ thuộc vào mạng:


<NFS_SERVER_IP>:/srv/nfs/shared_data /mnt/nfs_share nfs defaults,_netdev 0 0

Tùy chọn _netdev rất quan trọng vì nó báo cho hệ thống đợi cho đến khi mạng hoạt động trước khi cố gắng gắn chia sẻ, ngăn ngừa lỗi khởi động. Lưu và đóng tệp. Để kiểm tra xem mục nhập fstab có đúng không mà không cần khởi động lại, hãy ngắt gắn chia sẻ và sau đó chạy mount -a:


sudo umount /mnt/nfs_share
sudo mount -a
df -h

Nếu mount -a chạy mà không có lỗi và df -h hiển thị chia sẻ, bạn đã sẵn sàng cho việc gắn kết tự động!

Khắc phục sự cố NFS thường gặp

  • Lỗi “Permission denied” (Quyền bị từ chối): Bắt đầu bằng cách kiểm tra kỹ quyền hệ thống tệp trên máy chủ (sử dụng chownchmod) và xem lại các tùy chọn /etc/exports (đặc biệt là rw). Bạn cũng có thể cần đảm bảo UID/GID của máy khách và máy chủ khớp nhau, hoặc đơn giản hóa mọi thứ cho các thiết lập HomeLab bằng cách sử dụng nobody:nogroup cho quyền sở hữu và tùy chọn xuất all_squash trên máy chủ.
  • Lỗi “Mount: Stale file handle” (Gắn: Xử lý tệp cũ): Lỗi này thường xảy ra nếu máy chủ NFS được khởi động lại hoặc thư mục được chia sẻ đã thay đổi trong khi các máy khách đang được kết nối tích cực. Ngắt gắn và sau đó gắn lại chia sẻ trên máy khách thường giải quyết vấn đề này: sudo umount /mnt/nfs_share && sudo mount /mnt/nfs_share.
  • Lỗi kết nối hết thời gian/Tường lửa: Xác minh các quy tắc tường lửa trên máy chủ NFS của bạn được cấu hình chính xác. Đảm bảo UFW (hoặc tường lửa bạn đã chọn) cho phép kết nối trên các cổng NFS từ dải mạng máy khách của bạn. Một kiểm tra nhanh bằng sudo ufw status có thể xác nhận điều này.
  • Kiểm tra nhật ký: Các nhật ký hệ thống trên cả máy chủ và máy khách của bạn là tài nguyên vô giá để chẩn đoán sự cố. Các lệnh như journalctl -xe hoặc xem xét /var/log/syslog có thể cung cấp thông tin chi tiết quan trọng về những gì đã xảy ra.

Lời cuối: Nâng cao sức mạnh cho HomeLab của bạn

Cấu hình máy chủ NFS trên Ubuntu là một kỹ năng cơ bản cho bất kỳ ai nghiêm túc về việc xây dựng một HomeLab mạnh mẽ. Nó cung cấp một phương pháp đáng tin cậy, hiệu suất cao để chia sẻ tệp tập trung, tích hợp mượt mà vào môi trường Linux. Bạn đã có được một cách thức có thể mở rộng để chia sẻ mọi thứ từ thư viện phương tiện đến cấu hình ứng dụng trên toàn bộ cơ sở hạ tầng HomeLab của bạn. Bây giờ, hãy tiếp tục, thử nghiệm và tận hưởng bộ nhớ chia sẻ mới được nâng cấp sức mạnh của bạn!

Share: