Dịch vụ tập tin mạng. Giao thức NFS

Không phải ai cũng quen thuộc với các giao thức truyền dữ liệu. Nhưng nhiều người muốn kết nối máy tính của họ vào một mạng hoặc sử dụng máy chủ để lưu trữ tệp. Một cách để làm điều này là NFS. Cách thiết lập máy chủ NFS trong Ubuntu - đọc tiếp.

Bằng cách định cấu hình NFS chính xác, bạn có thể kết hợp các máy tính trên các hệ điều hành khác nhau vào một mạng.

Hệ thống tệp mạng là một giao thức truy cập tệp mạng. Như thường lệ, nó bao gồm hai phần. Một là máy khách, được đặt trên máy tính mà dữ liệu từ xa được xem. Cái còn lại - máy chủ - được đặt trên máy tính nơi dữ liệu này được lưu trữ. Việc sử dụng thêm dung lượng ổ đĩa khá thuận tiện, đặc biệt là trên mạng cục bộ. Và nếu chúng ta đang nói về một số PC công ty, thì điều này đơn giản là cần thiết.

Sự khác biệt là gì?

Ngày nay có một số lượng lớn các giao thức và nhiều loại phần mềm thực hiện các chức năng giống nhau. Điều gì khiến NFS nổi bật?

  • Khả năng kết nối các máy tính trên các hệ điều hành khác nhau vào một mạng. Việc kết nối HĐH Windows qua NFS với hệ thống Unix, chẳng hạn như Ubuntu, thường rất thuận tiện. Samba tồn tại và được sử dụng cho những mục đích tương tự, nhưng NFS nhẹ hơn, đơn giản hơn và nhanh hơn chương trình này vì nó được triển khai ở cấp kernel. Vì vậy, việc thiết lập quyền truy cập thông qua nó thường sẽ dễ dàng hơn.
  • NFS cung cấp quyền truy cập minh bạch vào các tập tin. Điều này có nghĩa là tất cả các tệp từ xa đều được phát giống hệt như tệp cục bộ. Các chương trình không cần phải nâng cấp để phát bất kỳ tệp nào trên máy chủ.
  • NFS chỉ gửi phần được yêu cầu của tệp chứ không phải toàn bộ tệp.

Để hoạt động đầy đủ, Hệ thống Tệp Mạng phải được cài đặt trên ít nhất hai máy tính: một máy chủ và một máy khách. Đương nhiên, người mới bắt đầu sẽ phải làm việc chăm chỉ nhất ở phần máy chủ, vì đây là nơi cần thiết để “chia sẻ” (truy cập mở) các thư mục. Tuy nhiên, tất cả điều này được thực hiện khá dễ dàng.

Giống như hầu hết các giao thức truyền dữ liệu, NFS không còn non trẻ chút nào. Nó được phát triển vào năm 1984 và dành cho các hệ thống UNIX. Đây vẫn là vai trò chính của NFS, nhưng nhiều người nhận thấy rằng việc kết nối máy tính Windows với máy tính Linux rất thuận tiện. Ngoài ra, NFS còn rất lý tưởng để phát nội dung đa phương tiện qua mạng gia đình cục bộ. Samba trong vai trò này thường bị đơ và chậm lại.

Cài đặt phụ trợ NFS

Chúng tôi sẽ cài đặt phần máy chủ của giao thức trên Ubuntu 16.04. Đương nhiên, nếu bạn có phiên bản Máy chủ, quy trình này không có gì khác biệt. Chỉ là trong phiên bản Ubuntu truyền thống, một số hành động có thể được thực hiện bằng giao diện đồ họa.

Cài đặt chương trình. Để thực hiện việc này, bạn có thể sử dụng trung tâm tải xuống ứng dụng hoặc chỉ cần nhập lệnh:

sudo apt cài đặt nfs-kernel-server

Sau này, sẽ rất hữu ích nếu kiểm tra tính đúng đắn của quá trình cài đặt. Không cần thiết phải làm điều này nhưng chúng tôi vẫn sẽ kiểm tra. Nhập lệnh:

Cổng phải là 2049 ở mọi nơi.

Bây giờ chúng ta kiểm tra xem kernel có hỗ trợ NFS hay không. Để thực hiện việc này, hãy nhập:

cat /proc/filesystems | grep nfs

Giá trị kết quả sẽ giống như thế này: nodev nfsd

Điều này có nghĩa là mọi thứ đều hoạt động chính xác. Nếu không thì nhập lệnh:

Sử dụng nó, chúng tôi tự cài đặt mô-đun hạt nhân.

Thêm giao thức vào autorun. Việc này không nhất thiết phải làm nhưng mỗi lần bật lại sẽ rất bất tiện. Một lần nữa, bạn có thể thêm nó bằng một mục menu đặc biệt trong cài đặt hoặc bạn có thể tự thêm nó bằng lệnh:

sudo systemctl kích hoạt nfs

Vì vậy, chúng tôi đã cài đặt phần máy chủ, tất cả những gì còn lại là cấu hình chính xác và chuyển sang phần máy khách.

Cài đặt

Thiết lập NFS trong Ubuntu liên quan đến việc chia sẻ một số thư mục nhất định.

Ngoài việc chỉ cho phép truy cập, bạn cũng phải chỉ định các tham số xác định khả năng của người dùng liên quan đến thư mục này.

  • rw - đọc và ghi Tùy chọn này cho phép đọc và ghi các tập tin trong thư mục.
  • ro - chỉ đọc - chỉ cho phép đọc thư mục.
  • đồng bộ hóa (mặc định) - tham số đảm bảo độ tin cậy truyền. Nếu tính năng này được bật, bạn sẽ không thể chuyển nhiều file cùng lúc hoặc sang các máy tính khác nhau. Cài đặt này sẽ ngăn bạn phản hồi các yêu cầu khác. Ngăn ngừa mất dữ liệu nhưng tốc độ truyền có thể chậm hơn.
  • async là nghịch đảo của tham số trước đó. Việc truyền tải nhanh hơn nhưng có nguy cơ mất thông tin.
  • bảo mật - tùy chọn này cho phép bạn chỉ sử dụng các cổng dưới 1024. Được bật theo mặc định.
  • không an toàn - cho phép sử dụng bất kỳ cổng nào.
  • nohide - nếu bạn gắn kết một số thư mục, bao gồm cả các thư mục lồng nhau, thì các thư mục lồng nhau, không giống như thư mục mẹ, sẽ được hiển thị dưới dạng trống. Tham số sẽ giúp khắc phục điều này
  • anonuid - chỉ định uid cho người dùng ẩn danh. Đây là một ID người dùng đặc biệt.
  • anongid - chỉ định gid cho người dùng ẩn danh. GID (ID nhóm) - một mã định danh người dùng khác.
  • no_subtree_check - chức năng vô hiệu hóa kiểm soát cây con. Thực tế là nếu không có nó, NFS sẽ kiểm tra thêm xem người dùng chỉ truy cập vào những phần cần thiết của thư mục hay không. Điều này làm mọi thứ chậm lại. Tham số này tăng tốc độ nhưng làm giảm tính bảo mật.

Chúng tôi sẽ sử dụng chúng tùy thuộc vào những gì cần thiết trong một tình huống cụ thể.

Hãy tạo một thư mục mới. Bạn cũng có thể sử dụng một cái mới. Thư mục của chúng tôi sẽ là /var/network.

Bây giờ bạn cần thêm thư mục này vào tệp /etc/exports. Tất cả các tập tin và thư mục có quyền truy cập mạng mở đều được lưu trữ ở đó. Mục nhập sẽ trông như thế này:

/var/network168.1.1(rw,async,no_subtree_check)

192.168.1.1 là IP mà chúng tôi truyền tải. Nó là bắt buộc để chỉ ra nó.

Cập nhật bảng xuất:

Bây giờ hãy thử truy cập thư mục từ phía máy khách.

Cài đặt và cấu hình phần máy khách NFS

Ubuntu

Trên Ubuntu, việc kết nối một máy chủ đã được cấu hình không khó. Điều này được thực hiện chỉ trong một vài lệnh.

Cài đặt gói client đặc biệt:

sudo apt cài đặt nfs-common

sudo mount 192.168.1.1:/var/network/ /mnt/

Thư mục mạng được kết nối. Sử dụng df bạn có thể kiểm tra tất cả các thư mục mạng được kết nối:

Bạn cũng có thể kiểm tra cấp độ truy cập của mình bằng một lệnh đặc biệt:

Vô hiệu hóa hệ thống tập tin như sau:

Lệnh mount được sử dụng ở hầu hết mọi nơi. Nó chịu trách nhiệm về quá trình gắn kết, nghĩa là chuẩn bị dung lượng trên ổ cứng để hệ điều hành sử dụng. Nghe có vẻ phức tạp nhưng nếu đơn giản hóa thì chúng ta chỉ đơn giản chuyển các file mạng về máy tính vào một thư mục mới tạo. Ở đây nó được gọi là /mnt/.

các cửa sổ

Với Windows, như một quy luật, mọi thứ phức tạp hơn nhiều. Máy khách NFS có thể chạy trên tất cả các máy chủ Windows mà không gặp bất kỳ sự cố nào. Trong số những cái tiêu chuẩn, nó có mặt trên:

  • Windows 7 Ultimate/Doanh nghiệp
  • Windows 8/8.1 Doanh nghiệp
  • Windows 10 doanh nghiệp

Không thể tìm thấy nó ở bất cứ nơi nào khác. Nếu bạn có một trong những phiên bản này, hãy làm như sau:

  1. Mở menu “Chương trình và tính năng”.
  2. Nhấp vào “Thêm thành phần”.
  3. Chúng tôi tìm thấy NFS ở đó và chỉ cài đặt “Client for NFS”; chúng tôi không cần thành phần khác.

Sau khi kết nối, mọi thứ được gắn kết bằng cùng một lệnh:

gắn kết 192.168.1.1:/var/network/ /mnt/

Bạn có thể ngắt kết nối nó như sau:

Các lệnh được nhập vào dòng lệnh được khởi chạy với tư cách quản trị viên. Sau này, bạn có thể dễ dàng tìm thấy ổ đĩa mạng mong muốn bằng Explorer.

Phải làm gì nếu không có máy khách NFS trên máy tính? Bạn có thể thử tải xuống phần mềm thông qua trang web của Microsoft hoặc từ tài nguyên của bên thứ ba. Có thể các lệnh hoặc hành động khác sẽ cần thiết ở đây.

