Gắn ổ lưu trữ từ xa làm ổ đĩa cục bộ: Hướng dẫn về FUSE và SSHFS trên Linux

Linux tutorial - IT technology blog
Linux tutorial - IT technology blog

Vượt xa những thao tác SCP và SFTP thủ công

Quản lý tệp trên nhiều máy chủ thường đi kèm với quy trình lặp đi lặp lại của scp, rsync, hoặc mở các trình khách SFTP như FileZilla. Mặc dù các công cụ này vẫn hoạt động tốt, chúng tạo ra sự gián đoạn trong quá trình phát triển. Tôi từng mất 15 đến 20 phút chỉ để tải các tệp log về để dùng grep hoặc tải lên từng bản vá mã nguồn. Mọi thứ đã thay đổi khi tôi tích hợp FUSE (Filesystem in Userspace) và SSHFS vào quy trình làm việc hàng ngày.

FUSE là một giao diện kernel cho phép người dùng không có đặc quyền tự tạo hệ thống tệp riêng mà không cần can thiệp vào mã nguồn kernel. Điều này loại bỏ một trở ngại lớn cho các kỹ sư DevOps. Bạn có thể mount một thư mục từ xa từ máy chủ production, một Amazon S3 bucket, hoặc thậm chí là tài khoản Google Drive trực tiếp vào máy tính cá nhân. Sau khi mount, các tệp từ xa này hoạt động chính xác như dữ liệu cục bộ. Bạn có thể sử dụng ls, cat, vim, hoặc bất kỳ trình quản lý tệp giao diện đồ họa (GUI) nào như thể các tệp đó đang nằm trên ổ cứng NVMe của mình.

Trên một máy chủ production Ubuntu 22.04 với 4GB RAM, phương pháp này đã cắt giảm đáng kể thời gian xử lý dữ liệu của tôi. Tôi từng phải phân tích 50GB log thô lưu trữ trên một node lưu trữ riêng biệt. Thay vì đợi 12 phút để truyền dữ liệu qua mạng, tôi đã mount node đó qua SSHFS và chạy các script ngay lập tức. Kernel xử lý việc truyền dữ liệu (streaming) ở chế độ nền, giúp tiết kiệm cả dung lượng đĩa lẫn thời gian chờ đợi.

Chuẩn bị công cụ

Để bắt đầu, bạn cần cài đặt gói sshfs. Hầu hết các bản phân phối Linux hiện đại đều bao gồm gói này trong kho lưu trữ mặc định. Vì SSHFS dựa trên FUSE, việc cài đặt thường sẽ tự động tải về tất cả các phụ thuộc cần thiết.

Trên các hệ thống dựa trên Debian hoặc Ubuntu, hãy chạy:

sudo apt update
sudo apt install sshfs

Đối với người dùng RHEL, CentOS hoặc AlmaLinux:

sudo dnf install fuse-sshfs

Sau khi cài đặt, hãy kiểm tra xem người dùng của bạn có cần thuộc nhóm fuse hay không. Trên nhiều bản phân phối hiện đại như Ubuntu 22.04, việc này được xử lý tự động. Nếu bạn gặp lỗi quyền truy cập, hãy thử thêm bản thân vào nhóm một cách thủ công:

sudo usermod -a -G fuse $(whoami)

Hãy nhớ đăng xuất và đăng nhập lại để thay đổi nhóm này có hiệu lực.

Mount máy chủ từ xa với SSHFS

SSHFS cực kỳ đơn giản. Nếu bạn có quyền truy cập SSH vào máy chủ, bạn có thể mount hệ thống tệp của nó. Bạn không cần bất kỳ cấu hình đặc biệt nào phía máy chủ ngoài một SSH daemon đang hoạt động.

Lệnh Mount cơ bản

Bắt đầu bằng cách tạo một thư mục cục bộ để làm điểm mount. Tôi thường để các thư mục này trong ~/mnt để dễ quản lý.

mkdir -p ~/mnt/remote_server
sshfs user@remote-ip:/var/www/html ~/mnt/remote_server

Bây giờ, hãy chuyển đến thư mục ~/mnt/remote_server. Bạn sẽ thấy các tệp từ thư mục /var/www/html từ xa. Nếu bạn sử dụng SSH keys—điều rất được khuyến khích—việc mount sẽ diễn ra ngay lập tức mà không cần nhập mật khẩu.

Lợi thế không cần quyền Root

Một tính năng nổi bật của thiết lập này là bạn không cần quyền root trên máy cục bộ để mount các ổ đĩa này. Điều này lý tưởng cho các môi trường chia sẻ hoặc máy trạm bị hạn chế quyền. Bạn có thể quản lý các điểm mount của riêng mình mà không cần đợi quản trị viên hệ thống phê duyệt kết nối nguồn dữ liệu mới.

