NFS: Hệ thống tệp mạng. Cài đặt và cấu hình máy chủ NFS

Tôi đang cung cấp hướng dẫn cài đặt và định cấu hình NFS (Hệ thống tệp mạng). NFS là một hệ thống tệp mạng cho phép bạn truy cập các tệp và thư mục trên máy tính (máy chủ) từ xa như thể các tệp và thư mục này là cục bộ. Ưu điểm chính của hệ thống như vậy là các máy trạm riêng lẻ có thể sử dụng ít dung lượng đĩa riêng hơn vì dữ liệu dùng chung được lưu trữ trên một máy riêng biệt (kho dữ liệu) và có sẵn cho các máy khác trên mạng. NFS là một ứng dụng máy khách-máy chủ trong đó vai trò lưu trữ được gán cho máy chủ. Mỗi người tham gia mạng là một máy khách NFS gắn ổ đĩa mạng của máy chủ vào hệ thống tệp của nó.

Hãy lấy Ubuntu 12.04 làm máy chủ.
Chúng tôi sẽ sử dụng và thử nghiệm Centos và Winows 7 với tư cách là khách hàng.

Máy chủ chính: 192.168.2.213 (Ubuntu)

Khách hàng: 192.168.2.72 (Centos), 192.168.2.180 (Windows)

Điều chỉnh máy chủ

Đầu tiên bạn cần cấu hình máy chủ. Vì chúng ta sẽ sử dụng Ubuntu làm máy chủ nên chúng ta cần cài đặt gói thích hợp

Root@ubuntu:~# apt-get cài đặt nfs-kernel-server

Sau khi cài đặt các gói cần thiết, chúng tôi đã tạo hai tệp cấu hình. Từ nhật ký cài đặt:

... Tạo tập tin cấu hình /etc/idmapd.conf với phiên bản mới Tạo tập tin cấu hình /etc/default/nfs-common với phiên bản mới ...

Tệp đầu tiên mô tả người dùng (được tạo khi cài đặt gói) và nhóm tham gia ánh xạ (nhận dạng người dùng).

Root@ubuntu:~# cat /etc/idmapd.conf Độ chi tiết = 0 Pipefs-Directory = /run/rpc_pipefs # đặt tên miền của riêng bạn ở đây, nếu id khác với FQDN trừ tên máy chủ # Tên miền = localdomain Không ai-Người dùng = không ai-Nhóm = không có nhóm

Như chúng ta biết, trong Linux, mỗi tệp thuộc về một người dùng cụ thể, người này có (UID, GID) của riêng mình, nhưng trên hệ thống Windows, sơ đồ hơi khác một chút. Và về vấn đề này, một cơ chế ánh xạ đã được phát minh, giúp chuyển những người dùng khác nhau từ các hệ điều hành khác nhau sang một dạng dễ hiểu đối với hệ thống tệp Linux.
Cần có tệp thứ hai để định cấu hình xác thực Kerberos và định cấu hình cổng không chuẩn mà daemon sẽ lắng nghe trên đó. Chúng tôi chưa cần anh ấy. Việc thiết lập Kerberos sẽ được thảo luận trong bài viết tiếp theo.

Root@ubuntu:~# cat /etc/default/nfs-common # Nếu bạn không đặt giá trị cho các tùy chọn NEED_, chúng sẽ được thử # tự động phát hiện; điều này là đủ cho hầu hết mọi người. Các lựa chọn thay thế hợp lệ # cho tùy chọn NEED_ là "có" và "không". # Bạn có muốn khởi động daemon statd không? Nó không cần thiết cho NFSv4. NEED_STATD= # Tùy chọn cho rpc.statd. # rpc.statd có nên lắng nghe trên một cổng cụ thể không? Điều này đặc biệt hữu ích # khi bạn có tường lửa dựa trên cổng. Để sử dụng cổng cố định, hãy đặt biến # this này thành đối số statd như: "--port 4000 --outending-port 4001". # Để biết thêm thông tin, xem rpc.statd(8) hoặc http://wiki.debian.org/SecuringNFS STATDOPTS= # Bạn có muốn khởi động daemon gssd không? Nó cần thiết cho việc gắn Kerberos. NEED_GSSD=

Bây giờ hãy tiếp tục với việc thiết lập.
Tất cả các thư mục chia sẻ phải được đăng ký trong tệp /etc/exports. Đầu tiên chúng ta tạo 2 thư mục trong thư mục chính và thả file vào đó. Cây thư mục và tập tin để xuất:

Root@ubuntu:~# tree /home/alex/ /home/alex/ ├── nfs_dir1 │ ├── file1_dir1 │ ├── file2_dir1 │ └── file3_dir1 ├── nfs_dir2 ├─ ─ file1_dir 2 ├── tập tin2_dir2 └─ ─ tập tin3_dir2

Bây giờ bạn cần chỉ định người dùng và nhóm cho các thư mục này (lấy từ tệp /etc/idmapd.conf).

Root@ubuntu:~# chown –R không ai:nogroup nfs_dir1/ root@ubuntu:~# chown –R không ai:nogroup nfs_dir2/

Đầu tiên, hãy xuất thư mục nfs_dir1 cho một IP cụ thể. Chỉnh sửa tệp /etc/exprots.

Root@ubuntu:~# vim /etc/exports # Dành cho một máy chủ cụ thể (Windows) /home/alex/nfs_dir1 192.168.2.180(rw,sync,all_squash,no_subtree_check,insecure) # Dành cho mọi máy chủ trên mạng con /home/alex /nfs_dir2 192.168 .2.0/24(rw,no_root_squash,sync,no_subtree_check)

Đây là bộ tùy chọn tối thiểu để bộ lưu trữ hoạt động chính xác với hệ điều hành Windows.

  • /nhà/alex/nfs_dir1– đường dẫn đến thư mục được cấp quyền truy cập;
  • 192.168.2.180 – Địa chỉ IP được cấp quyền truy cập vào thư mục (bạn có thể chỉ định toàn bộ mạng, khi đó mục nhập sẽ có dạng 192.168.2.0/24)
  • (rw,đồng bộ hóa,all_squash,no_subtree_check)- một tập hợp các tùy chọn.

Tùy chọn phổ biến:

  • rw–đọc/ghi (có thể lấy giá trị ro - chỉ đọc);
  • no_root_squash– theo mặc định, người dùng root trên máy khách sẽ không có quyền truy cập vào thư mục dùng chung của máy chủ. Với tùy chọn này, chúng tôi loại bỏ giới hạn này. Vì lý do an toàn, tốt hơn hết là không nên làm điều này;
  • đồng bộ hóa– chế độ truy cập đồng bộ (có thể lấy giá trị ngược lại - không đồng bộ);
  • không truy cập– từ chối quyền truy cập vào thư mục được chỉ định. Nó có thể hữu ích nếu trước đây bạn đặt quyền truy cập cho tất cả người dùng mạng vào một thư mục nhất định và bây giờ bạn muốn hạn chế quyền truy cập vào thư mục con chỉ cho một số người dùng.
  • all_squash– ngụ ý rằng tất cả các kết nối sẽ được thực hiện từ một người dùng ẩn danh (cần thiết cho máy khách Windows)
  • anonuid= 1000 – liên kết người dùng ẩn danh với người dùng “cục bộ”;
  • anongid= 1000 – liên kết người dùng ẩn danh với nhóm người dùng “cục bộ”.
  • no_subtree_check(cây con_check)–Nếu 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, máy chủ sẽ kiểm tra xem tệp được yêu cầu có nằm trong thư mục con được 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.
  • Thông thường, Linux (và các hệ điều hành tương tự Unix khác) dành riêng các cổng TCP và UDP từ 1-1023 (được gọi là cổng bảo mật) để sử dụng cho các quy trình người dùng root. Để đảm bảo rằng root đã khởi tạo kết nối từ xa NFS, máy chủ NFS thường yêu cầu các máy khách từ xa sử dụng các cổng an toàn. Tuy nhiên, quy ước này không được một số hệ điều hành (ví dụ: Windows) tôn trọng. Trong những trường hợp như vậy, tùy chọn không an toàn Cho phép máy khách NFS sử dụng bất kỳ cổng TCP/UDP nào. Điều này thường được yêu cầu khi phục vụ máy khách Windows.

Tất cả các tùy chọn và cú pháp có sẵn để viết máy chủ, nhóm máy chủ, v.v. bạn có thể đọc nó trong hướng dẫn

Root@ubuntu:~#exportfs –a

Bây giờ hãy kiểm tra những gì chúng tôi đã xuất.

Root@ubuntu:~# importfs -v /home/alex/nfs_dir1 192.168.2.180(rw,wdelay,all_squash,no_subtree_check,insecure) /home/alex/nfs_dir2 192.168.2.0/24(rw,wdelay,no_root_squash,no_subtree_check)

Máy chủ được cấu hình.

Thiết lập khách hàng

Thiết lập máy khách Windows

Nếu không có thông báo lỗi. Bạn có thể bắt đầu gắn kết ở phía máy khách.
Trước tiên, bạn cần thêm dịch vụ NFS (dịch vụ khách hàng). Để thực hiện việc này, hãy truy cập Bắt đầu -> Bảng điều khiển -> Chương trình và tính năng và nhấp vào mục menu bên trái Bật hoặc tắt các tính năng của Windows. Trong cửa sổ hiện ra, chọn Khách hàng cho NFS và nhấp vào ĐƯỢC RỒI(Hình 1).


Bức tranh 1

Tiếp theo bạn cần gắn đĩa. Để thực hiện việc này, bạn có thể sử dụng dòng lệnh hoặc chỉ cần nhấp vào nhấp chuột phải vào My Computer và chọn Map Network Drive. VÀ nhập dòng \\192.168.2.213\home\alex\nfs_dir1. Đây là IP máy chủ và đường dẫn đến thư mục (Hình 2).


Hình 2

Nếu mọi thứ đều ổn, chúng ta sẽ thấy đĩa (Hình 3).


Hình 3

Điều tương tự có thể được thực hiện bằng cách sử dụng dòng lệnh (Hình 4).


hinh 4

Những sai sót có thể xảy ra:

Bạn sẽ không thể kết nối ổ đĩa mạng NFS với HĐH Windows (Hình 5) nếu
1. Máy khách NFS chưa được cài đặt
2. Đã bật tường lửa (không được định cấu hình)
3. Không có quyền truy cập mạng vào máy chủ
4. Nhập thông số gắn kết không chính xác
5. Xuất không được định cấu hình (cài đặt không được áp dụng) trên máy chủ.
6. Thêm tùy chọn không an toàn trong cài đặt xuất


Hình 5 – Lỗi kết nối ổ đĩa NFS mạng

Bạn sẽ không thể thêm file vào hệ thống file được mount (Hình 6) nếu:
1. Quyền của thư mục không được đặt trên máy chủ (nobody:nogroup)
2. Tùy chọn all_squash không được đặt trong cài đặt xuất
3. Tùy chọn rw không được đặt trong cài đặt xuất


Hình 6 - Lỗi khi thêm tệp vào đĩa NFS

Thiết lập máy khách Centos

Thiết lập hệ thống Linux khá đơn giản và dễ dàng. Bạn chỉ cần cài đặt các gói cần thiết và mount đĩa. Centos yêu cầu các gói sau

# yum cài đặt nfs-utils nfs-utils-lib

# mkdir -p /mnt/nfs # mount 192.168.2.213:/home/alex/nfs_dir1 /mnt/nfs # mount /dev/mapper/vg_slave-lv_root on / gõ ext4 (rw) proc on /proc type proc (rw) sysfs trên /sys gõ sysfs (rw) devpts trên /dev/pts gõ devpts (rw,gid=5,mode=620) tmpfs trên /dev/shm gõ tmpfs (rw,rootcontext="system_u:object_r:tmpfs_t:s0" ) /dev/sda1 bật /boot gõ ext4 (rw) không bật /proc/sys/fs/binfmt_misc gõ binfmt_misc (rw) sunrpc bật /var/lib/nfs/rpc_pipefs gõ rpc_pipefs (rw) 192.168.2.213:/home/ alex/nfs_dir1 trên /mnt/nfs gõ nfs (rw,vers=4,addr=192.168.2.213,clientaddr=192.168.2.72)