Bây giờ bạn đã hiểu cơ bản về cách sử dụng NFC và tiến hành thiết lập cơ bản. Kiến thức này đủ để thiết lập quyền truy cập từ máy tính này sang máy tính khác. Hơn nữa, PC Windows cũng có thể hoạt động như một máy khách.

người dùng có thể làm việc vào những thời điểm khác nhau trên các máy tính khác nhau. Sử dụng máy chủ tệp, một số tác vụ được giải quyết cùng một lúc:
  1. sao lưu thường xuyên tất cả dữ liệu: việc thực hiện thao tác này cho vài chục hoặc hàng trăm máy tính là không thực tế, nhưng hoàn toàn có thể - từ một máy chủ hoặc một số máy chủ.
  2. tăng độ tin cậy của việc lưu trữ dữ liệu: việc trang bị cho mọi máy tính trên mạng một mảng RAID là không hợp lý, vì phần lớn các tệp trên máy tính, chẳng hạn như các gói phần mềm đã cài đặt, dễ cài đặt lại hơn là bảo vệ chúng khỏi bị lỗi; nhưng sẽ khá hợp lý nếu trang bị cho máy chủ tệp một mảng RAID phần cứng hoặc tổ chức một mảng RAID phần mềm ở đó, hoặc ít nhất là phản chiếu đĩa đơn giản.
  3. giảm chi phí lưu trữ dữ liệu: việc cài đặt một đĩa lớn vào mỗi máy tính sẽ tốn kém và không hiệu quả trong trường hợp bạn cần lưu trữ nhiều dữ liệu, nhưng hoàn toàn có thể cài đặt một hệ thống con đĩa dung lượng lớn có thể mở rộng trên máy chủ.
  4. cung cấp quyền truy cập vào cùng một dữ liệu từ bất kỳ máy tính nào.

Mô tả của NFS

Dịch vụ NFS cho phép máy chủ cung cấp quyền truy cập chia sẻ vào các thư mục được chỉ định trên máy cục bộ của nó. hệ thống tập tin và máy khách gắn kết các thư mục này như thể chúng là các thư mục cục bộ của máy khách.

Phiên bản NFS

NFS, được phát triển bởi Sun Microsystems, hóa ra lại thành công đến mức việc triển khai nó đã được các công ty khác nhau triển khai trên hầu hết các hệ điều hành. Có một số cách triển khai NFS khác nhau về cơ bản. Phiên bản NFS 2.0 khá phổ biến, mặc dù NFS 3.0 đã được giới thiệu trong Solaris 2.5. Các phiên bản tiếp theo của Solaris, bao gồm Solaris 9, đã có những bổ sung đáng kể cho NFS, nhưng bản thân giao thức này vẫn tương thích với việc triển khai NFS 3.0 trên các hệ thống khác. Bắt đầu với NFS 3.0, việc truyền gói qua TCP và UDP được hỗ trợ; trước đây chỉ hỗ trợ UDP.

hãy cẩn thận! Mạng nên sử dụng máy khách và máy chủ NFS có cùng phiên bản. NFS 2.0 có thể được tìm thấy trong các hệ thống cũ hơn, chẳng hạn như trong HP-UX 10.0. Không nên để các hệ thống chạy các phiên bản NFS khác nhau hoạt động cùng nhau.

Khả năng tương thích của NFS và các dịch vụ thư mục chia sẻ khác

NFS có ý nghĩa và cách tổ chức công việc tương tự như thư mục chia sẻ(thư mục dùng chung) trên hệ thống Windows, nhưng các dịch vụ này sử dụng các giao thức điều hành hoàn toàn khác nhau và không tương thích với nhau. Tuy nhiên, có một số sản phẩm phần mềm cài đặt hỗ trợ NFS trên hệ thống Windows, vì vậy việc sử dụng NFS trên mạng với các hệ điều hành khác nhau không phải là vấn đề, chỉ cần nhớ sử dụng cùng một phiên bản NFS.

NFS hoạt động theo mô hình máy khách-máy chủ, trong đó máy khách và máy chủ chạy các chương trình khác nhau để cung cấp quyền truy cập vào các thư mục dùng chung trên máy chủ.

Vì máy tính tại nơi làm việc của nhân viên ở Nga thường được quản lý bởi hệ thống Windows nên hệ thống Windows cũng thường được sử dụng làm máy chủ tệp. Tuy nhiên, thường có mong muốn cài đặt UNIX trên máy chủ tệp để tăng độ tin cậy, giảm chi phí phần cứng hoặc sử dụng cùng một máy chủ cho một số nhu cầu khác của công ty: làm máy chủ web, máy chủ cơ sở dữ liệu, v.v. Để không cài đặt phần mềm bổ sung hỗ trợ NFS, trong trường hợp này chỉ cần cài đặt gói samba trên máy UNIX là đủ. Nó sẽ cho phép nó “giả vờ” là một máy chủ Windows để tất cả các máy khách coi nó như một máy chủ tệp thông thường hoặc máy chủ in trên mạng Windows. Gói samba cung cấp hỗ trợ cho giao thức SMB gốc cho mạng Windows.

Trong trường hợp một số máy tính UNIX hoạt động trên mạng và chúng cần truy cập vào một máy chủ tệp, việc sử dụng cơ chế NFS (hệ thống tệp mạng) là hợp lý.

NFS không có khả năng phục hồi tốt trước các lỗi mạng, yêu cầu hoạt động mạng không bị gián đoạn và yêu cầu kết nối nhanh giữa máy khách và máy chủ. Việc sử dụng NFS để gắn kết các hệ thống tệp bên ngoài mạng cục bộ, chẳng hạn như qua Internet, là khả thi về mặt kỹ thuật nhưng không thực tế và không an toàn.

Thuật ngữ NFS

Sau khi thiết lập máy chủ NFS, máy tính UNIX sẽ cung cấp quyền truy cập cho người dùng bên ngoài vào một số thư mục của nó. hệ thống tập tin. Việc cung cấp quyền truy cập này được gọi là "xuất": hệ thống được cho là xuất các thư mục của nó. Chính xác cách xuất các thư mục sẽ được xác định bởi danh sách do quản trị viên hệ thống chỉ định. Trên hầu hết các hệ thống UNIX, danh sách này được chứa trong tệp /etc/exports, nhưng trên Solaris nó nằm trong một tệp khác - /etc/dfs/dfstab.

NFS hoạt động thông qua cơ chế gọi thủ tục từ xa ( RPC - Cuộc gọi thủ tục từ xa).

RPC là gì

Hệ tư tưởng của RPC rất đơn giản và hấp dẫn đối với người lập trình. Ứng dụng mạng thường hoạt động như thế nào? Nó tuân theo một giao thức (ví dụ HTTP): nó tạo ra một gói yêu cầu, gọi hàm thiết lập kết nối hệ thống, sau đó là hàm gửi gói, sau đó đợi gói phản hồi và gọi hàm đóng kết nối. Điều này có nghĩa là mọi công việc với mạng đều là mối quan tâm của lập trình viên viết ứng dụng: anh ta phải nhớ gọi các chức năng của API mạng của hệ thống và suy nghĩ về các hành động trong trường hợp mạng bị lỗi.

RPC liên quan đến một cách trao đổi dữ liệu khác giữa máy khách và máy chủ. Theo quan điểm của một lập trình viên, một ứng dụng khách chạy bằng RPC gọi một hàm trên máy chủ, nó thực thi và trả về một kết quả. Việc chuyển tiếp yêu cầu chức năng qua mạng và trả về kết quả từ máy chủ đến máy khách diễn ra liền mạch với ứng dụng, do đó ứng dụng không phải lo lắng về lỗi mạng hoặc chi tiết triển khai giao thức truyền tải.

Để đảm bảo tính minh bạch của việc truyền dữ liệu qua mạng, quy trình gồm hai bước đã được phát minh. Trên máy chủ, bất kỳ ứng dụng nào cung cấp dịch vụ của nó qua RPC đều phải đăng ký với một chương trình được gọi là trình ánh xạ cổng. Chức năng của chương trình này là thiết lập sự tương ứng giữa số thủ tục RPC mà máy khách yêu cầu và số cổng TCP hoặc UDP mà ứng dụng máy chủ lắng nghe các yêu cầu. Nói chung, RPC có thể hoạt động với nhiều thứ hơn là chỉ TCP hoặc UDP. Solaris thực hiện công việc dựa trên cơ chế TI (TransportIndependence) nên trong Solaris bộ dịch cổng được gọi là rpcbind, nhưng không sơ đồ cổng, như trong Linux hoặc FreeBSD.

Một ứng dụng đăng ký với trình dịch cổng sẽ cho nó biết số chương trình, số phiên bản và số thủ tục mà chương trình có thể xử lý. Các thủ tục này sau đó sẽ được khách hàng gọi theo số. Ngoài ra, ứng dụng còn báo cáo số cổng TCP và UDP sẽ được sử dụng để nhận yêu cầu thực hiện thủ tục.

Một máy khách muốn thực thi một thủ tục trên máy chủ trước tiên sẽ gửi yêu cầu đến bộ dịch cổng trên máy chủ để tìm ra cổng TCP hoặc UDP nào sẽ gửi yêu cầu tới. Trình dịch cổng bắt đầu khi khởi động hệ thống và luôn hoạt động trên cổng tiêu chuẩn 111. Sau khi nhận được phản hồi từ nó, máy khách sẽ gửi yêu cầu đến cổng tương ứng với ứng dụng được yêu cầu. Ví dụ: máy chủ NFS chạy trên cổng 2049.

Quy trình gắn thư mục dùng chung qua NFS

Trước khi chúng ta chuyển sang mô tả các cài đặt cho máy chủ và máy khách NFS, bạn nên hiểu cách gắn các hệ thống tệp từ xa về nguyên tắc.

Máy khách NFS gửi yêu cầu gắn kết tới máy tính từ xa, máy tính này cung cấp hệ thống tập tin(thường là một phần của nó) để sử dụng chung. Trong trường hợp này, họ nói rằng máy chủ NFS “xuất” thư mục này hoặc thư mục kia (nghĩa là có các thư mục con). Yêu cầu từ khách hàng

NFS
Cấp độ (theo mô hình OSI):Đã áp dụng
Gia đình:Ngăn xếp giao thức TCP/IP
Cổng/ID:67, 68/UDP
Mục đích của giao thức:Lấy cấu hình mạng
Sự chỉ rõ:RFC 2131
Triển khai chính (máy chủ):dhcpd, Máy chủ DHCP ISC, Infoblox
Có hiệu lực từ: 1990