Xử lý lưu trữ đám mây (S3 và Rclone)

SSHFS hoàn hảo cho máy chủ, nhưng bạn cũng có thể cần thao tác với Object Storage như AWS S3 hoặc Backblaze B2. Đối với trường hợp này, tôi khuyên dùng rclone. Nó sử dụng cùng một backend FUSE để mount các cloud bucket.

# Ví dụ về việc mount một S3 bucket sau khi cấu hình rclone
rclone mount mys3bucket:bucket-name ~/mnt/s3_data --vfs-cache-mode writes

Cách này coi một cloud bucket như một thư mục cục bộ. Nó cực kỳ hữu ích cho các script sao lưu hoặc các ứng dụng yêu cầu hệ thống tệp tiêu chuẩn nhưng cần khả năng mở rộng vô hạn của đám mây.

Tối ưu hóa và tinh chỉnh hiệu suất

Làm việc qua mạng sẽ gây ra độ trễ. Nếu bạn đang sử dụng kết nối có ping 100ms, một lệnh ls đơn giản cũng có thể cảm thấy chậm chạp. Một vài tham số (flag) cụ thể có thể giúp trải nghiệm mượt mà hơn nhiều.

Để tăng tốc độ liệt kê thư mục và truy cập tệp, hãy thử các cài đặt bộ nhớ đệm (cache) và nén sau:

sshfs user@remote-ip:/path ~/mnt/remote_server -C -o cache=yes -o kernel_cache -o compression=yes
  • -C: Kích hoạt nén dữ liệu, một giải pháp hiệu quả trên các đường truyền chậm.
  • -o kernel_cache: Cho phép kernel lưu tệp vào bộ nhớ đệm để giảm các yêu cầu mạng dư thừa.
  • -o auto_cache: Bật bộ nhớ đệm dựa trên thời gian sửa đổi tệp.

Nếu Wi-Fi chập chờn hoặc máy chủ ngắt kết nối, hãy thêm tùy chọn reconnect. Điều này ngăn điểm mount bị treo vô thời hạn:

sshfs user@remote-ip:/path ~/mnt/remote_server -o reconnect,ServerAliveInterval=15,ServerAliveCountMax=3

Xác minh và giám sát

Làm thế nào để xác minh việc mount? Lệnh df -h là phương pháp đáng tin cậy nhất. Nó liệt kê hệ thống tệp đã mount và hiển thị số liệu thống kê sử dụng đĩa của máy chủ từ xa.

df -h | grep sshfs

Khi hoàn tất, đừng sử dụng rmdir để ngắt kết nối. Hãy sử dụng tiện ích fusermount, công cụ giúp tách các hệ thống tệp FUSE một cách an toàn:

fusermount -u ~/mnt/remote_server

Tự động hóa với fstab

Bạn có thể thêm điểm mount vào /etc/fstab để nó tự động duy trì sau khi khởi động lại. Tuy nhiên, tôi khuyên không nên làm điều này cho máy tính xách tay. Quá trình khởi động có thể bị treo nếu bạn không ở đúng mạng. Nếu bạn sử dụng nó trên một máy chủ ổn định, hãy bao gồm các tùy chọn _netdevallow_other:

user@remote-ip:/path /home/localuser/mnt/remote_server fuse.sshfs _netdev,allow_other,IdentityFile=/home/localuser/.ssh/id_rsa 0 0

Khắc phục các lỗi thường gặp

Đôi khi các điểm mount trở nên “treo” (stale) nếu kết nối bị ngắt đột ngột. Bạn có thể thấy lỗi như “Transport endpoint is not connected.” Trong những trường hợp này, lệnh umount thông thường thường thất bại. Giải pháp là thực hiện ngắt kết nối cưỡng bức (lazy unmount):

# Cưỡng bức ngắt kết nối (unmount)
fusermount -uz ~/mnt/remote_server

Tham số -z sẽ dọn dẹp điểm mount ngay khi hệ thống tệp không còn bận, giải quyết tình trạng treo ngay lập tức.

Việc sử dụng FUSE và SSHFS đã cải thiện căn bản cách tôi quản lý hạ tầng phân tán. Nó kết hợp sự tiện lợi cục bộ với sức mạnh từ xa, cho phép tôi sử dụng các trình soạn thảo và công cụ yêu thích của mình trên dữ liệu ở bất cứ đâu. Hãy thử áp dụng vào lần tới khi bạn thấy mình bị mắc kẹt trong vòng lặp của các lệnh scp.

Share: