Jawaban:
Tentu saja ssh lebih baik.
Nfs menggunakan protokol jaringan yang kompleks dengan berbagai panggilan prosedur jarak jauh dan waktu tunggu sinkronisasi data. Dalam hal ssh, ini tidak berlaku.
Selain itu, ada banyak kunci. Penghapusan file dalam nfs bekerja dengan cara ini:
rm
perintah memberikan unlink()
syscallunlink()
panggilanunlink()
panggilan ini di sisi jarak jauhunlink()
panggilan sumber asli Andarm
rm
beralih ke file selanjutnya, goto 1Sekarang, yang penting adalah: antara 2-7, rm
harus menunggu. Itu bisa mengirim unlink()
panggilan berikutnya secara tidak sinkron, tetapi itu adalah alat tunggal yang diulir, bukan berorientasi pada peristiwa. Bahkan jika itu bisa, itu masih akan membutuhkan rumit mount flags. Sampai tidak mendapatkan hasilnya, ia menunggu.
NFS - dan sistem file jaringan apa pun - selalu jauh lebih lambat.
Dalam banyak kasus, Anda dapat membuat penghapusan rekursif kecepatan kuasi-tak terbatas dengan trik:
mv -vf oldfilms oldfilms-
)rm -rf oldfilms- &
)Dari banyak (tetapi tidak semua) aspek, penghapusan direktori ini akan terlihat seolah-olah telah terjadi dalam waktu yang hampir nol.
Ekstensi: Seperti @ el.pascado menyebutkan dalam komentarnya yang sangat bagus, sebenarnya 2-7 harus menjalankan 3x untuk semua file:
lstat()
syscall),unlink()
,, dalam kasus direktori opendir()
,, menghapus semua file / direktori di dalamnya secara rekursif, lalu closedir()
, akhirnya rmdir()
.readdir()
panggilan.Ini, itu membutuhkan 3 nfs RPC perintah untuk file, dan 3 tambahan untuk direktori.
Iya. Ya, mungkin. Tergantung. Untuk sejumlah kecil file dan direktori, tidak akan ada banyak perbedaan.
Melakukan operasi file secara massal pada direktori yang dipasang NFS lambat. Jika Anda memiliki kesempatan untuk masuk ke server NFS itu sendiri dan melakukannya di direktori aktual, maka ini akan lebih cepat.
Mari kita mengujinya dengan menghapus koleksi port OpenBSD yang telah saya periksa dari CVS dan dipasang di NFS:
Di server 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
Di klien (setelah memulihkan file asli dari cadangan):
$ time rm -rf /usr/ports/*
6m49.73s real 0m01.55s user 1m08.96s system
-r
flag,rm
harus terlebih dahulu memeriksa apakah file adalah direktori (lstat
via nfs), buka (opendir
via nfs), baca isinya (readdir
via nfs), dan baru kemudian lakukan penghapusan yang sebenarnya seperti dijelaskan dalam jawaban pada setiap file yang ditemukan di dalam dan berulang ke subdirektori, tutup direktori (closedir
via nfs), dan kemudian ulangi, untuk setiap dir yang ditemukan.