NFS trừu tượng hóa khỏi cả hai loại hệ thống tệp máy chủ và máy khách, đồng thời có nhiều cách triển khai máy chủ và máy khách NFS cho các hệ điều hành và kiến ​​trúc phần cứng khác nhau. Phiên bản hoàn thiện nhất của NFS là v.4, hỗ trợ nhiều phương tiện xác thực khác nhau (đặc biệt là Kerberos và LIPKEY sử dụng giao thức RPCSEC GSS) và danh sách kiểm soát truy cập (cả loại POSIX và Windows).

Tổ chức NFS chung

NFS cung cấp cho khách hàng quyền truy cập minh bạch vào các tệp và hệ thống tệp của máy chủ. Không giống như FTP, giao thức NFS chỉ truy cập những phần của tệp được quy trình truy cập và ưu điểm chính của nó là làm cho quyền truy cập này trở nên minh bạch. Điều này có nghĩa là bất kỳ ứng dụng khách nào có thể hoạt động với tệp cục bộ đều có thể dễ dàng hoạt động với tệp NFS mà không cần bất kỳ sửa đổi nào đối với chính chương trình.

Máy khách NFS truy cập các tệp trên máy chủ NFS bằng cách gửi yêu cầu RPC đến máy chủ. Điều này có thể được triển khai bằng cách sử dụng các quy trình người dùng thông thường - cụ thể là máy khách NFS có thể là một quy trình người dùng thực hiện các cuộc gọi RPC cụ thể đến máy chủ, cũng có thể là một quy trình người dùng.

Một phần quan trọng của phiên bản mới nhất của tiêu chuẩn NFS (v4.1) là đặc tả pNFS, nhằm cung cấp khả năng triển khai song song việc chia sẻ tệp, tăng tốc độ truyền dữ liệu tương ứng với kích thước và mức độ song song của hệ thống.

Câu chuyện

Giao thức NFS có 4 phiên bản trong lịch sử của nó.

Phiên bản đầu tiên chỉ được sử dụng nội bộ tại Sun nhằm mục đích thử nghiệm. Phiên bản 2 được phát hành vào tháng 3 năm 1989, ban đầu chạy hoàn toàn trên UDP. Các nhà phát triển đã quyết định không lưu trữ dữ liệu trạng thái nội bộ bên trong giao thức, chẳng hạn như khóa được triển khai bên ngoài giao thức cơ sở. Những người tham gia tạo ra NFS phiên bản 2 là Rusty Sandberg, Bob Lyon, Bill Joy và Steve Kleiman.

NFSv3 được phát hành vào tháng 6 năm 1995, nó bổ sung hỗ trợ cho các bộ mô tả tệp có kích thước thay đổi lên tới 64 byte (trong phiên bản 2 - một mảng có kích thước cố định là 32 byte), loại bỏ giới hạn 8192 byte trong lệnh gọi đọc và ghi RPC (do đó, kích thước của khối được truyền trong các cuộc gọi chỉ bị giới hạn bởi giới hạn cho một gói dữ liệu UDP - 65535 byte), hỗ trợ cho các tệp lớn đã được triển khai, các cuộc gọi không đồng bộ để ghi hoạt động được hỗ trợ, các cuộc gọi đến thủ tục ĐỌC và VIẾT đã được thêm vào các cuộc gọi ACCESS (kiểm tra quyền truy cập tệp), MKNOD (tạo một tệp Unix đặc biệt), READDIRPLUS (trả về tên của các tệp trong một thư mục cùng với các thuộc tính của chúng), FSINFO (trả về thông tin thống kê về hệ thống tệp), FSSTAT (trả về thông tin động về hệ thống tệp), PATHCONF (trả về thông tin POSIX.1 về tệp) và CAM KẾT (truyền các bản ghi không đồng bộ được tạo trước đó để lưu trữ vĩnh viễn). Vào thời điểm phiên bản 3 được giới thiệu, mức độ phổ biến của các nhà phát triển giao thức TCP đã ngày càng tăng. Một số nhà phát triển độc lập đã độc lập bổ sung hỗ trợ TCP cho NFS phiên bản 2 làm giao thức truyền tải, Sun Microsystems đã thêm hỗ trợ TCP cho NFS ở một trong những bổ sung cho phiên bản 3. Hỗ trợ TCP đã tăng tính khả thi thực tế của việc sử dụng NFS trong mạng diện rộng.

NFSv4 được phát hành vào tháng 12 năm 2000, chịu ảnh hưởng của AFS và CIFS, đồng thời bao gồm các cải tiến về hiệu suất và bảo mật. Phiên bản 4 là phiên bản đầu tiên được phát triển cùng với Lực lượng đặc nhiệm kỹ thuật Internet (IETF). NFS v4.1 đã được IESG phê duyệt vào tháng 1 năm 2010 (thông số kỹ thuật mới, dài 612 trang, được biết đến là tài liệu dài nhất được IETF phê duyệt). Một cải tiến quan trọng trong phiên bản 4.1 là đặc điểm kỹ thuật của pNFS - Parallel NFS, một cơ chế cho phép máy khách NFS truy cập song song vào dữ liệu từ nhiều máy chủ NFS phân tán. Sự hiện diện của cơ chế như vậy trong tiêu chuẩn hệ thống tệp mạng sẽ giúp xây dựng hệ thống thông tin và lưu trữ đám mây phân tán.

Mục tiêu phát triển

Các yêu cầu ban đầu để phát triển NFS là:

  • hỗ trợ tiềm năng cho các hệ điều hành khác nhau (không chỉ UNIX), để các máy chủ và máy khách NFS có thể được triển khai trên các hệ điều hành khác nhau;
  • giao thức không nên phụ thuộc vào bất kỳ phần cứng cụ thể nào;
  • cơ chế phục hồi đơn giản nên được thực hiện trong trường hợp máy chủ hoặc máy khách bị lỗi;
  • các ứng dụng phải có quyền truy cập minh bạch vào các tệp từ xa mà không cần sử dụng tên đường dẫn hoặc thư viện đặc biệt cũng như không cần biên dịch lại;
  • Ngữ nghĩa UNIX phải được hỗ trợ cho các máy khách UNIX;
  • Hiệu suất của NFS phải tương đương với hiệu suất của các đĩa cục bộ;
  • việc thực hiện không nên phụ thuộc vào phương tiện.

NFS hoạt động như thế nào

NFS được xây dựng từ ít nhất hai phần chính: máy chủ và một hoặc nhiều máy khách. Máy khách truy cập dữ liệu trên máy chủ ở chế độ truy cập từ xa. Để tính năng này hoạt động bình thường, một số quy trình cần được cấu hình và khởi chạy. Việc triển khai NFS bao gồm một số thành phần. Một số trong số chúng được bản địa hóa trên máy chủ hoặc máy khách và một số được sử dụng ở cả hai phía của kết nối. Một số thành phần không bắt buộc phải cung cấp chức năng cốt lõi nhưng tạo thành một phần của giao diện NFS mở rộng.

Giao thức NFS xác định một tập hợp các yêu cầu (thao tác) có thể được máy khách gửi đến máy chủ, cũng như một tập hợp các đối số và giá trị trả về cho mỗi yêu cầu này. Phiên bản 1 của giao thức này chỉ tồn tại trong Sun Microsystems và chưa bao giờ được phát hành. Tất cả các triển khai NFS (bao gồm NFSv3) đều hỗ trợ NFS phiên bản 2 (NFSv2), được phát hành lần đầu tiên vào năm 1985 với SunOS 2.0. Phiên bản 3 của giao thức được xuất bản năm 1993 và đã được một số nhà cung cấp triển khai.