Trong trường hợp này, chúng tôi có thể thêm bất kỳ tệp và thư mục nào vào thư mục nfs_dir1 được gắn thay mặt cho bất kỳ người dùng nào trên hệ thống ( all_squash). Nhưng nếu chúng ta gắn thư mục thứ hai nfs_dir2 thì CHỈ root mới có thể ghi vào nó, vì có một tùy chọn ở đó no_root_squash. Hãy kiểm tra.

# mkdir /mnt/dir1 # mkdir /mnt/dir2 # mount 192.168.2.213:/home/alex/nfs_dir1 /mnt/dir1 # mount 192.168.2.213:/home/alex/nfs_dir2 /mnt/dir2 hoặc # mount -t nfs4 -o rw,hard,intr,bg 192.168.2.213:/home/alex/nfs_dir2 /mnt/dir2 # echo "Xin chào" > /mnt/dir1/file1 # echo "Xin chào" > /mnt/dir2/file1 # su alex $ echo "Xin chào" > /mnt/dir1/file1 $ echo "Xin chào" > /mnt/dir2/file1 bash: /mnt/dir2/file1: Quyền bị từ chối

Có thể gắn cờ.

Lá cờ Sự miêu tả
rw Gắn hệ thống tệp để đọc/ghi (nó phải được máy chủ xuất ở chế độ đọc/ghi)
th Gắn hệ thống tệp chỉ đọc
bg Nếu hệ thống tệp không thể được gắn kết (máy chủ không phản hồi), bạn nên chuyển thao tác xuống nền và tiếp tục xử lý các yêu cầu gắn kết khác
cứng Nếu máy chủ ngừng hoạt động, các hoạt động cố gắng truy cập vào nó sẽ bị chặn cho đến khi máy chủ trực tuyến trở lại
mềm mại Nếu máy chủ ngừng hoạt động, các thao tác cố gắng truy cập vào máy chủ sẽ không thành công kèm theo thông báo lỗi. Cờ này rất hữu ích để thiết lập nhằm ngăn chặn quá trình treo trong trường hợp gắn kết không thành công các hệ thống tệp không quan trọng
nội tâm Cho phép bạn làm gián đoạn các thao tác bị chặn từ bàn phím (thông báo lỗi sẽ được hiển thị)
nointr Không cho phép bạn làm gián đoạn các thao tác bị chặn từ bàn phím
truyền lại=n Chỉ định số lần yêu cầu phải được lặp lại trước khi trả về thông báo lỗi (đối với các hệ thống tệp được gắn cờ mềm)
thời gian=n Đặt khoảng thời gian chờ cho các yêu cầu (tính bằng phần mười giây)
rsize=n Đặt kích thước bộ đệm đọc thành n byte
wsize=fl Đặt kích thước bộ đệm ghi thành n byte
giây=chế độ Đặt chế độ bảo mật
vers=n Đặt phiên bản giao thức NFS
nguyên mẫu = giao thức Chọn giao thức vận chuyển; nó phải là giao thức tcp cho NVS phiên bản 4

Bạn cũng có thể kiểm tra từ bảng điều khiển xem máy chủ có xuất hệ thống tệp chính xác hay không.

Root@centos ~# showmount -e 192.168.2.213 Xuất danh sách cho 192.168.2.213: /home/alex/nfs_dir2 192.168.2.0/24 /home/alex/nfs_dir1 192.168.2.180

Thêm thú cưỡi để khởi động

# cat /etc/fstab ... 192.168.2.213:/home/alex/nfs_dir2 /mnt/dir2 nfs4 rw,bg,intr,hard,nodev,nosuid 0 0

Root@centos ~# mount -a -t nfs4

Những sai lầm có thể xảy ra.

Root@centos ~# mount -a -t nfs4 mount.nfs4: điểm gắn kết /mnt/dir2 không tồn tại root@centos ~# mount -a -t nfs4 mount.nfs4: chia sẻ từ xa không ở định dạng "host:dir"

Trong trường hợp đầu tiên, bạn cần tạo một thư mục. Cái thứ hai chứa lỗi cú pháp trong fstab.
Nếu bạn gặp lỗi khi gắn phân vùng NFS, hãy xem qua danh sách Những sai lầm có thể xảy ra từ phần trước.
Bạn cũng có thể sử dụng autofs để mount các phân vùng NFS. Điều gì sẽ được thảo luận trong .

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 gói yêu cầu, gọi hàm hệ thống để thiết lập kết nối, sau đó 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 là trách nhiệ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.

Ứ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

#image.jpgChúc quý độc giả và khách ghé thăm blog của tôi có thời gian vui vẻ. Có một khoảng nghỉ rất dài giữa các bài đăng, nhưng tôi đã quay lại cuộc chiến). Trong bài viết hôm nay tôi sẽ xem xét Hoạt động giao thức NFS, Và thiết lập máy chủ NFS và máy khách NFS trên Linux.

Giới thiệu về NFS

NFS (Hệ thống tệp mạng- hệ thống tệp mạng) theo ý kiến ​​​​của tôi - một giải pháp lý tưởng trên mạng cục bộ nơi bạn cần trao đổi dữ liệu nhanh (nhanh hơn so với SAMBA và ít tốn tài nguyên hơn so với các hệ thống tệp từ xa có mã hóa - sshfs, SFTP, v.v.) Việc bảo mật thông tin được truyền đi không phải là ưu tiên hàng đầu. Giao thức NFS cho phép bạn gắn các hệ thống tệp từ xa qua mạng vào cây thư mục cục bộ, như thể nó là một hệ thống tệp đĩa được gắn.

Do đó, các ứng dụng cục bộ có thể hoạt động với hệ thống tệp từ xa như thể chúng là hệ thống cục bộ. Nhưng bạn cần phải cẩn thận (!) với thiết lập NFS, bởi vì với một cấu hình nhất định, có thể đóng băng hệ điều hành của máy khách để chờ I/O vô tận.

Giao thức NFS dựa trên công việc Giao thức RPC, điều này vẫn nằm ngoài tầm hiểu biết của tôi)) nên nội dung trong bài viết sẽ hơi mơ hồ... Trước khi có thể sử dụng NFS, dù là máy chủ hay máy khách, bạn phải đảm bảo rằng kernel của bạn có hỗ trợ cho tệp NFS hệ thống. Bạn có thể kiểm tra xem kernel có hỗ trợ hệ thống tệp NFS hay không bằng cách tìm kiếm sự hiện diện của các dòng tương ứng trong tệp /proc/filesystems:

ARCHIV ~ # grep nfs /proc/filesystems nodev nfs nodev nfs4 nodev nfsd

Nếu các dòng được chỉ định không có trong tệp /proc/filesystems thì bạn cần cài đặt các gói được mô tả bên dưới. Điều này có thể sẽ cho phép bạn cài đặt các mô-đun hạt nhân phụ thuộc để hỗ trợ các hệ thống tệp thích hợp.

Nếu sau khi cài đặt các gói, hỗ trợ NFS không được hiển thị trong tệp được chỉ định thì bạn sẽ cần phải biên dịch lại kernel để kích hoạt chức năng này.

Câu chuyện Hệ thống tệp mạng

Giao thức NFSđược phát triển bởi Sun Microsystems và có bốn phiên bản trong lịch sử của nó. NFSv1 được phát triển vào năm 1989 và đang ở giai đoạn thử nghiệm, chạy trên giao thức UDP. Phiên bản Một được mô tả trong RFC 1094.

NFSv2 được phát hành cùng năm 1989, được mô tả bởi cùng RFC1094 và cũng dựa trên giao thức UDP, đồng thời cho phép đọc ít nhất 2GB từ một tệp. NFSv3 được hoàn thiện vào năm 1995 và được mô tả trong RFC 1813.

Những cải tiến chính của phiên bản thứ ba là hỗ trợ các tệp lớn, hỗ trợ thêm cho giao thức TCP và các gói TCP lớn hơn, giúp tăng tốc đáng kể hiệu suất của công nghệ. NFSv4 được hoàn thiện vào năm 2000 và được mô tả trong RFC 3010, được sửa đổi vào năm 2003 và được mô tả trong RFC 3530.

Phiên bản thứ 4 bao gồm các cải tiến về hiệu suất, hỗ trợ các phương tiện xác thực khác nhau (cụ thể là Kerberos và LIPKEY với việc giới thiệu giao thức RPCSEC GSS) và danh sách kiểm soát truy cập (cả loại POSIX và Windows). NFS v4.1 đã được IESG phê duyệt vào năm 2010 và nhận được RFC 5661.

Cải tiến cơ bản của phiên bản 4.1 là đặc điểm kỹ thuật của pNFS - Parallel NFS, một cơ chế truy cập song song của máy khách NFS 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 hệ thống tệp mạng mẫu sẽ giúp xây dựng các hệ thống thông tin và lưu trữ “đám mây” phân tán.

máy chủ NFS

Vì chúng tôi có NFS- Cái này mạng hệ thống tập tin, bạn cần phải cấu hình mạng lưới trong Linux. (Bạn cũng có thể đọc bài viết các khái niệm chính về mạng). Tiếp theo bạn cần cài đặt gói thích hợp. Trên Debian đây là gói nfs-kernel-server và nfs-common, trên RedHat đây là gói nfs-utils.

Ngoài ra, bạn cần cho phép con quỷ chạy ở các mức thực thi thích hợp (lệnh trong RedHat - /sbin/chkconfig nfs bật, trong Debian - /usr/sbin/update-rc.d nfs-kernel-server mặc định).

Các gói đã cài đặt trong Debian được khởi chạy theo thứ tự sau:

ARCHIV ~ # ls -la /etc/rc2.d/ | grep nfs lrwxrwxrwx Một gốc 20 tháng 10 Mười tám 15:02 S15nfs-common -> ../init.d/nfs-common lrwxrwxrwx Một gốc 20 bảy Ngày 20 tháng 10 hai 01:23 S16nfs-kernel-server -> ../init .d/nfs-kernel-server

Nói cách khác, nó bắt đầu trước nfs-chung, sau này chính máy chủ nfs-kernel-server.

Trong RedHat, tình huống tương tự, ngoại trừ duy nhất là tập lệnh đầu tiên được gọi nfslock và máy chủ được gọi đơn giản nfs. Về nfs-chung Trang debian cho chúng ta biết theo đúng nghĩa đen những điều sau: các tệp được chia sẻ cho máy khách và máy chủ NFS, gói này phải được cài đặt trên máy sẽ hoạt động như máy khách hoặc máy chủ NFS.

Gói này bao gồm các chương trình: lockd, statd, showmount, nfsstat, gssd và idmapd. Bằng cách xem nội dung của tập lệnh khởi động /etc/init.d/nfs-common, bạn có thể theo dõi trình tự công việc sau: tập lệnh kiểm tra sự hiện diện của tệp nhị phân thực thi /sbin/rpc.statd, kiểm tra sự hiện diện trong các tập tin /etc/default/nfs-common, /etc/fstab và /etc/exports yêu cầu chạy quỷ idmapdgssd, khởi động daemon /sbin/rpc.statd, sau đó trước khi bắt đầu /usr/sbin/rpc.idmapd và /usr/sbin/rpc.gssd kiểm tra sự hiện diện của các tệp nhị phân thực thi này, sau đó /usr/sbin/rpc.idmapd sẽ kiểm tra sự hiện diện của các mô-đun hạt nhân sunrpc, nfs và nfsd, đồng thời hỗ trợ hệ thống tệp rpc_pipefs trong kernel (nói cách khác, sự hiện diện của nó trong tệp /proc/filesystems), nếu mọi thứ thành công, nó sẽ khởi chạy /usr/sbin/rpc.idmapd. Ngoài ra, đối với con quỷ /usr/sbin/rpc.gssd kiểm tra mô-đun hạt nhân rpcsec_gss_krb5 và khởi động quỷ.

Nếu bạn xem nội dung Kịch bản khởi động máy chủ NFS trên Debian (/etc/init.d/nfs-kernel-server), thì bạn có thể làm theo trình tự sau: khi khởi động, tập lệnh sẽ kiểm tra sự tồn tại của tệp /etc/exports, sự hiện diện của mô-đun hạt nhân nfsd, sự hiện diện của hỗ trợ cho hệ thống tệp NFS trong nhân Linux (các từ khác trong tệp /proc/filesystems), nếu mọi thứ đều ổn, thì con quỷ sẽ bắt đầu /usr/sbin/rpc.nfsd, sau đó kiểm tra xem tham số NEED_SVCGSSD đã được đặt chưa (được đặt trong tệp tùy chọn máy chủ /etc/default/nfs-kernel-server) và nếu được đặt, sẽ khởi động quỷ /usr/sbin/rpc.svcgssd, người cuối cùng phóng quỷ /usr/sbin/rpc.mountd. Từ kịch bản này rõ ràng là Hoạt động của máy chủ NFS bao gồm quỷ rpc.nfsd, rpc.mountd và nếu xác thực Kerberos được sử dụng thì quỷ rcp.svcgssd. Con quỷ rpc.rquotad và nfslogd vẫn đang chạy trong mũ đỏ (Vì lý do nào đó trong Debian, tôi không tìm thấy thông tin về con quỷ này và lý do vắng mặt của nó, hình như nó đã bị xóa...).

