NFS – Network File System

Network File System (NFS) là một cơ chế trong hệ điều hành Linux, cho phép sử dụng hệ thống tệp từ xa giống như chúng ta sử dụng các tệp ở trên local. Mặc dù công nghệ này không còn mới lạ với nhiều người, trong bài viết này, NFS sẽ được trình bày từ một góc nhìn khác.

Một người đồng nghiệp của tôi gặp trục trặc trong quá trình làm việc. Lỗi đấy cụ thể như sau: Dự án có hệ thống server dùng để lập trình, mỗi người sẽ kết nối vào máy chủ thông qua ssh. Mỗi người đều có tài khoản riêng ở trong máy chủ đó. Tuy nhiên không hiểu sao tài khoản của đồng nghiệp tôi bị trục trặc. Ví dụ như khi biên dịch mã nguồn (source code) của dự án bằng câu lệnh make, nếu như gõ make bình thường thì build sẽ bị lỗi. Còn nếu dùng thêm sudo ở đằng trước thì sẽ không bị. Mà các lỗi biên dịch lại xuất hiện khá ngẫu nhiên, có lúc lại không bị nữa??? Rồi đến các thao tác bình thường như dùng git, ssh… cũng bị lỗi tuy nhiên lỗi xảy ra một cách bất chợt, lúc bị lúc không. Lỗi này kéo dài hàng tháng trời không thể sửa được vì tính ngẫu nhiên, không có quy luật của nó. Nhìn chung khi đó, đồng nghiệp của tôi gặp không ít những áp lực.

Khi tôi vào xem thử thì mình thấy có hiện tượng như sau. Có lúc mình gõ “cd ~” để đi vào thư mục home của user thì thấy bị treo terminal. Tôi liền ssh vào bằng tài khoản root và dùng lệnh “cd /home/user-name” thì thấy báo lỗi permission denied. Kể cả khi tôi dùng tài khoản root cũng không thể thay đổi được permission của các folder trong thư mục /home. Sau đ, tôi dùng lệnh mount để kiếm tra (tại sao lại dùng lệnh mount thì nó liên quan đến kiến thức về virtual file system của linux, tôi sẽ giải thích sau). Khi dùng lệnh mount thì thấy các thư mục con trong /home đang được mount bằng NFS – network file system.

Về ý tưởng tại sao các thư mục con trong thư mục /home lại dùng network file system thì có thể hiểu như sau. Máy chủ dùng chung, tất cả người dùng đều có tài khoản root. Như vậy để bảo vệ dữ liệu của từng người dùng thì người ta sẽ dùng 1 ổ đĩa ở server khác để lưu. Sau đó họ sẽ mount ổ đĩa đấy vào máy chủ dùng chung theo dạng network file system. Nhờ cơ chế này nên các thuộc tính của thư mục người dùng sẽ được cấu hình bởi máy chủ. Trên máy chủ dùng chung, kể cả tài khoản root cũng không thể thay đổi được sự cho phép cũng như đọc được dữ liệu bên trong thư mục người dùng. Trong Linux thì quyền của kernel cao hơn quyền root.

Quay lại về lỗi ở trên. Do máy chủ chứa dữ liệu người dùng có thể đang gặp lỗi nào đó, nên nó hoạt động không ổn định. Trong thư mục “~” home của người dùng, nó chứa các file dùng để cấu hình cho môi trường hoạt động của người dùng. Ví dụ như các biến môi trường của bash ~ liên quan đến makefile. File ~/.gitconfig liên quan đến git. Mỗi khi người dùng đăng nhập vào máy thì Linux sẽ đọc dữ liệu trong thư mục “~” home để cấu hình môi trường hoạt động tương ứng cho người dùng đó. Khi thư mục home bị lỗi thì tất nhiên các hoạt động của người dùng đó sẽ bị lỗi. Ví dụ như khi dùng git để clone source code, do không có gitconfig nên không thể clone được. Hoặc khi dùng make để biên dịch mã nguồn (source code) như biến môi trường PATH bị lỗi, một số câu lệnh hoặc thư viện sẽ không dùng được.

Tại sao dùng sudo ở đằng trước câu lệnh hoặc dùng tài khoản root thì lại không bị lỗi?
Nguyên nhân là do trong linux, tài khoản root được cấu hình để thư mục home nằm ở /root chứ không phải /home. Và trong máy chủ dùng chung của bọn mình, /root vẫn sử dụng local file system chứ không dùng network file system, do đó nó không bị ảnh hưởng.

Vậy thôi, nút thắt của bug này là ở chỗ dùng câu lệnh mount để kiểm tra. Thao tác này không đi theo tư duy thông thường mà dựa vào kiến thức về virtual file system của Linux để phán đoán ra. Bug sau khi được phát hiện thì chúng tôi báo cáo lại cho bên làm máy chủ để họ tự sửa.

Leave a Comment

Your email address will not be published. Required fields are marked *

Scroll to Top