Giao thức Cuộc gọi thủ tục từ xa (RPC) xác định định dạng của tất cả các tương tác giữa máy khách và máy chủ. Mỗi yêu cầu NFS được gửi dưới dạng gói RPC. Các daemon sau đang chạy trên máy chủ:

  • rpc.nfsd - Daemon máy chủ NFS chính là nfsd (đôi khi được gọi là nfsd4 trong các phiên bản mới). Daemon này phục vụ các yêu cầu từ máy khách NFS. Tham số RPCNFSDCOUNT trong tệp /etc/default/nfs-kernel-server trên Debian và NFSDCOUNT trong tệp /etc/sysconfig/nfs trên RedHat xác định số lượng daemon để bắt đầu (mặc định là 8). (Chương trình RPC 100003)
  • rpc.mountd - Trình nền gắn kết NFS mountd xử lý các yêu cầu của máy khách để gắn kết các thư mục. Trình nền mountd chạy trên máy chủ NFS. (Chương trình RPC 100005)
  • rpc.statd - Trình nền giám sát trạng thái mạng (còn gọi là Trình giám sát trạng thái mạng, hay còn gọi là NSM). Nó cho phép bạn hủy khóa một cách chính xác sau khi gặp sự cố/khởi động lại. Để thông báo về lỗi, nó sử dụng chương trình /usr/sbin/sm-notify. Daemon statd chạy trên cả máy chủ và máy khách. Trước đây, máy chủ này cần thiết để rpc.lockd hoạt động, nhưng kernel hiện chịu trách nhiệm khóa. (Chương trình RPC 100021 và 100024 - trong phiên bản mới)
  • rpc.lockd - Trình nền lockd (còn gọi là trình quản lý khóa NFS (NLM)) xử lý các yêu cầu khóa tệp. Daemon khóa chạy trên cả máy chủ và máy khách. Khách hàng yêu cầu khóa tệp và máy chủ cho phép điều đó. (lỗi thời và không được sử dụng làm daemon trong các bản phân phối mới. Chức năng của nó trong các bản phân phối hiện đại (với nhân cũ hơn 2.2.18) được thực hiện bởi các nhân (lockd). (Chương trình RPC 100024)
  • rpc.idmapd - Trình nền idmapd cho NFSv4 trên máy chủ chuyển đổi uid/gid cục bộ của người dùng thành định dạng name@domain và dịch vụ trên máy khách chuyển đổi tên người dùng/nhóm của định dạng name@domain thành mã định danh nhóm và người dùng cục bộ (theo file cấu hình /etc/idmapd .conf).

Máy khách cũng có thể chạy một daemon có tên là nfsiod. nfsiod phục vụ các yêu cầu phía máy chủ từ máy chủ NFS. Nó là tùy chọn, tăng hiệu suất nhưng không bắt buộc để hoạt động bình thường và chính xác. Trong NFSv4, khi sử dụng Kerberos, các daemon bổ sung sẽ được khởi động:

  • rpc.gssd - Trình nền NFSv4 cung cấp các phương thức xác thực thông qua GSS-API (xác thực Kerberos). Hoạt động trên máy khách và máy chủ.
  • rpc.svcgssd - Trình nền máy chủ NFSv4 cung cấp xác thực ứng dụng khách phía máy chủ.

Daemon phiên bản cũ (NFS v.3 trở xuống):

  • nfslogd - Hoạt động ghi nhật ký daemon nhật ký NFS cho các hệ thống tệp đã xuất, chạy trên máy chủ NFS
  • rpc.rquotad - máy chủ hạn ngạch từ xa cung cấp thông tin về hạn ngạch người dùng trên hệ thống tệp từ xa, có thể chạy trên cả máy chủ và máy khách.

Ngoài các gói trên, để NFSv2 và v3 hoạt động chính xác, cần có gói portmap bổ sung (được thay thế trong các bản phân phối mới hơn bằng rpcbind được đổi tên). Sun RPC là máy chủ chuyển đổi số chương trình RPC (Cuộc gọi thủ tục từ xa) thành số cổng TCP/UDP.

portmap hoạt động trên một số thực thể:

  • Cuộc gọi hoặc yêu cầu RPC
  • Cổng TCP/UDP, phiên bản giao thức (tcp hoặc udp)
  • số chương trình và phiên bản chương trình

Daemon portmap được khởi chạy bởi tập lệnh /etc/init.d/portmap trước khi dịch vụ NFS khởi động.

Công việc của máy chủ RPC (Cuộc gọi thủ tục từ xa) là xử lý các cuộc gọi RPC (còn gọi là thủ tục RPC) từ các quy trình cục bộ và từ xa. Bằng cách sử dụng các lệnh gọi RPC, các dịch vụ sẽ tự đăng ký hoặc tự xóa chúng đến/từ trình ánh xạ cổng (portmap, portmapper, còn được gọi là rpcbind trong các phiên bản mới) và các máy khách, sử dụng lệnh gọi RPC, gửi yêu cầu đến trình ánh xạ cổng để có được thông tin cần thiết.

Hoạt động của máy chủ RPC có thể được biểu diễn bằng các bước sau:

  1. Bộ chuyển đổi cổng sẽ khởi động trước, thường là khi hệ thống khởi động. Điều này tạo ra một điểm cuối TCP và mở cổng TCP 111. Nó cũng tạo ra một điểm cuối UDP chờ gói dữ liệu UDP đến trên cổng UDP 111.
  2. Khi khởi động, một chương trình chạy qua máy chủ RPC sẽ tạo điểm cuối TCP và điểm cuối UDP cho mỗi phiên bản chương trình được hỗ trợ. (Máy chủ RPC có thể hỗ trợ nhiều phiên bản. Máy khách chỉ định phiên bản được yêu cầu khi thực hiện cuộc gọi RPC.) Số cổng được gán động được gán cho mỗi phiên bản của dịch vụ. Máy chủ ghi lại từng chương trình, phiên bản, giao thức và số cổng bằng cách thực hiện lệnh gọi RPC thích hợp.
  3. Khi chương trình máy khách RPC cần lấy thông tin cần thiết, nó sẽ gọi quy trình phân giải cổng để lấy số cổng được gán động cho chương trình, phiên bản và giao thức đã chỉ định.
  4. Để đáp ứng yêu cầu này, phía bắc trả về số cổng.
  5. Máy khách gửi thông báo yêu cầu RPC tới số cổng thu được ở bước 4. Nếu sử dụng UDP, máy khách chỉ cần gửi một gói dữ liệu UDP chứa thông báo thách thức RPC tới số cổng UDP mà dịch vụ được yêu cầu đang chạy trên đó. Để phản hồi, dịch vụ sẽ gửi một gói dữ liệu UDP chứa thông báo phản hồi RPC. Nếu TCP được sử dụng, máy khách sẽ chủ động mở số cổng TCP của dịch vụ mong muốn và sau đó gửi thông báo thách thức RPC qua kết nối đã thiết lập. Máy chủ phản hồi bằng thông báo phản hồi RPC trên kết nối.

Để lấy thông tin từ máy chủ RPC, tiện ích rpcinfo được sử dụng; nó hiển thị số chương trình, phiên bản, giao thức, cổng và tên đã đăng ký. Bạn cũng có thể sử dụng rpcinfo để xóa đăng ký của chương trình hoặc lấy thông tin về một dịch vụ RPC riêng lẻ. Khi bạn chỉ định tham số máy chủ -p, chương trình sẽ hiển thị danh sách tất cả các chương trình RPC đã đăng ký trên máy chủ lưu trữ. Không chỉ định máy chủ, chương trình sẽ hiển thị các dịch vụ trên localhost.

Máy chủ NFS (chính xác hơn là daemon rpc.nfsd) nhận yêu cầu từ máy khách dưới dạng gói dữ liệu UDP trên cổng 2049. Mặc dù NFS hoạt động với trình phân giải cổng, cho phép máy chủ sử dụng các cổng được gán động, cổng UDP 2049 là được mã hóa cứng thành NFS trong hầu hết các triển khai.

Mô tả quá trình truy cập tệp nằm trên máy chủ NFS:

  • Máy khách (quy trình người dùng) không quan tâm liệu nó đang truy cập tệp cục bộ hay tệp NFS. Hạt nhân tương tác với phần cứng thông qua các mô-đun hạt nhân hoặc các lệnh gọi hệ thống tích hợp.
  • Mô-đun hạt nhân kernel/fs/nfs/nfs.ko, thực hiện các chức năng của máy khách NFS, gửi các yêu cầu RPC đến máy chủ NFS thông qua mô-đun TCP/IP. NFS thường sử dụng UDP, tuy nhiên các triển khai mới hơn có thể sử dụng TCP.
  • Máy chủ NFS nhận yêu cầu từ máy khách dưới dạng gói dữ liệu UDP trên cổng 2049. Mặc dù NFS có thể hoạt động với trình phân giải cổng, cho phép máy chủ sử dụng các cổng được gán động, cổng UDP 2049 được mã hóa cứng thành NFS trong hầu hết các triển khai.
  • Khi máy chủ NFS nhận được yêu cầu từ máy khách, nó sẽ được chuyển đến quy trình truy cập tệp cục bộ, quy trình này cung cấp quyền truy cập vào đĩa cục bộ trên máy chủ.
  • Kết quả truy cập đĩa được trả về cho máy khách.

Thiết lập máy chủ NFS

Thiết lập toàn bộ máy chủ bao gồm việc thiết lập các thư mục cục bộ được phép gắn kết bởi các hệ thống từ xa trong tệp /etc/exports. Hành động này được gọi là xuất phân cấp thư mục. Nguồn thông tin chính về danh mục được xuất là các tệp sau:

Cấu trúc thư mục gốc

  1. /etc/exports là tệp cấu hình chính lưu trữ cấu hình của các thư mục được xuất. Được sử dụng khi khởi động NFS và bởi tiện ích importfs.
  2. /var/lib/nfs/xtab - Chứa danh sách các thư mục được gắn bởi máy khách từ xa. Được sử dụng bởi daemon rpc.mountd khi máy khách cố gắng gắn kết một hệ thống phân cấp (một mục gắn kết được tạo).
  3. /var/lib/nfs/etab - danh sách các thư mục có thể được gắn kết bởi các hệ thống từ xa, cho biết tất cả các tham số của các thư mục đã xuất.
  4. /var/lib/nfs/rmtab - danh sách các thư mục hiện chưa được xuất.
  5. /proc/fs/nfsd - một hệ thống tệp đặc biệt (kernel 2.6) để quản lý máy chủ NFS.
  6. /proc/net/rpc - chứa số liệu thống kê thô, có thể lấy được bằng nfsstat, cũng như các bộ đệm khác nhau.
  7. /var/run/portmap_mapping - thông tin về các dịch vụ được đăng ký trong RPC.

Tệp xuất sử dụng các tùy chọn chung sau:

  • auth_nlm (no_auth_nlm) hoặc safe_locks (insecure_locks) - chỉ định rằng máy chủ phải yêu cầu xác thực các yêu cầu khóa (sử dụng giao thức NFS Lock Manager).
  • nohide (ẩn) - nếu máy chủ xuất hai hệ thống phân cấp thư mục, với một hệ thống được lồng (gắn kết) bên trong hệ thống kia. Máy khách cần gắn kết rõ ràng hệ thống phân cấp thứ hai (con), nếu không điểm gắn kết của hệ thống phân cấp con sẽ xuất hiện dưới dạng một thư mục trống. Tùy chọn nohide dẫn đến hệ thống phân cấp thư mục thứ hai mà không có sự gắn kết rõ ràng.
  • ro - Chỉ cho phép đọc yêu cầu.
  • rw - Cho phép ghi yêu cầu.
  • an toàn (không an toàn) - Yêu cầu các yêu cầu NFS đến từ các cổng an toàn (< 1024), чтобы программа без прав root не могла монтировать иерархию каталогов.
  • subtree_check (no_subtree_check) - Nếu một thư mục con của hệ thống tệp được xuất chứ không phải toàn bộ hệ thống tệp, thì máy chủ sẽ kiểm tra xem tệp được yêu cầu có nằm trong thư mục con đã xuất hay không. Việc tắt xác minh làm giảm tính bảo mật nhưng lại tăng tốc độ truyền dữ liệu.
  • đồng bộ hóa (async) - chỉ định rằng máy chủ chỉ phản hồi các yêu cầu sau khi những thay đổi được thực hiện bởi các yêu cầu đó đã được ghi vào đĩa. Tùy chọn không đồng bộ yêu cầu máy chủ không đợi thông tin được ghi vào đĩa, điều này cải thiện hiệu suất nhưng làm giảm độ tin cậy vì Trong trường hợp mất kết nối hoặc lỗi thiết bị, thông tin có thể bị mất.
  • wdelay (no_wdelay) - Hướng dẫn máy chủ trì hoãn việc thực hiện yêu cầu ghi nếu yêu cầu ghi tiếp theo đang chờ xử lý, ghi dữ liệu theo khối lớn hơn. Điều này cải thiện hiệu suất khi gửi hàng đợi lệnh ghi lớn. no_wdelay chỉ định không trì hoãn việc thực thi lệnh ghi, điều này có thể hữu ích nếu máy chủ nhận được một số lượng lớn các lệnh không liên quan.

Quản lý máy chủ NFS

Máy chủ NFS được quản lý bằng các tiện ích sau:

  • nfsstat
  • gắn kết showmsecure (không an toàn)
  • xuất khẩu

Tiện ích nfsstat cho phép bạn xem số liệu thống kê của máy chủ RPC và NFS.

trình diễn

Tiện ích showmount truy vấn daemon rpc.mountd trên máy chủ từ xa về hệ thống tệp được gắn. Theo mặc định, một danh sách khách hàng đã được sắp xếp sẽ được trả về. Đội:

  • --all - hiển thị danh sách các máy khách và các điểm gắn kết cho biết nơi máy khách gắn kết thư mục. Thông tin này có thể không đáng tin cậy.
  • --directories - hiển thị danh sách các điểm gắn kết.
  • --exports - hiển thị danh sách các hệ thống tệp được xuất theo quan điểm của nfsd.

Chạy showmount không có đối số sẽ in ra bảng điều khiển thông tin về các hệ thống được phép gắn các thư mục cục bộ.

xuất khẩu

Lệnh này đồng bộ hóa các thư mục đã xuất được chỉ định trong tệp /etc/exports với tệp /var/lib/nfs/xtab và xóa các thư mục không tồn tại khỏi xtab. importfs được thực thi khi daemon nfsd được khởi động với đối số -r. Tiện ích importfs ở chế độ kernel 2.6 giao tiếp với daemon rpc.mountd thông qua các tệp trong thư mục /var/lib/nfs/ và không giao tiếp trực tiếp với kernel. Không có tham số, hiển thị danh sách các hệ thống tệp hiện được xuất. thông số xuất khẩu:

  1. [client:directory-name] - thêm hoặc xóa hệ thống tệp được chỉ định cho máy khách được chỉ định)
  2. -v - hiển thị thêm thông tin
  3. -r - tái xuất tất cả các thư mục (đồng bộ hóa /etc/exports và /var/lib/nfs/xtab)
  4. -u - xóa khỏi danh sách đã xuất
  5. -a - thêm hoặc xóa tất cả các hệ thống tập tin
  6. -o - các tùy chọn được phân tách bằng dấu phẩy (tương tự như các tùy chọn được sử dụng trong /etc/exports; tức là bạn có thể thay đổi các tùy chọn của hệ thống tệp đã được gắn)
  7. -i - không sử dụng /etc/exports khi thêm, chỉ sử dụng các tùy chọn dòng lệnh hiện tại
  8. -f - đặt lại danh sách hệ thống đã xuất trong kernel 2.6.