Từ đó trở nên rõ ràng rằng Máy chủ Hệ thống tệp mạng bao gồm các quy trình sau (đọc - quỷ), nằm trong thư mục /sbin và /usr/sbin:

  • rpc.statd- Không thể giám sát trạng thái mạng (còn gọi là Network Status Monitor, 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ề các vi phạm, hãy sử dụng chương trình /usr/sbin/sm-notify. Statd imp hoạt động 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 (lưu ý: nếu tôi không nhầm #image.jpg). (Chương trình RPC 100 nghìn 20 một và 100 nghìn 20 bốn - phiên bản mới)
  • rpc.lockd- Lockd lock imp (hay còn gọi là trình quản lý khóa NFS (NLM)) xử lý các yêu cầu khóa file. Imp chặn hoạt động 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 trong các bản phân phối mới như một con quỷ. Các chức năng của nó trong các bản phân phối hiện đại (với hạt nhân cũ hơn 2.2.18) được thực hiện bởi hạt nhân, chính xác hơn là bởi mô-đun hạt nhân (lockd).) (chương trình RPC 100024)
  • rpc.nfsd- Con quỷ chính của máy chủ NFS là nfsd (trong các phiên bản mới đôi khi nó được gọi là nfsd4). Imp này phục vụ các yêu cầu của 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 quỷ cần chạy (mặc định là 8).
  • rpc.mountd- Không cần mount NFS mountd xử lý các yêu cầu của client để mount các thư mục. Imp được gắn kết chạy trên máy chủ NFS. (Chương trình RPC 100005)
  • rpc.idmapd- 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 thuộc loại name@domain thành định danh nhóm và người dùng cục bộ (theo cấu hình tệp /etc/idmapd.conf, biết thêm chi tiết trong man idmapd.conf):.
  • Ngoài ra, các phiên bản cũ hơn của NFS đã sử dụng imps: nfslogd- NFS log imp ghi lại hoạt động cho các hệ thống tệp đã xuất, hoạt động trên các máy chủ NFS và hạn ngạch- máy chủ hạn ngạch từ xa cung cấp thông tin về hạn ngạch người dùng trong hệ thống tệp từ xa, có thể hoạt động trên cả máy chủ và máy khách (chương trình RPC 100011)

Trong NFSv4, khi sử dụng Kerberos, các ác quỷ cũng được khởi chạy:

  • rpc.gssd- Bes NFSv4 cung cấp 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- Imp máy chủ NFSv4, cung cấp xác thực ứng dụng khách phía máy chủ.

portmap và giao thức RPC (Sun RPC)

Ngoài các gói nêu trên, NFSv2 và v3 yêu cầu gói bổ sung để hoạt động chính xác sơ đồ cổng(được thay thế trong các bản phân phối mới hơn bằng cách đổi tên thành rpcbind). Gói này thường được cài đặt tự động với NFS như một gói phụ thuộc và thực hiện hoạt động của máy chủ RPC, nói cách khác, nó chịu trách nhiệm phân công động các cổng cho một số dịch vụ được đăng ký trong máy chủ RPC.

Theo nghĩa đen, theo tài liệu, đây là một 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. Con quỷ bản đồ cổng được khởi chạy bằng tập lệnh /etc/init.d/portmap trước khi bắt đầu dịch vụ NFS.

Nói tóm lại, 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.

Khi 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 khỏi/từ một trình ánh xạ cổng (còn gọi là trình ánh xạ cổng, hay còn gọi là portmap, hay còn gọi là portmapper, hay còn gọi là trong các phiên bản mới, rpcbind) và khách hàng sử dụng các lệnh gọi RPC để gửi yêu cầu tới trình ánh xạ cổng để nhận thông tin liên quan. Tên thân thiện với người dùng của các dịch vụ chương trình và số tương ứng của chúng được xác định trong tệp /etc/rpc.

Vì bất kỳ dịch vụ nào đã gửi yêu cầu tương ứng và tự đăng ký trên máy chủ RPC trong trình ánh xạ cổng, máy chủ RPC sẽ gán, ánh xạ tới dịch vụ các cổng TCP và UDP mà dịch vụ đã khởi động và lưu trữ trong kernel thông tin tương ứng về dịch vụ đang chạy (tên), số dịch vụ duy nhất (theo /etc/rpc), về giao thức và cổng mà dịch vụ chạy trên đó cũng như về phiên bản của dịch vụ và cung cấp thông tin được chỉ định cho khách hàng theo yêu cầu. Bản thân bộ chuyển đổi cổng có số chương trình (100000), số phiên bản là 2, cổng TCP 100 11 và cổng UDP 111.

Ở trên, khi chỉ ra thành phần của các con quỷ máy chủ NFS, tôi đã chỉ ra các số chương trình RPC chính. Có lẽ tôi đã làm bạn bối rối một chút với đoạn này, vì vậy tôi sẽ nói cụm từ chính để làm rõ mọi thứ: chức năng chính của trình ánh xạ cổng là trả về, theo yêu cầu của khách hàng đã cung cấp số chương trình RPC (hoặc Số chương trình RPC) và phiên bản cho anh ta (máy khách) cổng mà chương trình được yêu cầu đang chạy. Theo đó, nếu client cần truy cập RPC bằng một số chương trình cụ thể, trước tiên nó phải liên hệ với tiến trình portmap trên máy chủ và tìm số cổng giao tiếp với dịch vụ RPC mà nó cần.

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

Để lấy thông tin từ máy chủ RPC, hãy sử dụng tiện ích rpcinfo. Khi bạn chỉ định đặc điểm 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. Ví dụ:

ARCHIV ~ # rpcinfo -p prog-ma vers cổng proto 100 nghìn Hai tcp 100 mười một portmapper 100 nghìn Hai udp 100 mười một portmapper 100 nghìn 20 bốn Một udp 50 chín nghìn bốn trăm 50 một trạng thái 100 nghìn 20 bốn Một tcp Sáu mươi nghìn tám trăm 70 hai trạng thái 100 nghìn 20 một Một udp 40 bốn nghìn ba trăm 10 nlockmgr 100 nghìn 20 một Ba udp 40 bốn nghìn ba trăm 10 nlockmgr 100 nghìn 20 một Bốn udp 40 bốn nghìn ba trăm 10 nlockmgr 100 nghìn 20 một Một tcp 40 bốn nghìn tám trăm 50 một nlockmgr 100 nghìn 20 một Ba tcp 40 bốn nghìn tám trăm 50 một nlockmgr 100 nghìn 20 một Bốn tcp 40 bốn nghìn tám trăm 50 một nlockmgr 100 nghìn ba Hai tcp Hai nghìn 40 chín nfs 100 nghìn ba Ba tcp Hai nghìn 40 chín nfs 100 nghìn ba Bốn tcp Hai nghìn 40 chín nfs 100 nghìn ba Hai udp Hai nghìn 40 chín nfs 100 nghìn ba Ba udp Hai nghìn 40 chín nfs 100 nghìn ba Bốn udp Hai nghìn 40 chín nfs 100 nghìn 5 Một udp 50 một nghìn ba trăm 6 gắn 100 nghìn 5 Một tcp 40 một nghìn bốn trăm 5 gắn 100 nghìn 5 Hai udp 50 một nghìn ba trăm 6 gắn 100 nghìn 5 Hai tcp 40 một nghìn bốn trăm 5 gắn 100 nghìn 5 Ba udp 50 một nghìn ba trăm 6 gắn kết 100 nghìn 5 Ba tcp 40 một nghìn bốn trăm 5 gắn kết

Như bạn có thể thấy, rpcinfo cho biết (trong các cột từ trái sang phải) số lượng chương trình, phiên bản, giao thức, cổng và tên đã đăng ký.

Sử dụng rpcinfo, bạn có thể xóa đăng ký chương trình hoặc nhận thông tin về một dịch vụ RPC cụ thể (nhiều tùy chọn hơn trong man rpcinfo). Như bạn có thể thấy, phiên bản portmapper Hai con quỷ được đăng ký trên cổng udp và tcp, phiên bản rpc.statd Một trên cổng udp và tcp, trình quản lý khóa NFS phiên bản 1,3,4, máy chủ nfs phiên bản 2,3,4, cũng như gắn quỷ phiên bản 1,2,3.

Máy chủ NFS (chính xác hơn là 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ù thực tế là 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 Hai nghìn 40 chín được gán nghiêm ngặt cho NFS trong hầu hết các triển khai.

Hoạt động giao thức hệ thống tệp mạng

Gắn NFS từ xa

Quá trình gắn hệ thống tệp NFS từ xa có thể được biểu diễn bằng sơ đồ sau:

Mô tả giao thức NFS khi gắn thư mục từ xa:

  1. Một máy chủ RPC được khởi chạy trên máy chủ và máy khách (thường là lúc khởi động), được phục vụ bởi quy trình portmapper và được đăng ký trên cổng tcp/111 và udp/111.
  2. Các dịch vụ được khởi chạy (rpc.nfsd, rpc.statd, v.v.), được đăng ký trên máy chủ RPC và được đăng ký trên các cổng mạng ngẫu nhiên (nếu cổng tĩnh không được chỉ định trong cài đặt dịch vụ).
  3. lệnh mount trên máy tính khách gửi kernel yêu cầu mount thư mục mạng cho biết loại hệ thống tệp, máy chủ và thư mục thực tế, kernel gửi và tạo yêu cầu RPC tới quy trình portmap trên máy chủ NFS trên cổng udp/ 111 (nếu chức năng hoạt động qua tcp không được đặt trên máy khách)
  4. Nhân máy chủ NFS truy vấn RPC về sự hiện diện của imp rpc.mountd và trả về kernel máy khách cổng mạng mà imp đang chạy trên đó.
  5. mount gửi yêu cầu RPC tới cổng mà rpc.mountd đang chạy. Tại thời điểm này, máy chủ NFS có thể xác thực máy khách dựa trên địa chỉ IP và số cổng của nó để xem liệu máy khách có thể gắn hệ thống tệp được chỉ định hay không.
  6. Mountless trả về mô tả về hệ thống tập tin được yêu cầu.
  7. Lệnh mount của máy khách thực hiện lệnh gọi hệ thống mount để liên kết phần xử lý tệp được tìm thấy ở bước 5 với điểm gắn kết cục bộ trên máy chủ của máy khách. Trình xử lý tệp được lưu trữ trong mã máy khách NFS và từ giờ trở đi, mọi quyền truy cập của quy trình người dùng vào các tệp trên hệ thống tệp của máy chủ sẽ sử dụng trình xử lý tệp làm điểm bắt đầu.

Trao đổi dữ liệu giữa máy khách và máy chủ NFS

Quyền truy cập thông thường vào hệ thống tệp từ xa có thể được mô tả bằng sơ đồ sau:

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

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

Điều chỉnh máy chủ thường 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à phân cấp thư mục xuất khẩu. Nguồn thông tin chính về các thư mục được xuất là các tệp sau:

  • /etc/xuất khẩu- tệp cấu hình chính lưu trữ cấu hình của các thư mục đã xuất. Được sử dụng khi khởi động NFS và bởi tiện ích importfs.
  • /var/lib/nfs/xtab- chứa danh sách các thư mục được gắn bởi các máy khách từ xa. Được sử dụng bởi imp 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 bản ghi gắn kết được tạo).
  • /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 tính năng của các thư mục đã xuất.
  • /var/lib/nfs/rmtab- danh sách các thư mục hiện chưa được xuất.
  • /proc/fs/nfsd- một hệ thống tệp đặc biệt (kernel 2.6) để quản lý máy chủ NFS.
    • xuất khẩu- danh sách các hệ thống phân cấp được xuất đang hoạt động và khách hàng mà họ đã được xuất cũng như các thuộc tính. Hạt nhân lấy thông tin này từ /var/lib/nfs/xtab.
    • chủ đề- chứa số lượng chủ đề (cũng có thể thay đổi)
    • sử dụng tước hiệu tệp bạn có thể lấy con trỏ tới một tệp
    • và vân vân...
  • /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ộ nhớ đệm khác nhau.
  • /var/run/portmap_mapping- thông tin về các dịch vụ được đăng ký trong RPC

Ghi chú: Nói chung trên Internet có rất nhiều cách hiểu và cách diễn đạt về mục đích của các file xtab, etab, rmtab, không biết tin ai #image.jpg Kể cả trên http://nfs.sourceforge.net/ việc giải nghĩa không rõ ràng.

Thiết lập tệp /etc/exports

Trong trường hợp bình thường, tệp /etc/exports là tệp duy nhất yêu cầu chỉnh sửa cho chức năng máy chủ NFS. Tệp này kiểm soát các thuộc tính sau:

  • Những loại khách hàng nào có thể truy cập các tập tin trên máy chủ
  • Những thứ bậc nào? các thư mục trên máy chủ có thể được truy cập bởi mỗi khách hàng
  • Tên khách hàng tùy chỉnh sẽ như thế nào được hiển thị tới tên người dùng cục bộ

Việc dòng nào của tệp xuất có định dạng sau không quan trọng:

import_point client1(hàm) [client2(hàm) ...]

Ở đâu điểm xuất khẩuđường dẫn tuyệt đối của hệ thống phân cấp thư mục đã xuất, khách hàng1 - n tên của 1 hoặc nhiều máy khách hoặc địa chỉ IP, cách nhau bằng dấu cách, được phép gắn kết điểm xuất khẩu. Chức năng phác thảo các quy tắc gắn kết cho khách hàng được chỉ ra trước các tùy chọn.

Đây là một cái bình thường ví dụ về cấu hình tệp xuất khẩu:

ARCHIV ~ # cat /etc/exports /archiv1 files(rw,sync) 10.0.0.1(ro,sync) 10.0.230.1/24(ro,sync)

Trong ví dụ này, các tệp máy tính và 10.0.0.1 được phép truy cập vào điểm xuất /archiv1, trong khi các tệp máy chủ có quyền truy cập đọc/ghi, còn máy chủ 10.0.0.1 và mạng con 10.0.230.1/24 có quyền truy cập chỉ đọc.

Mô tả máy chủ trong /etc/exports được phép ở định dạng sau:

  • Tên nút riêng lẻ được mô tả dưới dạng tệp hoặc tệp.DOMAIN.local.
  • Mô tả mặt nạ miền được tạo theo định dạng sau: *DOMAIN.local bao gồm tất cả các nút của miền DOMAIN.local.
  • Mạng con được chỉ định dưới dạng cặp địa chỉ/mặt nạ IP. Ví dụ: 10.0.0.0/255.255.255.0 bao gồm tất cả các nút có địa chỉ bắt đầu bằng 10.0.0.
  • Chỉ định tên của nhóm mạng @myclients có quyền truy cập vào tài nguyên (khi sử dụng máy chủ NIS)

Các chức năng chung để xuất hệ thống phân cấp thư mục

Các chức năng phổ biến sau đây được sử dụng trong tệp xuất:(đầu tiên, các hàm được sử dụng theo mặc định trong hầu hết các hệ thống được chỉ định trong ngoặc đơn - không phải mặc định):

  • auth_nlm (no_auth_nlm) hoặc safe_locks (không an toàn_locks)- chỉ định rằng máy chủ nên tìm kiếm xác thực các yêu cầu khóa (sử dụng giao thức Trình quản lý khóa NFS).
  • không ẩn (ẩn)- nếu máy chủ xuất hai hệ thống phân cấp thư mục, trong khi một hệ thống được lồng (gắn kết) bên trong hệ thống kia. Tất nhiên, máy khách phải gắn kết 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ẽ trông giống như một thư mục trống. Hàm nohide dẫn đến hệ thống phân cấp thư mục thứ 2 mà không cần bất kỳ sự gắn kết tầm thường nào. (lưu ý: Tôi không thể làm cho tùy chọn này hoạt động...)
  • ro(rw)- Chỉ cho phép đọc (ghi) các yêu cầu. (Cuối cùng, việc nó có thể được đọc/ghi hay không được xác định dựa trên quyền của hệ thống tệp, với tất cả những điều này, máy chủ không thể phân biệt yêu cầu đọc tệp với yêu cầu thực thi, vì vậy nó cho phép đọc nếu người dùng có quyền đọc hoặc thực thi.)
  • an toàn (không an toàn)- yêu cầu yêu cầu NFS đến từ các cổng an toàn (< 1024), чтобы программа без прав root не могла монтировать иерархию каталогов.
  • cây con_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 được 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 (không đồng bộ)- chỉ định rằng máy chủ chỉ nên phản hồi các yêu cầu sau khi ghi các cấu hình được thực hiện bởi các yêu cầu đó vào đĩa. Hàm async yêu cầu máy chủ không đợi thông tin được ghi vào đĩa, điều này làm tăng hiệu suất nhưng làm giảm độ tin cậy, bởi 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 các 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 số lượng lệnh không liên quan không giới hạn.

Xuất các liên kết tượng trưng và tập tin thiết bị. Khi xuất một hệ thống phân cấp thư mục chứa các liên kết tượng trưng, ​​​​đối tượng liên kết phải có thể truy cập được đối với hệ thống máy khách (từ xa), nói cách khác, một trong các quy tắc sau phải đúng:

  • đối tượng liên kết phải tồn tại trên hệ thống tệp máy khách
  • cần xuất và gắn kết đối tượng tham chiếu

Tệp thiết bị đề cập đến giao diện nhân Linux. Khi bạn xuất file thiết bị, giao diện này sẽ được xuất. Nếu hệ thống máy khách không có thiết bị cùng loại thì thiết bị được xuất sẽ không hoạt động.

Trên hệ thống máy khách, khi gắn các đối tượng NFS, bạn có thể sử dụng tùy chọn nodev để các tệp thiết bị trong thư mục được gắn không được sử dụng.

Các hàm mặc định có thể khác nhau giữa các hệ thống và có thể được tìm thấy trong /var/lib/nfs/etab. Sau khi mô tả thư mục đã xuất trong /etc/exports và khởi động lại máy chủ NFS, tất cả các hàm bị thiếu (đọc: các hàm mặc định) sẽ được phản ánh trong tệp /var/lib/nfs/etab.

Chức năng hiển thị (khớp) ID người dùng

Để hiểu rõ hơn về những điều sau đây, tôi khuyên bạn nên đọc bài viết Quản lý người dùng Linux. Mỗi người dùng Linux có UID và GID chính riêng, được mô tả trong các tệp /etc/passwd và /etc/group.

Máy chủ NFS giả định rằng hệ điều hành của máy chủ từ xa đã xác thực người dùng và gán cho họ UID và GID chính xác. Việc xuất tệp cung cấp cho người dùng hệ thống máy khách quyền truy cập tương tự vào các tệp đó như thể chúng được ghi trực tiếp trên máy chủ. Theo đó, khi một máy khách NFS gửi yêu cầu đến máy chủ, máy chủ sẽ sử dụng UID và GID để nhận dạng người dùng trên hệ thống cục bộ, điều này có thể dẫn đến một số vấn đề:


Các hàm sau đặt quy tắc hiển thị người dùng từ xa trong địa phương:

Một ví dụ về việc sử dụng tệp ánh xạ người dùng:

ARCHIV ~ # cat /etc/file_maps_users # Ánh xạ người dùng # nhận xét cục bộ từ xa uid 0-50 Một nghìn hai # ánh xạ người dùng với UID từ xa 0-50 sang UID cục bộ Một nghìn hai gid 0-50 Một nghìn hai # ánh xạ người dùng với /span GID từ xa 0-50 tới GID 1002 cục bộ

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

nfsstat: Thống kê NFS và RPC

Tiện ích nfsstat cho phép bạn xem số liệu thống kê của máy chủ RPC và NFS. Các chức năng của lệnh có thể được tìm thấy trong man nfsstat.

showmount: hiển thị thông tin về trạng thái NFS

tiện ích showmount truy vấn 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ề. Phím:

  • --tất cả- một danh sách các máy khách và các điểm gắn kết được hiển thị 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.
  • --thư mục- một danh sách các điểm gắn kết được hiển thị
  • --xuất khẩu- danh sách các hệ thống tệp đã xuất được đưa ra dựa trên niềm tin của nfsd

Khi bạn chạy showmount không có đối số, thông tin về hệ thống được phép mount sẽ được in ra console địa phương các bộ sưu tập. Ví dụ: máy chủ ARCHIV cung cấp cho chúng tôi danh sách các thư mục được xuất có địa chỉ IP của máy chủ được phép gắn các bộ sưu tập được chỉ định:

FILES ~ # showmount --exports archive Xuất danh sách để lưu trữ: /archiv-big 10.0.0.2 /archiv-small 10.0.0.2

Nếu bạn chỉ định tên máy chủ/IP trong đối số, thông tin về máy chủ này sẽ được hiển thị:

ARCHIV ~ # showmount files clnt_create: RPC: Chương trình chưa được đăng ký # thông báo này cho chúng ta biết rằng NFSd không chạy trên máy chủ FILES

importfs: quản lý các thư mục đã xuất

Lệnh này phục vụ các bộ sưu tập, dữ liệu được xuất trong tệp /etc/xuất khẩu, sẽ chính xác hơn nếu viết rằng nó không phục vụ mà đồng bộ hóa với tệp /var/lib/nfs/xtab và xóa những cái không tồn tại khỏi xtab. importfs được thực hiện khi chạy con quỷ nfsd với đối số -r. Tiện ích importfs ở chế độ kernel 2.6 giao tiếp với rpc.mountd imp 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ó đặc điểm, hiển thị danh sách các hệ thống tệp hiện được xuất.

Thuộc tính xuất khẩu:

  • [client:directory-name] - thêm hoặc xóa hệ thống tệp được chỉ định cho ứng dụng khách được chỉ định)
  • -v - hiển thị thêm thông tin
  • -r - tái xuất tất cả các bộ sưu tập (đồng bộ hóa /etc/exports và /var/lib/nfs/xtab)
  • -u - xóa khỏi danh sách đã xuất
  • -a - thêm hoặc xóa tất cả các hệ thống tập tin
  • -o - các hàm đượ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 chức năng của hệ thống tệp đã được gắn)
  • -i - không sử dụng /etc/exports khi thêm, chỉ sử dụng các thuộc tính của dòng lệnh hiện tại
  • -f - đặt lại danh sách các hệ thống đã xuất trong kernel 2.6;

