Câu trả lời:
Tất nhiên ssh là tốt hơn.
Nfs sử dụng một giao thức mạng phức tạp với nhiều cuộc gọi thủ tục từ xa và thời gian chờ đồng bộ hóa dữ liệu. Trong trường hợp của ssh, những điều này không áp dụng.
Hơn nữa, có nhiều ổ khóa. Xóa tệp trong nfs hoạt động theo cách này:
rm
lệnh cho các unlink()
syscallunlink()
cuộc gọiunlink()
cuộc gọi này ở phía xaunlink()
cuộc gọi ban đầu của bạnrm
rm
Lặp lại tập tin tiếp theo, goto 1Bây giờ, điều quan trọng là: giữa 2-7, rm
phải chờ. Nó có thể gửi unlink()
cuộc gọi tiếp theo không đồng bộ, nhưng nó là một công cụ đơn luồng, không hướng sự kiện. Ngay cả nếu có thể, nó vẫn sẽ yêu cầu các cờ gắn nfs khó khăn. Cho đến khi nó không nhận được kết quả, nó chờ đợi.
Nfs - và bất kỳ hệ thống tập tin mạng nào - luôn chậm hơn nhiều.
Trong nhiều trường hợp, bạn có thể thực hiện xóa đệ quy tốc độ vô hạn bằng một mẹo:
mv -vf oldfilms oldfilms-
)rm -rf oldfilms- &
)Từ nhiều khía cạnh (nhưng không phải tất cả), việc loại bỏ thư mục này sẽ trông như thể nó đã xảy ra trong thời gian thực tế bằng không.
Tiện ích mở rộng: Như @ el.pascado đề cập trong nhận xét xuất sắc của mình, thực sự 2-7 phải chạy 3x cho bất kỳ tệp nào:
lstat()
tòa nhà chọc trời),unlink()
, trong trường hợp của các thư opendir()
mục closedir()
, cuối cùng sẽ xóa tất cả các tệp / thư mục trong đó rmdir()
.readdir()
cuộc gọi.Điều này, nó yêu cầu 3 lệnh NPC RPC cho các tệp và thêm 3 cho các thư mục.
Đúng. Vâng, có lẽ. Nó phụ thuộc. Đối với một số lượng nhỏ tệp và thư mục, nó sẽ không có nhiều khác biệt.
Thực hiện thao tác tệp hàng loạt trên một thư mục được gắn NFS là chậm. Nếu bạn có cơ hội đăng nhập vào máy chủ NFS và thực hiện chúng trên thư mục thực tế, thì việc này sẽ nhanh hơn.
Hãy kiểm tra nó bằng cách xóa bộ sưu tập cổng OpenBSD mà tôi đã kiểm tra từ CVS và gắn trên NFS:
Trên máy chủ NFS:
$ cd /export/shared/ports
$ du -hs .
2.6G .
$ find . | wc -l
179688
$ time rm -rf /export/shared/ports/*
0m20.87s real 0m00.12s user 0m04.62s system
Trên máy khách (sau khi khôi phục các tệp gốc từ bản sao lưu):
$ time rm -rf /usr/ports/*
6m49.73s real 0m01.55s user 1m08.96s system
-r
cờ,rm
trước tiên phải kiểm tra xem tệp có phải là thư mục (lstat
qua nfs) không, mở tệp (opendir
qua nfs), đọc nội dung của nó (readdir
qua nfs) và sau đó chỉ thực hiện xóa thực tế như được mô tả trong câu trả lời trên mỗi tệp được tìm thấy bên trong và đệ quy vào thư mục con, đóng thư mục (closedir
thông qua nfs) và sau đó lặp lại, cho mỗi thư mục tìm thấy.