Gắn hệ thống tệp mạng bằng lệnh mount

Một ví dụ về lệnh mount để gắn hệ thống tệp NFS trên Debian:

TẬP TIN~# mount -t nfs archive:/archiv-small /archivs/archiv-small TẬP TIN~# mount -t nfs -o ro archive:/archiv-big /archivs/archiv-big TẬP TIN ~ # gắn kết ...... archive:/archiv-small trên /archivs/archiv-small loại nfs (rw,addr=10.0.0.6) archive:/archiv-big trên /archivs/archiv-big loại nfs (ro,addr=10.0.0.6)

Lệnh đầu tiên sẽ gắn thư mục đã xuất /archiv-small trên máy chủ archive vào điểm gắn kết cục bộ /archivs/archiv-small với các tùy chọn mặc định (nghĩa là đọc-ghi). Lệnh thứ hai gắn thư mục đã xuất /archiv-big trên máy chủ lưu trữ vào thư mục cục bộ /archivs/archiv-big với tùy chọn chỉ đọc (ro). Lệnh mount không có tham số cho chúng ta thấy rõ kết quả của việc mount. Ngoài tùy chọn chỉ đọc (ro), có thể đặt các tùy chọn cơ bản khác khi gắn NFS:

  • nosuid - Tùy chọn này ngăn các chương trình setuid được thực thi từ thư mục được gắn.
  • nodev (không có thiết bị) - Tùy chọn này cấm sử dụng ký tự và chặn các tệp đặc biệt làm thiết bị.
  • lock (nolock) - Cho phép khóa NFS (mặc định). nolock vô hiệu hóa khóa NFS (không khởi động daemon lockd) và rất hữu ích khi làm việc với các máy chủ cũ không hỗ trợ khóa NFS.
  • mounthost=name - Tên của máy chủ mà trình nền gắn kết NFS - mountd - đang chạy.
  • mountport=n - Cổng được sử dụng bởi trình nền mountd.
  • port=n - cổng được sử dụng để kết nối với máy chủ NFS (mặc định là 2049 nếu daemon rpc.nfsd chưa được đăng ký trên máy chủ RPC). Nếu n=0 (mặc định), thì NFS sẽ truy vấn sơ đồ cổng trên máy chủ để xác định cổng.
  • rsize=n (kích thước khối đọc - kích thước khối đọc) - Số byte được đọc tại một thời điểm từ máy chủ NFS. Tiêu chuẩn - 4096.
  • wsize=n (kích thước khối ghi - kích thước khối ghi) - Số byte được ghi tại một thời điểm vào máy chủ NFS. Tiêu chuẩn - 4096.
  • tcp hoặc udp - Để gắn NFS, hãy sử dụng giao thức TCP hoặc UDP tương ứng.
  • bg - Nếu bạn mất quyền truy cập vào máy chủ, hãy thử lại ở chế độ nền để không chặn quá trình khởi động hệ thống.
  • fg - Nếu bạn mất quyền truy cập vào máy chủ, hãy thử lại ở chế độ ưu tiên. Tùy chọn này có thể chặn quá trình khởi động hệ thống bằng cách lặp lại các lần thử gắn kết. Vì lý do này, tham số fg được sử dụng chủ yếu để gỡ lỗi.
  • Các tùy chọn ảnh hưởng đến bộ nhớ đệm thuộc tính trên các mount NFS
  • Các thuộc tính tệp được lưu trữ trong inod (inodes), chẳng hạn như thời gian sửa đổi, kích thước, liên kết cứng, chủ sở hữu, thường thay đổi không thường xuyên đối với các tệp thông thường và thậm chí ít thay đổi hơn đối với các thư mục. Kernel sử dụng thời gian sửa đổi của tệp để xác định xem bộ đệm có bị lỗi thời hay không bằng cách so sánh thời gian sửa đổi trong bộ đệm và thời gian sửa đổi của chính tệp đó.

Bộ đệm thuộc tính được cập nhật định kỳ theo các tham số đã chỉ định:

  1. ac (noac) (attrebute cache - bộ nhớ đệm thuộc tính) - Cho phép bộ nhớ đệm thuộc tính (theo mặc định). Mặc dù tùy chọn noac làm chậm máy chủ nhưng nó tránh được tình trạng cũ kỹ của thuộc tính khi nhiều máy khách đang tích cực ghi thông tin vào một hệ thống phân cấp chung.
  2. acdirmax=n (tối đa tệp thư mục bộ đệm thuộc tính - bộ nhớ đệm thuộc tính tối đa cho một tệp thư mục) - Số giây tối đa mà NFS đợi trước khi cập nhật thuộc tính thư mục (mặc định là 60 giây)
  3. acdirmin=n (tối thiểu tệp thư mục bộ đệm thuộc tính - bộ nhớ đệm thuộc tính tối thiểu cho tệp thư mục) - Số giây tối thiểu mà NFS đợi trước khi cập nhật thuộc tính thư mục (mặc định là 30 giây)
  4. acregmax=n (bộ nhớ đệm thuộc tính tối đa của tệp thông thường - bộ nhớ đệm thuộc tính tối đa cho một tệp thông thường) - Số giây tối đa mà NFS đợi trước khi cập nhật các thuộc tính của tệp thông thường (mặc định là 60 giây)
  5. acregmin=n (bộ nhớ đệm thuộc tính tối thiểu của tệp thông thường - bộ nhớ đệm thuộc tính tối thiểu cho một tệp thông thường) - Số giây tối thiểu mà NFS đợi trước khi cập nhật các thuộc tính của tệp thông thường (mặc định là 3 giây)
  6. atimeo=n (hết thời gian chờ bộ đệm thuộc tính) - Thay thế các giá trị cho tất cả các tùy chọn trên. Nếu atimeo không được chỉ định thì các giá trị trên sẽ lấy giá trị mặc định.

Tùy chọn xử lý lỗi NFS

Các tùy chọn sau đây kiểm soát những gì NFS thực hiện khi không có phản hồi từ máy chủ hoặc khi xảy ra lỗi I/O:

  • fg (bg) (tiền cảnh - tiền cảnh, hậu cảnh - hậu cảnh) - Cố gắng gắn NFS bị lỗi vào tiền cảnh/nền sau.
  • cứng (mềm) - hiển thị thông báo "máy chủ không phản hồi" trên bảng điều khiển khi hết thời gian chờ và tiếp tục cố gắng gắn kết. Khi tùy chọn mềm được chỉ định, trong thời gian chờ, sẽ báo cáo lỗi I/O cho chương trình đã gọi thao tác đó.
  • nointr (intr) (không bị gián đoạn) - Ngăn chặn các tín hiệu làm gián đoạn hoạt động của tệp trong hệ thống phân cấp thư mục được gắn cứng khi đạt đến thời gian chờ lớn. intr - cho phép gián đoạn.
  • retrans=n (giá trị truyền lại) - Sau n thời gian chờ nhỏ, NFS tạo ra thời gian chờ lớn (mặc định 3). Thời gian chờ lớn sẽ ngừng hoạt động hoặc in thông báo "máy chủ không phản hồi" tới bảng điều khiển, tùy thuộc vào việc tùy chọn cứng/mềm có được chỉ định hay không.
  • retry=n (giá trị thử lại) - Số phút dịch vụ NFS sẽ lặp lại các thao tác gắn kết trước khi từ bỏ (mặc định 10000).
  • timeo=n (giá trị thời gian chờ) - Số phần mười giây mà dịch vụ NFS đợi trước khi truyền lại trong trường hợp RPC hoặc thời gian chờ nhỏ (mặc định là 7). Giá trị này tăng theo mỗi lần hết thời gian chờ lên tới tối đa 60 giây hoặc cho đến khi xảy ra thời gian chờ lớn. Nếu mạng bận, máy chủ chậm hoặc yêu cầu đi qua nhiều bộ định tuyến hoặc cổng, việc tăng giá trị này có thể cải thiện hiệu suất.

Cải thiện hiệu suất NFS