Máy khách NFS

Trước khi truy cập một tập tin trên hệ thống tập tin từ xa, máy khách phải gắn kết nó và nhận từ máy chủ con trỏ tới nó. Gắn kết NFS có thể được thực hiện bằng cách sử dụng lệnh gắn kết hoặc sử dụng một trong những công cụ gắn kết tự động ngày càng phổ biến (amd, autofs, automount, supermount, superpupermount). Quá trình cài đặt được thể hiện hoàn hảo trong hình minh họa ở trên.

TRÊN Khách hàng NFS không cần phải giải phóng bất kỳ con quỷ nào, chức năng khách hàng tạo mô-đun hạt nhân kernel/fs/nfs/nfs.ko, được sử dụng khi gắn hệ thống tập tin từ xa. Các bộ sưu tập đã xuất từ ​​máy chủ có thể được cài đặt trên máy khách theo những cách sau:

  • thủ công bằng lệnh mount
  • tự động khi khởi động, khi gắn hệ thống tệp được nêu trong /etc/fstab
  • tự động sử dụng quỷ autofs

Tôi sẽ không xem xét phương pháp thứ 3 với autofs trong bài viết này do lượng thông tin của nó quá lớn. Có thể sẽ có mô tả riêng ở những bài viết tiếp theo.

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

Một ví dụ về việc sử dụng lệnh mount được trình bày trong bài Chặn Lệnh điều khiển thiết bị. Ở đây tôi sẽ xem một ví dụ về lệnh mount để gắn hệ thống tệp NFS:

FILES ~ # mount -t nfs archive:/archiv-small /archivs/archiv-small FILES ~ # mount -t nfs -o ro archive:/archiv-big /archivs/archiv-big FILES ~ # mount..... .. archivev:/archiv-small trên /archivs/archiv-small loại nfs (rw,addr=10.0.0.6) archivev:/archiv-big trên /archivs/archiv-big loại nfs (ro,addr=10.0.0.6)

Lệnh đầu tiên gắn thư mục /archiv-small đã xuất trên máy chủ lưu trữ 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 (nói cách khác là đọc-ghi).

Mặc dù lệnh gắn kết trong các bản phân phối mới nhất, nó có thể nghĩ về loại hệ thống tệp nào được sử dụng ngay cả khi không chỉ định loại đó; tuy nhiên, tốt hơn là chỉ định tham số -t nfs. Lệnh thứ 2 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 gắn kết không có tính năng cho chúng ta thấy rõ kết quả của việc gắn kết. Ngoài chức năng chỉ đọc (ro), các chức năng khác có thể được chỉ định chức năng chính khi mount NFS:

  • nosuid- Chức năng này cấm thực thi các chương trình setuid từ thư mục được gắn kết.
  • gật đầu(không có thiết bị - không phải thiết bị) - Chức năng này cấm sử dụng ký tự và chặn các tệp đặc biệt làm thiết bị.
  • khóa (nolock)- Cho phép khóa NFS (mặc định). nolock vô hiệu hóa khóa NFS (không chạy lockd) và thuận tiện khi làm việc với các máy chủ cũ không hỗ trợ khóa NFS.
  • mounthost=tên- Tên của máy chủ đang chạy NFS mountless - mountd.
  • mountport=n - Cổng được sử dụng bởi imp gắn kết.
  • cổng=n- cổng dùng để kết nối với máy chủ NFS (mặc định là 2049 nếu rpc.nfsd chưa được đăng ký trên máy chủ RPC). Nếu n=0 (mặc định), thì NFS sẽ gửi yêu cầu tới sơ đồ cổng trên máy chủ để tìm cổng.
  • rsize=n(đọc kích thước khối - đọc kích thước khối) - Số byte được đọc tại một thời điểm từ máy chủ NFS. Tiêu chuẩn - 4096.
  • wsize=n(write block size - write block size) - Số byte được ghi một lần vào máy chủ NFS. Tiêu chuẩn - 4096.
  • tcp hoặc udp- Để mount NFS, 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 lặp lại các thử nghiệm ở chế độ nền để không làm gián đoạ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 lặp lại các bài kiểm tra ở 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 chức năng ảnh hưởng đến bộ nhớ đệm thuộc tính trên các mount NFS

Thuộc tính tệp, được lưu trữ trong inod (bộ mô tả chỉ mục), 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 đôi khi đối với các tệp thông thường và thậm chí ít thường xuyên hơn đối với các thư mục. Nhiều chương trình, chẳng hạn như ls, truy cập các tệp chỉ đọc và không thay đổi thuộc tính hoặc nội dung tệp nhưng gây lãng phí tài nguyên hệ thống cho các hoạt động mạng tốn kém.

Để tránh lãng phí tài nguyên không cần thiết, bạn có thể lưu trữ các thuộc tính này. 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ố sau:

  • 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ù noac làm chậm máy chủ nhưng nó tránh được tình trạng cứng nhắc về 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.
  • 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à Sáu mươi giây)
  • 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) - Một số giây nhỏ mà NFS đợi trước khi cập nhật thuộc tính thư mục (mặc định là 30 giây)
  • 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: Sáu mươi giây)
  • acregmin=n(bộ đệ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) - Một số giây nhỏ 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à Ba giây)
  • hoạt động=n(thời gian chờ bộ đệm thuộc tính - 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.

Chức năng xử lý lỗi NFS

Các chức năng 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) - Tạo các đầu dò gắn NFS không thành công ở 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 kiểm tra cài đặt. Với chức năng này mềm mại- trong thời gian chờ, báo cáo lỗi I/O cho chương trình đã gọi thao tác đó. (không nên sử dụng tùy chọn mềm)
  • nointr (intr)(không bị gián đoạn) - Không cho phép 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. nội tâm- cho phép gián đoạn.
  • truyền lại=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 chức năng cứng/mềm có được chỉ định hay không.
  • thử lại=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 là 10000).
  • thời gian=n(giá trị thời gian chờ) - Số 10 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ờ đến giá trị lớn hơn là Sáu mươi 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.

Tự động gắn NFS khi khởi động (mô tả hệ thống tệp trong /etc/fstab)

Tôi đã đề cập đến mô tả của tệp /etc/fstab trong bài viết tương ứng. Trong ví dụ hiện tại, tôi sẽ xem xét một số ví dụ về cách gắn hệ thống tệp NFS với mô tả về các tùy chọn:

TỆP ~ # cat /etc/fstab | grep nfs archive:/archiv-small /archivs/archiv-small nfs rw,timeo=4,rsize=16384,wsize=16384 Null Null nfs-server:/archiv-big /archivs/archiv-big nfs rw,timeo=50 ,cứng,fg Zero 0

Ví dụ đầu tiên gắn kết hệ thống tệp /archiv-small từ máy chủ lưu trữ đến điểm gắn kết /archivs/archiv-small, loại hệ thống tệp được chỉ định là nfs (luôn phải được chỉ định cho loại này), hệ thống tệp được gắn kết với tùy chọn đọc-ghi (rw).

Máy chủ lưu trữ được kết nối qua kênh cục bộ nhanh, do đó, để tăng hiệu suất, tham số timeo đã được giảm và các giá trị rsize và wsize đã tăng lên đáng kể. Các trường cho chương trình kết xuất và fsck được đặt thành 0 để các chương trình này không sử dụng hệ thống tệp gắn trên NFS.

Ví dụ thứ 2 gắn hệ thống tệp /archiv-big từ máy chủ nfs-server. Bởi vì Chúng tôi được kết nối với máy chủ nfs-server thông qua kết nối chậm, tham số timeo được tăng lên 5 giây (50 phần 10 giây) và tham số cứng cũng được đặt cứng để NFS tiếp tục kết nối lại hệ thống tệp sau một thời gian dài. hết thời gian chờ, tham số fg cũng được đặt để khi hệ thống khởi động và máy chủ nfs-server không khả dụng, nó không bị treo.

Trước khi lưu cấu hình trong /etc/fstab, hãy nhớ thử gắn kết thủ công và đảm bảo rằng mọi thứ đều hoạt động!!!

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ố điều, đặ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, tốt hơn 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.

Ngoài ra, một trong những cách dễ nhất để tăng hiệu suất NFS là tăng số lượng byte được truyền tại một thời điểm. Kích thước của Bốn nghìn chín mươi sáu byte là rất nhỏ đối với các kết nối nhanh hiện đại, việc tăng giá trị này lên Tám nghìn 100 chín mươi hai trở lên có thể được tìm thấy bằng thực nghiệm để tìm ra tốc độ tốt nhất.

Ngoài ra, người ta không nên bỏ qua chức năng 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 hàm timeo; nếu không nhận được phản hồi trong thời gian này thì quá trình truyền lặp lại sẽ được thực hiện.

Nhưng 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 khiến công việc bị chậm lại. Theo mặc định, thời gian là 0,7 giây (700 mili giây). sau khi không có phản hồi trong Bảy trăm 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, việc tăng thời gian sẽ tiếp tục đạt giá trị cao hơn là Sáu mươi giây. Tiếp theo, tùy thuộc vào thông số cứng/mềm, một số hành động sẽ xảy ra (xem ở trên).

Bạn có thể chọn thời gian tốt nhất cho một giá trị cụ thể của gói được truyền (giá trị rsize/wsize) bằng lệnh ping:

FILES ~ # ping -s 30 hai nghìn bảy trăm sáu mươi tám kho lưu trữ PING archive.DOMAIN.local (10.0.0.6) 32768(32796) byte dữ liệu. 30 hai nghìn bảy trăm 70 6 byte từ archive.domain.local (10.0.0.6): icmp_req=1 ttl=64 time=0,931 ms 30 hai nghìn bảy trăm 70 6 byte từ archivev.domain.local (10.0.0.6): icmp_req= 2 ttl=64 time=0,958 ms 30 hai nghìn bảy trăm 70 6 byte từ archive.domain.local (10.0.0.6): icmp_req=3 ttl=64 time=1,03 ms 30 hai nghìn bảy trăm 70 6 byte từ archivev .domain.local (10.0.0.6): icmp_req=4 ttl=64 time=1,00 ms 30 hai nghìn bảy trăm 70 6 byte từ archivev.domain.local (10.0.0.6): icmp_req=5 ttl=64 time=1,08 ms ^C --- thống kê ping archive.DOMAIN.local --- 5 gói được truyền, 5 gói đã nhận, mất gói 0%, thời gian 4006 mili giây rtt min/avg/max/mdev = 0,931/1,002/1,083/0,061 ms

Như bạn có thể thấy, khi gửi một gói có kích thước 30 hai nghìn bảy trăm sáu mươi tám (32Kb), thời gian di chuyển của nó từ máy khách đến máy chủ và quay trở lại là khoảng Một mili giây. Nếu thời gian này vượt quá hai trăm mili giây, thì bạn nên nghĩ đến việc tăng giá trị thời gian để nó vượt quá giá trị trao đổi từ ba đến bốn lần. Theo đó, tốt hơn hết bạn nên thực hiện kiểm tra này khi tải mạng nặng

Khởi chạy NFS và thiết lập Tường lửa

Ghi chú được sao chép từ blog http://bog.pp.ru/work/NFS.html, cảm ơn rất nhiều!!!

Chạy máy chủ NFS, gắn kết, chặn, hạn ngạch và trạng thái với các cổng "chính xác" (đối với tường lửa)

  • tốt hơn hết là trước tiên hãy ngắt kết nối tất cả tài nguyên trên máy khách
  • dừng và vô hiệu hóa rpcidmapd khởi động nếu NFSv4 không được lên kế hoạch: chkconfig --level Ba trăm 40 5 rpcidmapd tắt dịch vụ rpcidmapd stop
  • nếu cần, hãy cho phép các dịch vụ portmap, nfs và nfslock khởi động: chkconfig --levels Ba trăm 40 5 portmap/rpcbind trên chkconfig --levels Ba trăm 40 5 nfs trên chkconfig --levels Ba trăm 40 5 nfslock bật
  • nếu cần, hãy dừng các dịch vụ nfslock và nfs, khởi động portmap/rpcbind, dỡ bỏ các mô-đun dịch vụ nfslock dừng dịch vụ nfs dừng dịch vụ portmap start # dịch vụ rpcbind bắt đầu umount /proc/fs/nfsd dịch vụ rpcidmapd dừng rmmod nfsd dịch vụ autofs dừng # ở đâu đó sau đó phải được chạy rmmod nfs rmmod nfs_acl rmmod lockd
  • mở cổng trong iptables
    • cho RPC: UDP/111, TCP/111
    • cho NFS: UDP/2049, TCP/2049
    • cho rpc.statd: UDP/4000, TCP/4000
    • cho khóa: UDP/4001, TCP/4001
    • cho mountd: UDP/4002, TCP/4002
    • cho rpc.rquota: UDP/4003, TCP/4003
  • đối với máy chủ rpc.nfsd, hãy thêm dòng RPCNFSDARGS="--port 2049" vào /etc/sysconfig/nfs
  • đối với máy chủ gắn kết, hãy thêm dòng MOUNTD_PORT=4002 vào /etc/sysconfig/nfs
  • đối với hàm rpc.rquota dành cho các phiên bản mới, bạn cần thêm dòng RQUOTAD_PORT=4003 vào /etc/sysconfig/nfs
  • đối với hàm rpc.rquota, cần có các phiên bản cũ hơn (xét cho cùng, bạn phải có gói hạn ngạch 3.08 hoặc mới hơn) thêm vào /etc/services rquotad 4003/tcp rquotad 4003/udp
  • sẽ kiểm tra tính đầy đủ của /etc/exports
  • chạy các dịch vụ rpc.nfsd, mountd và rpc.rquota (rpcsvcgssd và rpc.idmapd được khởi chạy cùng lúc, nếu bạn nhớ xóa chúng) service nfsd start hoặc trong các phiên bản mới service nfs start
  • đối với máy chủ chặn cho các hệ thống mới, hãy thêm dòng LOCKD_TCPPORT=4001 LOCKD_UDPPORT=4001 vào /etc/sysconfig/nfs
  • đối với máy chủ khóa dành cho các hệ thống cũ hơn, hãy thêm trực tiếp vào /etc/modprobe[.conf]: options lockd nlm_udpport=4001 nlm_tcpport=4001
  • liên kết máy chủ trạng thái rpc.statd với cổng 4 nghìn (đối với các hệ thống cũ hơn, hãy chạy rpc.statd bằng phím -p 4000 trong /etc/init.d/nfslock) STATD_PORT=4000
  • bắt đầu dịch vụ lockd và rpc.statd dịch vụ nfslock bắt đầu
  • đảm bảo rằng tất cả các cổng được liên kết bình thường bằng cách sử dụng "lsof -i -n -P" và "netstat -a -n" (một số cổng được sử dụng bởi các mô-đun hạt nhân mà lsof không nhìn thấy)
  • nếu trước khi "xây dựng lại" máy chủ đã được khách hàng sử dụng và chúng không thể được kết nối, thì bạn sẽ phải khởi động lại dịch vụ gắn kết tự động trên máy khách (am-utils, autofs)

Ví dụ cấu hình máy chủ và máy khách NFS

Cấu hình máy chủ

Nếu bạn muốn đặt thư mục được phân vùng NFS của mình ở chế độ công khai và có thể ghi được, bạn có thể sử dụng tùy chọn all_squash kết hợp với các tùy chọn anonuid và anongid. Ví dụ: để đặt quyền cho người dùng "không ai" trong nhóm "không ai", bạn có thể làm như sau:

ARCHIV ~ # cat /etc/exports # Quyền truy cập đọc và ghi cho máy khách trên 192.168.0.100, với quyền truy cập rw cho người dùng Ninety-nine với gid Ninety-nine /files 192.168.0.100(rw,sync,all_squash,anonuid=99,anongid = 99)) # Quyền truy cập đọc và ghi cho máy khách trên 192.168.0.100, với quyền truy cập rw cho người dùng Chín mươi chín với gid Chín mươi chín /files 192.168.0.100(rw,sync,all_squash,anonuid=99,anongid=99))

Điều này cũng có nghĩa là nếu bạn muốn cho phép truy cập vào một thư mục được chỉ định, thì không ai.không ai phải là chủ sở hữu của thư mục dùng chung:

# chown -R none.nobody /files

Cấu hình máy khách

Trên máy khách, bạn cần mount thư mục từ xa một cách thuận tiện, ví dụ bằng lệnh mount:

FILES ~ # mount -t nfs archive:/files/archivs/files

Bản tóm tắt

Phù... Bài viết đã kết thúc. Hiện tại chúng tôi đã nghiên cứu Hệ thống tệp mạng là gì và ăn nó như thế nào, ở bài viết tiếp theo mình sẽ thử làm HOWTO với xác thực Kerberos. Tôi hy vọng tài liệu này dễ hiểu và cần thiết.

Tôi sẽ rất vui khi thấy những bổ sung và nhận xét của bạn!

NFS HOWTO, nfs.sourceforge, anh bạn nfs? man mount, man xuất khẩu

RFC Một nghìn chín mươi bốn - NFSv1, v2
RFC Một nghìn tám trăm mười ba - NFSv3
RFC Ba nghìn 500 30 - NFSv4
RFC 5 nghìn 600 sáu mươi mốt - NFSv4.1
NFS HOWTO
nfs.sourceforge.net
người đàn ông gắn kết
xuất khẩu đàn ông

Giải pháp thuận tiện để truy cập hệ thống tệp phân tán

Một hệ thống tập tin là một điều cần thiết. Chúng tôi làm việc trên các máy tính có khả năng truy cập vào máy in, máy ảnh, cơ sở dữ liệu, cảm biến từ xa, kính thiên văn, trình biên dịch và điện thoại di động. Những thiết bị này có rất ít điểm chung - đặc biệt, nhiều thiết bị trong số chúng đã trở thành hiện thực sau khi Internet trở nên phổ biến (ví dụ: máy ảnh điện tử và thiết bị di động hoạt động như máy tính nhỏ). Tuy nhiên, tất cả họ đều cần một hệ thống tệp để lưu trữ và truy cập thông tin một cách an toàn.

Nói chung, chúng ta không quan tâm đến cách dữ liệu, ứng dụng sử dụng dữ liệu đó và giao diện hiển thị dữ liệu đó được lưu trữ trong máy tính như thế nào. Hầu hết người dùng muốn xem (và đúng như vậy) hệ thống tệp như một bức tường ngăn cách chúng với kim loại trần lưu trữ các bit và byte. Do đó, ngăn xếp giao thức kết nối các hệ thống tệp có xu hướng vẫn là hộp đen đối với hầu hết người dùng và thực tế là cả các lập trình viên. Tuy nhiên, cuối cùng, việc tổ chức tương tác mạng của tất cả các thiết bị này lại cho phép trao đổi dữ liệu giữa các hệ thống tệp.

Hệ thống tập tin mạng và các nghi thức thiêng liêng khác

Theo nhiều cách, trao đổi dữ liệu không gì khác hơn là sao chép thông tin qua khoảng cách xa. Các giao thức mạng không phải là phương tiện duy nhất có thể thực hiện được việc trao đổi dữ liệu phổ quát. Suy cho cùng, mọi hệ thống máy tính đều phải chuyển đổi các datagram thành thứ gì đó mà hệ điều hành ở đầu bên kia có thể hiểu được. TCP là một giao thức truyền tải rất hiệu quả, nhưng nó không được tối ưu hóa để truy cập tệp nhanh hoặc để điều khiển phần mềm ứng dụng từ xa.

Máy tính phân tán và mạng

Các giao thức mạng truyền thống có rất ít khả năng tổ chức các tính toán được phân bổ giữa các máy tính và đặc biệt là giữa các mạng. Chỉ những lập trình viên liều lĩnh mới dựa vào các giao thức truyền dữ liệu và cáp quang để kích hoạt tính toán song song. Thông thường, chúng tôi dựa vào mô hình nối tiếp, trong đó, khi kết nối được thiết lập, các giao thức lớp liên kết bắt đầu hoạt động, thực hiện quy trình xin chào khá phức tạp giữa các card mạng. Hệ thống tệp phân tán và tính toán song song không còn phụ thuộc vào IP hoặc Ethernet. Hiện tại, chúng ta có thể đơn giản bỏ qua chúng khi nói về hiệu suất. Tuy nhiên, vấn đề bảo vệ lại là một vấn đề khác.

Một phần của câu đố là cách truy cập các tập tin trên hệ thống máy tính. Ngày nay, đối với một hệ thống truy cập các tệp, việc các tệp cần thiết có sẵn trên một máy tính hay chúng nằm trên một số máy tính vì một lý do nào đó là điều không quan trọng. Hiện tại, ngữ nghĩa hệ thống tệp và cấu trúc dữ liệu hệ thống tệp là hai chủ đề rất khác nhau. Ngữ nghĩa của hệ thống tệp Plan 9 hoặc hệ thống tệp phân tán kiểu AFS (Hệ thống tệp Andrew) ẩn cách tổ chức tệp hoặc cách hệ thống tệp được ánh xạ tới phần cứng và mạng. NFS không nhất thiết phải ẩn cách các tệp và thư mục được lưu trữ trên các hệ thống tệp từ xa, nhưng nó cũng không tiết lộ cách lưu trữ các hệ thống tệp, thư mục và tệp thực tế bằng phần cứng.

NFS: Giải quyết vấn đề UNIX

Tuy nhiên, việc truy cập một hệ thống tệp phân tán chỉ cần một vài lệnh để cho phép người dùng gắn một thư mục nằm trên một máy tính khác trên mạng. Sun Microsystems đã gặp phải vấn đề này vài năm trước khi họ bắt đầu phân phối một thứ gọi là Cuộc gọi thủ tục từ xa(RPC) và NFS.

Vấn đề chính mà Sun đang cố gắng giải quyết là cách kết nối nhiều máy tính UNIX để tạo ra một môi trường làm việc phân tán duy nhất mà không cần phải viết lại ngữ nghĩa của hệ thống tệp UNIX và thêm quá nhiều cấu trúc dữ liệu dành riêng cho các hệ thống tệp phân tán - tính toàn vẹn của mỗi hệ thống phải được bảo toàn, đồng thời cho phép người dùng làm việc với danh mục trên một máy tính khác mà không gây ra sự chậm trễ hoặc hạn chế không mong muốn trong quy trình làm việc của họ.

Tất nhiên, NFS không chỉ cung cấp quyền truy cập vào các tệp văn bản. Bạn cũng có thể phân phối các ứng dụng "đang chạy" qua NFS. Các quy trình bảo mật được sử dụng để bảo vệ mạng khỏi sự can thiệp độc hại của các tệp thực thi. Nhưng chính xác thì điều này xảy ra như thế nào?