Hiệu suất NFS có thể bị ảnh hưởng bởi một số tham số, đặc biệt khi chạy trên các kết nối chậm. Khi làm việc với các kết nối chậm và tải nặng, nên sử dụng tham số cứng để thời gian chờ không khiến chương trình ngừng hoạt động. Nhưng bạn cần lưu ý rằng nếu bạn gắn hệ thống tệp qua NFS với tham số cứng qua fstab và máy chủ từ xa không thể truy cập được thì hệ thống sẽ bị treo khi khởi động.

Một cách để cải thiện hiệu suất NFS là tăng số byte được truyền tại một thời điểm. Kích thước 4096 byte là quá nhỏ đối với các kết nối nhanh hiện đại, việc tăng giá trị này lên 8192 hoặc hơn có thể được tìm thấy bằng thực nghiệm để tìm ra tốc độ tối ưu.

Ngoài ra, bạn không nên bỏ qua cài đặt thời gian chờ. NFS chờ phản hồi truyền dữ liệu trong khoảng thời gian được chỉ định trong tùy chọn thời gian; nếu không nhận được phản hồi trong thời gian này thì việc truyền lại sẽ được thực hiện. Trên các kết nối bận và chậm, thời gian này có thể ít hơn thời gian phản hồi và dung lượng kênh liên lạc của máy chủ, dẫn đến việc truyền lại không cần thiết làm chậm hiệu suất. Theo mặc định, thời gian là 0,7 giây (700 mili giây). sau khi phát hiện kết nối bị gián đoạn trong vòng 700 ms, máy chủ sẽ truyền lại và tăng gấp đôi thời gian chờ lên 1,4 giây, thời gian tăng sẽ tiếp tục đạt giá trị tối đa là 60 giây.

Khi nói về mạng máy tính, bạn thường có thể nghe nhắc đến NFS. Chữ viết tắt này có nghĩa là gì?

Nó là một giao thức hệ thống tệp phân tán được Sun Microsystems phát triển ban đầu vào năm 1984, cho phép người dùng trên máy khách truy cập các tệp qua mạng, tương tự như truy cập bộ nhớ cục bộ. NFS, giống như nhiều giao thức khác, dựa trên hệ thống Cuộc gọi thủ tục từ xa tính toán mạng mở (ONC RPC).

Nói cách khác, NFS là gì? Nó là một tiêu chuẩn mở, được xác định bởi Yêu cầu Nhận xét (RFC), cho phép mọi người triển khai giao thức.

Phiên bản và biến thể

Nhà phát minh chỉ sử dụng phiên bản đầu tiên cho mục đích thử nghiệm của riêng mình. Khi nhóm phát triển bổ sung những thay đổi quan trọng vào NFS ban đầu và phát hành nó ngoài quyền tác giả của Sun, họ đã chỉ định phiên bản mới là v2 để họ có thể kiểm tra khả năng tương tác giữa các bản phân phối và tạo bản dự phòng.

NFS v2

Phiên bản 2 ban đầu chỉ hoạt động trên Giao thức gói dữ liệu người dùng (UDP). Các nhà phát triển của nó muốn giữ phía máy chủ mà không thực hiện chặn bên ngoài giao thức chính.

Giao diện hệ thống tệp ảo cho phép triển khai mô-đun được phản ánh trong một giao thức đơn giản. Đến tháng 2 năm 1986, các giải pháp đã được chứng minh cho các hệ điều hành như System V phiên bản 2, DOS và VAX/VMS sử dụng Eunice. NFS v2 chỉ cho phép đọc 2 GB đầu tiên của tệp do giới hạn 32 bit.

NFS v3

Đề xuất phát triển NFS phiên bản 3 đầu tiên tại Sun Microsystems đã được công bố ngay sau khi phát hành bản phân phối thứ hai. Động lực chính là cố gắng giảm thiểu vấn đề về hiệu suất của quá trình ghi đồng bộ. Đến tháng 7 năm 1992, những cải tiến thực tế đã giải quyết được nhiều thiếu sót của NFS phiên bản 2, chỉ còn lại hỗ trợ tệp không đủ (kích thước tệp 64-bit và độ lệch tệp).

  • hỗ trợ kích thước tệp 64-bit và độ lệch để xử lý dữ liệu lớn hơn 2 gigabyte (GB);
  • hỗ trợ ghi không đồng bộ trên máy chủ để cải thiện hiệu suất;
  • thuộc tính tệp bổ sung trong nhiều câu trả lời để tránh phải tìm nạp lại chúng;
  • Hoạt động READDIRPLUS để lấy dữ liệu và thuộc tính cùng với tên tệp khi quét một thư mục;
  • nhiều cải tiến khác.

Trong quá trình giới thiệu phiên bản 3, sự hỗ trợ cho TCP như một giao thức lớp vận chuyển bắt đầu tăng lên. Việc sử dụng TCP làm phương tiện truyền dữ liệu, được thực hiện bằng NFS qua mạng WAN, bắt đầu cho phép truyền các kích thước tệp lớn để xem và ghi. Nhờ đó, các nhà phát triển đã có thể vượt qua giới hạn 8 KB do Giao thức gói dữ liệu người dùng (UDP) áp đặt.

NFS v4 là gì?

Phiên bản 4, chịu ảnh hưởng của Hệ thống tệp Endres (AFS) và Khối tin nhắn máy chủ (SMB, còn được gọi là CIFS), bao gồm các cải tiến về hiệu suất, cung cấp khả năng bảo mật tốt hơn và giới thiệu giao thức tuân thủ.

Phiên bản 4 là bản phân phối đầu tiên được phát triển bởi Lực lượng đặc nhiệm kỹ thuật Internet (IETF) sau khi phát triển giao thức thuê ngoài của Sun Microsystems.

NFS phiên bản 4.1 nhằm mục đích cung cấp hỗ trợ giao thức để tận dụng việc triển khai máy chủ theo cụm, bao gồm khả năng cung cấp quyền truy cập song song có thể mở rộng vào các tệp được phân phối trên nhiều máy chủ (phần mở rộng pNFS).

Giao thức hệ thống tệp mới nhất, NFS 4.2 (RFC 7862), được phát hành chính thức vào tháng 11 năm 2016.

Các tiện ích mở rộng khác

Với sự phát triển của tiêu chuẩn, các công cụ tương ứng để làm việc với nó đã xuất hiện. Ví dụ: WebNFS, một tiện ích mở rộng cho phiên bản 2 và 3, cho phép Giao thức truy cập hệ thống tệp mạng dễ dàng tích hợp hơn vào trình duyệt web và cho phép hoạt động trên tường lửa.

Nhiều giao thức của bên thứ ba cũng đã được liên kết với NFS. Nổi tiếng nhất trong số đó là:

  • Trình quản lý khóa mạng (NLM) có hỗ trợ giao thức byte (được thêm để hỗ trợ API khóa tệp UNIX System V);
  • Hạn ngạch từ xa (RQUOTAD), cho phép người dùng NFS xem hạn ngạch lưu trữ trên máy chủ NFS;
  • NFS qua RDMA là phiên bản chuyển thể của NFS sử dụng truy cập bộ nhớ trực tiếp từ xa (RDMA) làm phương tiện truyền dẫn;
  • NFS-Ganesha là máy chủ NFS chạy trong không gian người dùng và hỗ trợ CephFS FSAL (Lớp trừu tượng hệ thống tệp) bằng libcephfs.

Nền tảng

Network File System thường được sử dụng với các hệ điều hành Unix (như Solaris, AIX, HP-UX), MacOS của Apple và các hệ điều hành tương tự Unix (như Linux và FreeBSD).

Nó cũng có sẵn cho các nền tảng như Acorn RISC OS, OpenVMS, MS-DOS, Microsoft Windows, Novell NetWare và IBM AS/400.

Các giao thức truy cập tệp từ xa thay thế bao gồm Khối tin nhắn máy chủ (SMB, còn được gọi là CIFS), Giao thức truyền tải Apple (AFP), Giao thức lõi NetWare (NCP) và Hệ thống tệp máy chủ OS/400 (QFileSvr.400).

Điều này là do các yêu cầu của NFS, vốn chủ yếu nhằm vào các “shell” giống Unix.

Tuy nhiên, giao thức SMB và NetWare (NCP) được sử dụng thường xuyên hơn NFS trên các hệ thống chạy Microsoft Windows. AFP phổ biến nhất trên nền tảng Apple Macintosh và QFileSvr.400 phổ biến nhất trên OS/400.

Triển khai điển hình

Giả sử một kịch bản kiểu Unix điển hình trong đó một máy tính (máy khách) cần truy cập vào dữ liệu được lưu trữ trên máy tính khác (máy chủ NFS):

  • Máy chủ triển khai các quy trình của Hệ thống tệp mạng, chạy theo mặc định dưới dạng nfsd, để cung cấp công khai dữ liệu của nó cho khách hàng. Quản trị viên máy chủ xác định cách xuất tên thư mục và cài đặt, thường sử dụng tệp cấu hình /etc/exports và lệnh importfs.
  • Việc quản lý bảo mật máy chủ đảm bảo rằng nó có thể nhận dạng và phê duyệt một máy khách đã được xác thực. Cấu hình mạng của nó đảm bảo rằng các khách hàng đủ điều kiện có thể đàm phán với nó thông qua bất kỳ hệ thống tường lửa nào.
  • Máy khách yêu cầu quyền truy cập vào dữ liệu đã xuất, thường bằng cách đưa ra lệnh. Nó truy vấn máy chủ (rpcbind) đang sử dụng cổng NFS và sau đó kết nối với nó.
  • Nếu mọi thứ diễn ra không có lỗi, người dùng trên máy khách sẽ có thể xem và tương tác với các hệ thống tệp đã cài đặt trên máy chủ trong giới hạn cho phép.

Cũng cần lưu ý rằng việc tự động hóa quy trình Hệ thống tệp mạng cũng có thể diễn ra - có thể sử dụng etc/fstab và/hoặc các công cụ tương tự khác.

Sự phát triển cho đến nay

Đến thế kỷ 21, các giao thức cạnh tranh DFS và AFS đã không đạt được bất kỳ thành công thương mại lớn nào so với Hệ thống tệp mạng. IBM, trước đây đã mua lại tất cả các quyền thương mại đối với các công nghệ trên, đã tặng hầu hết mã nguồn AFS cho cộng đồng phần mềm miễn phí vào năm 2000. Dự án Open AFS vẫn tồn tại cho đến ngày nay. Đầu năm 2005, IBM công bố ngừng bán AFS và DFS.

Ngược lại, vào tháng 1 năm 2010, Panasas đã đề xuất NFS v 4.1 dựa trên công nghệ cải thiện khả năng truy cập dữ liệu song song. Giao thức Network File System v 4.1 xác định phương pháp tách siêu dữ liệu hệ thống tệp khỏi vị trí của các tệp cụ thể. Vì vậy, nó vượt xa việc phân tách tên/dữ liệu đơn giản.

NFS của phiên bản này trong thực tế là gì? Tính năng trên giúp phân biệt nó với giao thức truyền thống, chứa tên của các tệp và dữ liệu của chúng trong một kết nối đến máy chủ. Với Network File System v 4.1, một số tệp có thể được chia sẻ trên các máy chủ nhiều nút nhưng sự tham gia của khách hàng vào việc chia sẻ siêu dữ liệu và dữ liệu bị hạn chế.

Khi triển khai phân phối giao thức thứ tư, máy chủ NFS là một tập hợp các tài nguyên hoặc thành phần máy chủ; chúng được cho là được kiểm soát bởi máy chủ siêu dữ liệu.

Máy khách vẫn liên hệ với một máy chủ siêu dữ liệu duy nhất để duyệt qua hoặc tương tác với không gian tên. Khi di chuyển các tệp đến và đi từ máy chủ, nó có thể tương tác trực tiếp với tập hợp dữ liệu thuộc sở hữu của nhóm NFS.

NFS: một hệ thống tệp mạng tiện lợi và đầy hứa hẹn

Hệ thống tập tin mạng là một bản tóm tắt mạng trên hệ thống tệp thông thường, cho phép máy khách từ xa truy cập nó qua mạng giống như khi truy cập hệ thống tệp cục bộ. Mặc dù NFS không phải là hệ thống tệp mạng đầu tiên nhưng nó đã phát triển để trở thành hệ thống tệp mạng phổ biến và có khả năng nhất trong UNIX® ngày nay. NFS cho phép nhiều người dùng chia sẻ một hệ thống tệp chung và tập trung dữ liệu để giảm thiểu dung lượng ổ đĩa cần thiết để lưu trữ.

Bài viết này bắt đầu với phần tổng quan ngắn gọn về lịch sử của NFS và sau đó chuyển sang khám phá kiến ​​trúc của NFS và cách nó có thể phát triển trong tương lai.

Tóm tắt lịch sử của NFS

Hệ thống tệp mạng đầu tiên được gọi là FAL (Trình nghe truy cập tệp) và được phát triển vào năm 1976 bởi DEC (Tập đoàn thiết bị kỹ thuật số). Đó là một triển khai giao thức DAP (Giao thức truy cập dữ liệu) và là một phần của bộ giao thức DECnet. Giống như TCP/IP, DEC đã công bố thông số kỹ thuật cho các giao thức mạng của mình, bao gồm cả giao thức DAP.

NFS là hệ thống tệp mạng hiện đại đầu tiên được xây dựng dựa trên giao thức IP. Nguyên mẫu của nó có thể được coi là một hệ thống tệp thử nghiệm được phát triển tại Sun Microsystems vào đầu những năm 80. Do tính phổ biến của giải pháp này, giao thức NFS đã được giới thiệu dưới dạng đặc tả RFC và sau đó được phát triển thành NFSv2. NFS nhanh chóng trở thành một tiêu chuẩn nhờ khả năng tương tác với các máy khách và máy chủ khác.

Tiêu chuẩn sau đó đã được cập nhật lên NFSv3, được xác định trong RFC 1813. Phiên bản giao thức này có khả năng mở rộng cao hơn các phiên bản trước và hỗ trợ kích thước tệp lớn hơn (trên 2 GB), ghi không đồng bộ và TCP làm giao thức truyền tải. NFSv3 đặt ra định hướng phát triển hệ thống tập tin cho mạng diện rộng (WAN). Năm 2000, RFC 3010 (được sửa đổi thành RFC 3530) đã đưa NFS vào môi trường doanh nghiệp. Sun đã giới thiệu NFSv4 an toàn hơn với sự hỗ trợ có trạng thái (các phiên bản trước của NFS không hỗ trợ lưu trữ có trạng thái, tức là chúng được phân loại là không trạng thái). Hiện tại, phiên bản mới nhất của NFS là phiên bản 4.1, được xác định trong RFC 5661, bổ sung thêm giao thức bằng cách mở rộng pNFS hỗ trợ truy cập song song cho các máy chủ phân tán đã được thêm vào.

Lịch sử của NFS, bao gồm các RFC cụ thể mô tả các phiên bản của nó, được hiển thị trong Hình 1.


Điều đáng ngạc nhiên là NFS đã được phát triển gần 30 năm. Nó là một hệ thống tệp mạng di động và ổn định đặc biệt với khả năng mở rộng, hiệu suất và chất lượng dịch vụ vượt trội. Khi tốc độ tăng và độ trễ giảm khi giao tiếp trong mạng, NFS tiếp tục là một cách phổ biến để triển khai hệ thống tệp trong mạng. Ngay cả trong trường hợp mạng cục bộ, ảo hóa khuyến khích lưu trữ dữ liệu trên mạng để cung cấp thêm tính di động cho các máy ảo. NFS cũng hỗ trợ các mô hình môi trường điện toán mới nhất nhằm tối ưu hóa cơ sở hạ tầng ảo.

Kiến trúc NFS

NFS sử dụng mô hình kiến ​​trúc client-server tiêu chuẩn (như trong Hình 2). Máy chủ chịu trách nhiệm triển khai hệ thống tệp chia sẻ và lưu trữ mà máy khách kết nối. Máy khách triển khai giao diện người dùng cho hệ thống tệp dùng chung được gắn trong không gian tệp cục bộ của máy khách.

Hình 2. Triển khai mô hình client-server trong kiến ​​trúc NFS

Trong Linux®, bộ chuyển đổi hệ thống tệp ảo (VFS) cung cấp phương tiện để hỗ trợ nhiều hệ thống tệp (ví dụ: hệ thống tệp ISO 9660 trên CD-ROM và hệ thống tệp ext3fs trên ổ cứng cục bộ) trên một máy chủ duy nhất . Công tắc ảo xác định ổ đĩa nào yêu cầu được thực hiện và do đó hệ thống tệp nào sẽ được sử dụng để xử lý yêu cầu. Do đó, NFS có khả năng tương thích tương tự như các hệ thống tệp khác được sử dụng trong Linux. Sự khác biệt duy nhất với NFS là thay vì được xử lý cục bộ trên máy chủ, các yêu cầu I/O có thể được gửi tới mạng để thực thi.

VFS xác định rằng yêu cầu nhận được là NFS và chuyển nó đến trình xử lý NFS nằm trong kernel. Trình xử lý NFS xử lý yêu cầu I/O và chuyển nó thành thủ tục NFS (MỞ, TRUY CẬP, TẠO, ĐỌC, ĐÓNG, XÓA, v.v.). Các quy trình này, được mô tả trong đặc tả RFC riêng, xác định hoạt động của giao thức NFS. Quy trình cần thiết được chọn tùy theo yêu cầu và được thực thi bằng công nghệ RPC (gọi thủ tục từ xa). Đúng như tên gọi của nó, RPC cho phép thực hiện các cuộc gọi thủ tục giữa các hệ thống khác nhau. Dịch vụ RPC nối một yêu cầu NFS với các đối số của nó và gửi kết quả đến máy chủ từ xa thích hợp, sau đó giám sát việc nhận và xử lý phản hồi để trả lại cho người yêu cầu.

RPC cũng bao gồm một lớp XDR quan trọng ( biểu diễn dữ liệu ngoài- biểu diễn dữ liệu độc lập), đảm bảo rằng tất cả người dùng NFS sử dụng cùng một định dạng cho cùng loại dữ liệu. Khi một nền tảng gửi yêu cầu, loại dữ liệu mà nó sử dụng có thể khác với loại dữ liệu được sử dụng trên máy chủ xử lý yêu cầu. Công nghệ XDR đảm nhiệm công việc chuyển đổi các loại thành dạng biểu diễn tiêu chuẩn (XDR) để các nền tảng sử dụng các kiến ​​trúc khác nhau có thể tương tác và chia sẻ các hệ thống tệp. XDR xác định định dạng bit cho các loại như float và thứ tự byte cho các loại như mảng có độ dài không đổi và thay đổi. Mặc dù XDR chủ yếu được biết đến nhờ sử dụng trong NFS, nhưng thông số kỹ thuật này có thể hữu ích trong mọi trường hợp bạn phải làm việc trong cùng một môi trường với các kiến ​​trúc khác nhau.

Sau khi XDR dịch dữ liệu thành biểu diễn tiêu chuẩn, yêu cầu sẽ được gửi qua mạng bằng giao thức truyền tải cụ thể. Việc triển khai NFS ban đầu sử dụng UDP, nhưng ngày nay TCP được sử dụng để có độ tin cậy cao hơn.

Một thuật toán tương tự được sử dụng ở phía máy chủ NFS. Yêu cầu di chuyển lên ngăn xếp mạng thông qua lớp RPC/XDR (để chuyển đổi các loại dữ liệu theo kiến ​​trúc máy chủ) và đến máy chủ NFS, chịu trách nhiệm xử lý yêu cầu. Ở đó, yêu cầu được chuyển đến daemon NFS để xác định hệ thống tệp đích mà nó được xử lý, sau đó lại chuyển đến VFS để truy cập hệ thống tệp đó trên đĩa cục bộ. Sơ đồ hoàn chỉnh của quá trình này được hiển thị trong Hình 3. Trong trường hợp này, hệ thống tệp cục bộ của máy chủ là hệ thống tệp Linux tiêu chuẩn, ví dụ: ext4fs. Về bản chất, NFS không phải là một hệ thống tệp theo nghĩa truyền thống của thuật ngữ này mà là một giao thức để truy cập từ xa vào các hệ thống tệp.


Đối với các mạng có độ trễ dài, NFSv4 cung cấp quy trình kết hợp đặc biệt ( thủ tục ghép). Quy trình này cho phép bạn thực hiện nhiều lệnh gọi RPC trong một yêu cầu duy nhất để giảm thiểu chi phí gửi yêu cầu qua mạng. Quy trình này cũng thực hiện cơ chế chức năng gọi lại để nhận phản hồi.

Giao thức NFS