NFS là RPC

NFS được định nghĩa theo truyền thống là một ứng dụng RPC yêu cầu TCP cho máy chủ NFS và TCP hoặc giao thức thân thiện với mạng khác cho máy khách NFS. Lực lượng đặc nhiệm kỹ thuật Internet (IETF) đã xuất bản Yêu cầu nhận xét (RFC) cho RPC trong RFC 1832. Một tiêu chuẩn quan trọng khác đối với chức năng triển khai NFS mô tả các định dạng dữ liệu được NFS sử dụng; nó được xuất bản trong RFC 1831 dưới dạng tài liệu "Trình bày dữ liệu bên ngoài" (XDR).

Các RFC khác xử lý các thuật toán bảo mật và mã hóa được sử dụng để trao đổi thông tin xác thực trong các phiên NFS, nhưng trước tiên chúng tôi sẽ đề cập đến các cơ chế cơ bản. Một trong những giao thức mà chúng tôi quan tâm là Giao thức gắn kết, được mô tả trong Phụ lục 1 của RFC 1813.

RFC này mô tả những giao thức nào cho phép NFS hoạt động, nhưng nó không mô tả cách thức hoạt động của NFS trong Hiện nay. Bạn đã học được một điều quan trọng, cụ thể là các giao thức NFS được ghi lại dưới dạng tiêu chuẩn IETF. Sau khi phiên bản mới nhất của NFS bị kẹt ở phiên bản 3, các giao thức RPC đã không phát triển vượt quá giai đoạn thông tin RFC và phần lớn được coi là nằm ngoài lợi ích của nhóm làm việc kỹ thuật khổng lồ (được cho là) ​​của Sun Microsystems và các phiên bản độc quyền của UNIX. Từ năm 1985, Sun đã phát hành một số phiên bản NFS, phiên bản này có trước hầu hết các hệ thống tệp hiện đại vài năm. Sun Microsystems đã chuyển quyền kiểm soát NFS cho IETF vào năm 1998 và hầu hết công việc trên NSF phiên bản 4 (NFSv4) được thực hiện dưới sự bảo trợ của IETF.

Nghĩa là, khi bạn làm việc với RPC và NFS ngày nay, bạn đang làm việc với một phiên bản phản ánh lợi ích của các công ty và nhóm bên ngoài Sun. Tuy nhiên, nhiều kỹ sư của Sun vẫn quan tâm sâu sắc đến việc phát triển NFS.

NFS phiên bản 3

NFS hiện thân là phiên bản 3 (NFSv3) không giữ lại trạng thái của nó (không có trạng thái), nhưng NFSv4 thì có. Biểu hiện cơ bản này hầu như không làm ai ngạc nhiên ngày nay, mặc dù thế giới TCP/IP mà NFS được xây dựng trên đó phần lớn là không trạng thái - một thực tế giúp các công ty phần mềm bảo mật và phân tích lưu lượng cảm thấy khá tốt.

Giao thức NFSv3 phải dựa vào một số giao thức bổ sung để gắn kết các thư mục trên các máy tính từ xa một cách trong suốt, để không phụ thuộc vào cơ chế hệ thống tệp được sử dụng trên chúng. NFS không phải lúc nào cũng thành công trong việc này. Một ví dụ điển hình là giao thức Mount gọi ID tệp ban đầu, trong khi giao thức Network Lock Manager đảm nhiệm việc khóa tệp. Cả hai hoạt động đều cần trạng thái hiện tại mà NFSv3 không cung cấp. Do đó, có những tương tác phức tạp giữa các lớp giao thức không phản ánh các cơ chế luồng dữ liệu tương tự. Ngoài ra, khi bạn thêm một thực tế là việc tạo tệp và thư mục trong Microsoft® Windows® được thực hiện hoàn toàn khác so với trong UNIX, tình hình càng trở nên phức tạp hơn.

Giao thức NFSv3 được yêu cầu sử dụng các cổng để cung cấp một số giao thức hỗ trợ của nó; điều này tạo ra một bức tranh khá phức tạp về các cổng, cấp độ giao thức và các vấn đề bảo mật đi kèm với tất cả. Ngày nay, mô hình hoạt động này đã bị loại bỏ và tất cả các hoạt động trước đây được thực hiện bằng cách triển khai giao thức phụ trợ thông qua các cổng riêng lẻ đều được quản lý bởi giao thức NFSv4 thông qua một cổng phổ biến duy nhất.

Giao thức NFSv3 cũng sẵn sàng hoạt động với các hệ thống tệp nhận biết Unicode, một lợi thế vẫn chỉ mang tính lý thuyết cho đến cuối những năm 1990. Nó rất phù hợp với ngữ nghĩa của hệ thống tệp UNIX và là lý do tạo ra các triển khai hệ thống tệp cạnh tranh như AFS và Samba. Không có gì đáng ngạc nhiên khi khả năng hỗ trợ của Windows rất kém, nhưng các máy chủ tệp Samba đã cung cấp khả năng chia sẻ tệp cho các hệ thống UNIX và Windows.

NFS phiên bản 4

Giao thức NFSv4, như chúng tôi đã lưu ý, là một giao thức có trạng thái. Một số thay đổi căn bản đã làm cho hành vi này có thể thực hiện được. Chúng tôi đã đề cập rằng các giao thức phụ trợ phải được gọi vì các quy trình cấp người dùng đã bị loại bỏ. Thay vào đó, tất cả các thao tác mở tệp và khá nhiều lệnh gọi RPC đã được triển khai dưới dạng các thao tác hệ thống tệp cấp hạt nhân.

Tất cả các phiên bản NFS đã xác định từng đơn vị công việc theo hoạt động của máy khách và máy chủ RPC. Mỗi yêu cầu NFSv3 yêu cầu một số lượng khá đáng kể các lệnh gọi RPC và các lệnh gọi cổng mở để tạo ra kết quả. Phiên bản 4 đã đơn giản hóa điều này bằng cách giới thiệu khái niệm về cái gọi là hỗn hợp(phức hợp) hoạt động, bao gồm một số lượng lớn các hoạt động trên các đối tượng hệ thống tệp. Tất nhiên, tác động trực tiếp là có ít cuộc gọi RPC hơn đáng kể và ít dữ liệu cần truyền qua mạng hơn, mặc dù về cơ bản mỗi cuộc gọi RPC mang nhiều dữ liệu hơn, thực hiện nhiều công việc hơn đáng kể. Người ta ước tính rằng các cuộc gọi RPC trong NFSv3 yêu cầu số lượng tương tác máy khách-máy chủ gấp năm lần so với các quy trình RPC phức hợp.

RPC thực sự không còn có tầm quan trọng đó nữa và về cơ bản đóng vai trò như một trình bao bọc cho một số hoạt động được gói gọn trong ngăn xếp NFSv4. Thay đổi này cũng làm cho ngăn xếp giao thức ít phụ thuộc hơn nhiều vào ngữ nghĩa của hệ thống tệp được sử dụng. Nhưng điều này không có nghĩa là các hoạt động hệ thống tệp của các hệ điều hành khác bị bỏ qua: ví dụ: việc chia sẻ tài nguyên Windows yêu cầu tính bền vững trạng thái giữa các lệnh gọi để mở một tài nguyên. Tính bền vững trạng thái không chỉ giúp việc phân tích lưu lượng truy cập dễ dàng hơn mà khi được triển khai ở cấp độ ngữ nghĩa của hệ thống tệp, nó giúp kiểm soát các hoạt động của hệ thống tệp dễ dàng hơn nhiều. Lệnh gọi mở tài nguyên trạng thái cho phép máy khách lưu vào bộ nhớ đệm dữ liệu và trạng thái của tệp - điều này lẽ ra sẽ xảy ra trên máy chủ. Trong thực tế (nơi các máy khách Windows có mặt ở khắp mọi nơi), việc làm cho máy chủ NFS hoạt động minh bạch và thống nhất với các tài nguyên được chia sẻ của Windows rất đáng để bạn dành thời gian thiết lập cấu hình NFS.

Sử dụng NFS

Việc cài đặt NFS nhìn chung cũng tương tự như cài đặt Samba. Về phía máy chủ, bạn xác định hệ thống tập tin hoặc thư mục để xuất hoặc chia sẻ; phía khách hàng gắn kết các thư mục này. Khi máy khách từ xa gắn thư mục NFS, thư mục đó sẽ có thể truy cập được giống như bất kỳ thư mục nào khác trên hệ thống tệp cục bộ. Thiết lập NFS trên máy chủ là một quá trình đơn giản. Tối thiểu, bạn nên tạo hoặc chỉnh sửa tệp /etc/exports và khởi động trình nền NFS. Để định cấu hình dịch vụ NFS an toàn hơn, bạn cũng nên chỉnh sửa các tệp /etc/hosts.allow và /etc/hosts.deny. Máy khách NFS chỉ yêu cầu lệnh mount. Thông tin và tùy chọn bổ sung được mô tả trong tài liệu trực tuyến Linux® (trang hướng dẫn).

máy chủ NFS

Các mục trong tệp /etc/exports có định dạng rõ ràng. Để chia sẻ hệ thống tệp, hãy chỉnh sửa tệp /etc/exports và mô tả hệ thống tệp (có tham số) theo định dạng chung sau:

thư mục (hoặc hệ thống tệp) client1 (option1, option2) client2 (option1, option2)

Thông số chung

Có một số tùy chọn chung có sẵn để định cấu hình triển khai NFS của bạn. Bao gồm các:

  • chắc chắn: Tùy chọn này (mặc định) sử dụng cổng TCP/IP có sẵn nhỏ hơn 1024 cho kết nối NFS. Việc chỉ định không an toàn sẽ vô hiệu hóa điều này.
  • ồ: Cài đặt này cho phép máy khách NFS truy cập đọc/ghi. Quyền truy cập mặc định là chỉ đọc.
  • không đồng bộ: Tùy chọn này có thể cải thiện hiệu suất nhưng cũng có thể gây mất dữ liệu nếu bạn khởi động lại máy chủ NFS mà không dừng daemon NFS trước. Cài đặt mặc định là đồng bộ hóa.
  • không_wdelay: Tùy chọn này vô hiệu hóa độ trễ ghi. Nếu chế độ không đồng bộ được đặt, NFS sẽ bỏ qua cài đặt này.
  • không ẩn: Nếu bạn gắn một thư mục lên trên một thư mục khác, thư mục cũ thường bị ẩn hoặc trống. Để ngăn chặn hành vi này, hãy bật tham số ẩn.
  • no_subtree_check: Tùy chọn này vô hiệu hóa tính năng giám sát thư mục con được thực hiện đối với một số kiểm tra bảo mật mà bạn có thể không muốn bỏ qua. Cài đặt mặc định là cho phép kiểm soát thư mục con.
  • không_auth_nlm: Tham số này, khi được đặt thành insecure_locks, sẽ hướng dẫn trình nền NFS không thực hiện xác thực trong các yêu cầu khóa. Cài đặt mặc định là auth_nlm hoặc safe_locks.
  • mp (điểm gắn kết=đường dẫn): Khi tùy chọn này được khai báo rõ ràng, NSF yêu cầu gắn kết thư mục đã xuất.
  • fsid=num: Tùy chọn này thường được sử dụng khi thiết lập hệ thống khôi phục sau lỗi NFS. Nếu bạn muốn triển khai khôi phục sự cố cho NFS, vui lòng tham khảo tài liệu NFS.

Ánh xạ người dùng

Thông qua ánh xạ người dùng NFS, bạn có thể xác định người dùng giả hoặc người dùng thực và nhóm với người dùng đang chạy ổ đĩa NFS. Người dùng NFS có các quyền của người dùng hoặc nhóm mà ánh xạ cho phép. Việc sử dụng một người dùng và nhóm duy nhất (chung) cho các khối NFS sẽ mang lại mức độ bảo mật và tính linh hoạt mà không cần nỗ lực quản trị đáng kể.

Khi sử dụng các tệp trên hệ thống tệp gắn trên NFS, quyền truy cập của người dùng thường bị hạn chế. Điều này có nghĩa là người dùng truy cập các tệp với tư cách là người dùng ẩn danh có quyền truy cập chỉ đọc vào các tệp đó. Hành vi này đặc biệt quan trọng đối với người dùng root. Tuy nhiên, có những trường hợp bạn muốn người dùng truy cập các tệp trên hệ thống từ xa bằng quyền root hoặc một số người dùng cụ thể khác. NFS cho phép bạn chỉ định một người dùng (theo số nhận dạng người dùng (UID) và số nhận dạng nhóm (GID)) để truy cập các tệp từ xa và bạn có thể vô hiệu hóa hành vi "ngăn chặn" mặc định thông thường.

Các tùy chọn hiển thị của người dùng bao gồm:

  • root_squash: Tùy chọn này ngăn người dùng root truy cập vào ổ đĩa NFS được gắn.
  • no_root_squash: Tùy chọn này cho phép người dùng root truy cập vào ổ đĩa NFS được gắn.
  • all_squash: Tùy chọn này, hữu ích cho các khối NFS công khai, loại bỏ tất cả UID và GID và chỉ sử dụng tài khoản người dùng ẩn danh. Cài đặt mặc định là no_all_squash.
  • anonuid và anongid: Các cài đặt này thay đổi UID và GID của người dùng ẩn danh thành tài khoản được chỉ định.

Liệt kê 1 cho thấy các ví dụ về các mục nhập /etc/exports.

Liệt kê 1. Ví dụ về các mục /etc/exports
/opt/files 192.168.0.* /opt/files 192.168.0.120 /opt/files 192.168.0.125(rw, all_squash, anonuid=210, anongid=100) /opt/files *(ro, insecure, all_squash)

Mục đầu tiên xuất thư mục /opt/files cho tất cả các máy chủ trên mạng 192.168.0. Mục sau xuất /opt/files cho một máy chủ: 192.168.0.120. Mục thứ ba chỉ định máy chủ 192.168.0.125 và cấp quyền truy cập đọc/ghi vào các tệp có quyền người dùng có người dùng id=210 và nhóm id=100 . Mục cuối cùng được sử dụng cho thư mục chung và cho phép truy cập chỉ đọc và chỉ dưới tài khoản người dùng ẩn danh.

Máy khách NFS

Cảnh báo

Khi bạn sử dụng NFS để gắn hệ thống tệp từ xa, nó cũng sẽ là một phần của mọi hoạt động sao lưu hệ thống dùng chung mà bạn thực hiện trên máy khách. Hành vi này có thể gây ra những kết quả có hại nếu bạn không loại trừ các thư mục được gắn khi tạo bản sao lưu.

Để sử dụng NFS làm máy khách, rpc.statd và portmap phải chạy trên máy khách. Bạn có thể chạy ps -ef để kiểm tra sự hiện diện của hai daemon này. Nếu chúng hoạt động (nếu cần), bạn có thể gắn thư mục đã xuất của máy chủ bằng lệnh chung sau:

mount server: điểm gắn kết cục bộ của thư mục

Nói chung, bạn nên chạy bằng root khi gắn hệ thống tập tin. Trên máy tính từ xa, bạn có thể sử dụng lệnh sau (giả sử máy chủ NFS có địa chỉ IP là 192.168.0.100):

gắn kết 192.168.0.100:/opt/files/mnt

Bản phân phối hệ thống của bạn có thể yêu cầu bạn chỉ định loại hệ thống tệp khi gắn nó. Nếu vậy, hãy sử dụng lệnh:

mount -t nfs 192.168.0.100:/opt/files /mnt

Thư mục từ xa sẽ được gắn kết mà không gặp vấn đề gì nếu bạn đã cấu hình máy chủ đúng cách. Bây giờ hãy chạy lệnh cd để thay đổi thư mục /mnt, sau đó chạy lệnh ls để xem các tệp. Để gắn kết này vĩnh viễn, bạn phải chỉnh sửa tệp /etc/fstab và tạo một mục tương tự như sau:

192.168.0.100:/opt/files /mnt nfs rw 0 0

Ghi chú:Để biết thêm thông tin về các mục /etc/fstab, hãy xem trợ giúp trực tuyến của fstab.

Chỉ trích NFS

Sự phê bình dẫn đến sự cải thiện

Những lời chỉ trích liên quan đến tính bảo mật của NFS là nguyên nhân dẫn đến nhiều cải tiến trong NSFv4. Những người tạo ra phiên bản mới đã thực hiện các biện pháp thực tế để tăng cường tính bảo mật cho các tương tác giữa máy khách và máy chủ. Trên thực tế, họ đã quyết định triển khai một mô hình hệ thống an ninh hoàn toàn mới.

Để hiểu mô hình hệ thống bảo mật, bạn nên làm quen với giao diện lập trình ứng dụng Dịch vụ bảo mật chung (GSS-API) phiên bản 2, bản sửa đổi 1. GSS-API được mô tả đầy đủ trong RFC 2743, thật không may, đây lại là một trong những tài liệu RFC khó hiểu nhất.

Từ kinh nghiệm của chúng tôi với NFSv4, chúng tôi biết rằng việc tạo một hệ thống tệp mạng độc lập với hệ điều hành không phải là điều dễ dàng. Nhưng việc làm cho tất cả các lĩnh vực của hệ thống bảo mật trở nên độc lập với hệ điều hành và các giao thức mạng thậm chí còn khó khăn hơn. Chúng ta cần cả hai, vì NFS phải có khả năng xử lý một số lượng khá lớn các hoạt động của người dùng và làm như vậy mà không cần xử lý các chi tiết cụ thể về giao tiếp giao thức mạng.

Các kết nối giữa máy khách và máy chủ NFS được bảo vệ bằng hệ thống bảo mật được gọi là (khá hời hợt) mạnh RPC. NFSv4 sử dụng tiêu chuẩn Cuộc gọi thủ tục từ xa điện toán mạng mở (ONCRPC) được xác định trong RFC 1831. Hệ thống bảo mật phải được tăng cường, do đó, thay vì xác thực đơn giản (được gọi là AUTH_SYS) là một phần bắt buộc của giao thức NFSv4, một loại hệ thống bảo mật dựa trên GSS-API được gọi là RPCSEC_GSS. Các cơ chế bảo mật quan trọng nhất có sẵn trong NFSv4 bao gồm Kerberos phiên bản 5 và LIPKEY.

Trong khi Kerberos có những hạn chế khi sử dụng qua Internet, LIPKEY có lợi thế lớn là hoạt động giống như Lớp cổng bảo mật (SSL), nó nhắc người dùng nhập tên người dùng và mật khẩu của họ đồng thời tránh sự phụ thuộc của TCP vào SSL, một sự phụ thuộc mà NFSv4 không chia sẻ. Bạn có thể định cấu hình NFS để triển khai các biến thể bảo mật nếu không cần RPCSEC_GSS. Các phiên bản trước của NFS không có khả năng này và do đó không thể cung cấp khả năng bảo mật mạnh mẽ, tính toàn vẹn dữ liệu, yêu cầu xác thực hoặc loại mã hóa.

Giao thức NFSv3 đã nhận được nhiều lời chỉ trích về bảo mật. Nếu máy chủ NFSv3 chạy trên TCP thì hoàn toàn có thể chạy mạng NFSv3 qua Internet. Thật không may, nó cũng yêu cầu mở nhiều cổng, dẫn đến một số lỗ hổng bảo mật được công bố rộng rãi. Bằng cách đặt cổng 2049 bắt buộc đối với NFS, người ta có thể sử dụng NFSv4 với tường lửa mà không cần phải chú ý quá nhiều đến cổng mà các giao thức khác, chẳng hạn như giao thức Mount, đang nghe. Do đó, việc loại bỏ giao thức Mount có một số tác động tích cực:

  • Yêu cầu cơ chế xác thực mạnh mẽ: NFSv4 bắt buộc phải có cơ chế xác thực mạnh mẽ. Các biến thể của Kerberos khá phổ biến. Cơ chế khóa công khai cơ sở hạ tầng thấp hơn (LIPKEY) cũng phải được hỗ trợ. NFSv3 chưa bao giờ hỗ trợ bất cứ điều gì ngoài mã hóa UNIX tiêu chuẩn để xác thực truy cập - điều này tạo ra các vấn đề bảo mật lớn trong các mạng lớn.
  • Lược đồ danh sách kiểm soát truy cập (ACL) kiểu Microsoft Windows NT bắt buộc: Mặc dù NFSv3 cho phép mã hóa mạnh để xác thực nhưng nó không sử dụng sơ đồ truy cập ACL kiểu Windows NT. ACL kiểu Giao diện Hệ điều hành Di động (POSIX) đôi khi được triển khai nhưng chưa bao giờ được chấp nhận rộng rãi. NFSv4 bắt buộc phải có các lược đồ ACL kiểu Windows NT.
  • Cơ chế hợp đồng và phong cách xác thực: NFSv4 đã giới thiệu khả năng đàm phán các cơ chế và kiểu xác thực. Trong NSFv3, không thể làm gì hơn ngoài việc xác định thủ công kiểu mã hóa nào sẽ sử dụng. Sau đó, quản trị viên hệ thống sẽ thương lượng các giao thức mã hóa và bảo mật.

NFS có còn vô địch không?

NFSv4 thay thế NFSv3 trên hầu hết các hệ thống UNIX và Linux. Là một hệ thống tệp mạng, NSFv4 có ít đối thủ cạnh tranh. Một đối thủ cạnh tranh khả thi sẽ là Common Internet File System (CIFS)/Server Message Block (SMB), vì nó có mặt trong tất cả các phiên bản của Windows và (hiện tại) Linux. AFS chưa bao giờ có nhiều ảnh hưởng thương mại; nó nhấn mạnh các yếu tố của hệ thống tệp phân tán tạo điều kiện thuận lợi cho việc di chuyển và sao chép dữ liệu.

Các phiên bản NFS sẵn sàng cho Linux được phát hành sau khi kernel đạt phiên bản 2.2, nhưng một trong những lỗi phổ biến hơn của các phiên bản kernel Linux là Linux áp dụng NFSv3 khá muộn. Trên thực tế, phải rất lâu nữa Linux mới hỗ trợ đầy đủ NSFv3. Với sự ra đời của NSFv4, nhược điểm này nhanh chóng được loại bỏ và hỗ trợ đầy đủ cho NSFv4 không chỉ được triển khai trong Solaris, AIX và FreeBSD.

NFS hiện được coi là một công nghệ trưởng thành, có ưu điểm là an toàn và tiện lợi - hầu hết người dùng đều thấy thuận tiện khi sử dụng một lần đăng nhập an toàn duy nhất để truy cập mạng và sử dụng các khả năng của nó, ngay cả khi các tệp và ứng dụng được đặt trên các hệ thống khác nhau . Mặc dù điều này có vẻ bất lợi so với các hệ thống tệp phân tán vốn ẩn cấu trúc hệ thống với người dùng, nhưng hãy nhớ rằng nhiều ứng dụng sử dụng các tệp nằm trên các hệ điều hành khác nhau và do đó trên các máy tính khác nhau. NFS giúp bạn dễ dàng làm việc với các hệ điều hành khác nhau mà không phải lo lắng quá nhiều về ngữ nghĩa và đặc tính hiệu suất của hệ thống tệp.

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 định nghĩa 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 được 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ề cơ bản, 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 cuộc 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ộ nhớ đệ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ệ điều hành 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.