Khi máy khách bắt đầu sử dụng NFS, hành động đầu tiên là thực hiện thao tác gắn kết, tức là gắn hệ thống tệp từ xa vào không gian hệ thống tệp cục bộ. Quá trình này bắt đầu bằng lệnh gọi thủ tục mount (một trong các chức năng của hệ thống Linux), được chuyển hướng qua VFS tới thành phần NFS. Sau đó, lệnh gọi RPC tới hàm get_port trên máy chủ từ xa sẽ xác định số cổng sẽ được sử dụng để gắn kết và máy khách sẽ gửi yêu cầu gắn kết qua RPC. Yêu cầu này ở phía máy chủ được xử lý bởi một daemon rpc.mountd đặc biệt, chịu trách nhiệm về giao thức gắn kết ( giao thức gắn kết). Trình nền kiểm tra xem hệ thống tệp được khách hàng yêu cầu có nằm trong danh sách các hệ thống có sẵn trên máy chủ nhất định hay không. Nếu hệ thống được yêu cầu tồn tại và máy khách có quyền truy cập vào nó, phản hồi RPC gắn kết sẽ chỉ định một bộ mô tả hệ thống tệp. Máy khách lưu giữ thông tin về các điểm gắn kết cục bộ và từ xa và có thể thực hiện các yêu cầu I/O. Giao thức gắn kết không an toàn từ quan điểm bảo mật, do đó, NFSv4 sử dụng các lệnh gọi RPC nội bộ để thay thế, điều này cũng có thể quản lý các điểm gắn kết.

Để đọc một tập tin, trước tiên bạn phải mở nó. Không có thủ tục MỞ trong RPC; thay vào đó, máy khách chỉ cần kiểm tra xem tệp và thư mục được chỉ định có tồn tại trên hệ thống tệp được gắn hay không. Máy khách bắt đầu bằng cách thực hiện yêu cầu GETATTR RPC tới thư mục, yêu cầu này trả về các thuộc tính của thư mục hoặc chỉ báo rằng thư mục không tồn tại. Tiếp theo, để kiểm tra sự hiện diện của tệp, máy khách đưa ra yêu cầu LOOKUP RPC. Nếu tệp tồn tại, yêu cầu GETATTR RPC sẽ được thực hiện trên đó để tìm ra các thuộc tính của tệp. Bằng cách sử dụng thông tin thu được từ các lệnh gọi LOOKUP và GETATTR thành công, máy khách sẽ tạo một trình xử lý tệp được cung cấp cho người dùng cho các yêu cầu trong tương lai.

Khi tệp đã được xác định trên hệ thống tệp từ xa, máy khách có thể đưa ra yêu cầu RPC READ. Yêu cầu này bao gồm một bộ mô tả tệp, trạng thái, phần bù và số byte cần đọc. Khách hàng sử dụng trạng thái ( tình trạng) để xác định xem thao tác có thể được thực hiện vào lúc này hay không, tức là. Tập tin có bị khóa không? Bù lại ( bù lại) cho biết vị trí bắt đầu đọc và bộ đếm byte ( đếm) xác định số byte cần đọc. Do lệnh gọi RPC READ, máy chủ không phải lúc nào cũng trả về số byte như được yêu cầu, nhưng cùng với dữ liệu trả về, nó luôn báo cáo số byte đã được gửi đến máy khách.

Đổi mới trong NFS

Hai phiên bản mới nhất của NFS được quan tâm nhiều nhất - 4 và 4.1, là ví dụ mà bạn có thể nghiên cứu các khía cạnh quan trọng nhất trong quá trình phát triển của công nghệ NFS.

Trước khi có NFSv4 để thực hiện các tác vụ quản lý tệp như gắn, khóa, v.v. có những giao thức bổ sung đặc biệt. Trong NFSv4, quy trình quản lý tệp được đơn giản hóa thành một giao thức duy nhất; Ngoài ra, bắt đầu từ phiên bản này, UDP không còn được sử dụng làm giao thức truyền tải nữa. NFSv4 bao gồm hỗ trợ ngữ nghĩa truy cập tệp UNIX và Windows®, cho phép NFS tích hợp một cách tự nhiên vào các hệ điều hành khác.

NFSv4.1 đã giới thiệu khái niệm về NFS song song(NFS song song - pNFS). Để cung cấp mức độ mở rộng cao hơn, NFSv4.1 triển khai kiến ​​trúc trong đó dữ liệu và siêu dữ liệu ( đánh dấu) được phân phối trên các thiết bị theo cách tương tự như cách nó được thực hiện trong các hệ thống tệp được phân cụm. Như được hiển thị trong , pNFS chia hệ sinh thái thành ba thành phần: máy khách, máy chủ và bộ lưu trữ. Trong trường hợp này, hai kênh xuất hiện: một kênh để truyền dữ liệu và kênh kia để truyền lệnh điều khiển. pNFS tách dữ liệu khỏi siêu dữ liệu mô tả nó, cung cấp kiến ​​trúc hai kênh. Khi khách hàng muốn truy cập một tệp, máy chủ sẽ gửi siêu dữ liệu đó cùng với "đánh dấu". Siêu dữ liệu chứa thông tin về vị trí của tệp trên thiết bị lưu trữ. Khi khách hàng có thông tin này, nó có thể truy cập trực tiếp vào bộ lưu trữ mà không cần phải tương tác với máy chủ, cải thiện khả năng mở rộng và hiệu suất. Khi máy khách làm việc xong với tệp, nó sẽ xác nhận những thay đổi được thực hiện đối với tệp và "đánh dấu" của nó. Nếu cần, máy chủ có thể yêu cầu siêu dữ liệu có đánh dấu từ máy khách.

Với sự ra đời của pNFS, một số hoạt động mới đã được thêm vào giao thức NFS để hỗ trợ cơ chế như vậy. Phương thức LayoutGet được sử dụng để truy xuất siêu dữ liệu từ máy chủ, phương thức LayoutReturn "giải phóng" siêu dữ liệu được máy khách "bắt" và phương thức LayoutCommit tải "bố cục" nhận được từ máy khách vào bộ lưu trữ để nó có sẵn cho những người dùng khác. Máy chủ có thể gọi lại siêu dữ liệu từ máy khách bằng phương thức LayoutRecall. Siêu dữ liệu "được gắn thẻ" được phân phối trên nhiều thiết bị lưu trữ để cung cấp quyền truy cập song song và hiệu suất cao.


Dữ liệu và siêu dữ liệu được lưu trữ trên các thiết bị lưu trữ. Khách hàng có thể thực hiện các yêu cầu I/O trực tiếp dựa trên đánh dấu nhận được và máy chủ NFSv4.1 lưu trữ và quản lý siêu dữ liệu. Bản thân chức năng này không phải là mới, nhưng pNFS đã bổ sung hỗ trợ cho nhiều phương pháp truy cập thiết bị lưu trữ khác nhau. Ngày nay, pNFS hỗ trợ sử dụng các giao thức khối (Kênh sợi quang), giao thức đối tượng và chính NFS (thậm chí không ở dạng pNFS).

Sự phát triển của NFS vẫn tiếp tục và vào tháng 9 năm 2010, các yêu cầu đối với NFSv4.2 đã được công bố. Một số đổi mới có liên quan đến sự chuyển dịch liên tục của công nghệ lưu trữ dữ liệu sang ảo hóa. Ví dụ: trong môi trường ảo có bộ ảo hóa, việc sao chép dữ liệu (nhiều hệ điều hành đọc/ghi và lưu vào bộ đệm cùng một dữ liệu) rất có thể xảy ra. Vì điều này, điều mong muốn là toàn bộ hệ thống lưu trữ phải hiểu được nơi xảy ra sự trùng lặp. Cách tiếp cận này sẽ giúp tiết kiệm dung lượng bộ đệm của máy khách và dung lượng lưu trữ tổng thể. NFSv4.2 đề xuất sử dụng "bản đồ khối của các khối chia sẻ" để giải quyết vấn đề này. Khi các hệ thống lưu trữ hiện đại ngày càng được trang bị sức mạnh tính toán nội bộ của riêng chúng, việc sao chép phía máy chủ đang được giới thiệu để giảm bớt gánh nặng sao chép dữ liệu qua mạng nội bộ khi việc này có thể được thực hiện một cách hiệu quả trên chính thiết bị lưu trữ. Những cải tiến khác bao gồm bộ nhớ đệm tệp phụ cho bộ nhớ flash và các đề xuất điều chỉnh I/O phía máy khách (chẳng hạn như sử dụng bản đồ).

Các lựa chọn thay thế NFS

Mặc dù NFS là hệ thống tệp mạng phổ biến nhất trong UNIX và Linux, nhưng vẫn có các hệ thống tệp mạng khác. Trên nền tảng Windows®, SMB được sử dụng phổ biến nhất, còn được gọi là CIFS; tuy nhiên, HĐH Windows cũng hỗ trợ NFS và Linux hỗ trợ SMB.

Một trong những hệ thống tệp phân tán mới nhất được hỗ trợ trên Linux, Ceph, được thiết kế ngay từ đầu để trở thành một hệ thống tệp tuân thủ POSIX có khả năng chịu lỗi. Thông tin thêm về Ceph có thể được tìm thấy trong phần này.

Cũng cần nhắc đến các hệ thống tệp OpenAFS (phiên bản Nguồn mở của hệ thống tệp phân tán Andrew, được phát triển tại Đại học Carnegie Mellon và Tập đoàn IBM), GlusterFS (một hệ thống tệp phân tán có mục đích chung để tổ chức lưu trữ dữ liệu có thể mở rộng) và Luster (một hệ thống tệp phân tán có mục đích chung để tổ chức lưu trữ dữ liệu có thể mở rộng). hệ thống tệp mạng song song cho các giải pháp cụm). Tất cả các hệ thống nguồn mở này có thể được sử dụng để xây dựng kho lưu trữ phân tán.

Phần kết luận

Sự phát triển của hệ thống tập tin NFS vẫn tiếp tục. Tương tự như hệ điều hành Linux, có thể hỗ trợ cả giải pháp cấp thấp, nhúng và cao cấp, NFS cung cấp kiến ​​trúc cho các giải pháp lưu trữ có khả năng mở rộng phù hợp cho cả cá nhân và tổ chức. Khi bạn nhìn vào hành trình mà NFS đã thực hiện và triển vọng phát triển trong tương lai của nó, bạn có thể thấy rõ rằng hệ thống tệp này sẽ tiếp tục thay đổi cách chúng ta nghĩ về cách triển khai và sử dụng các công nghệ lưu trữ tệp.