Lebih baik menggunakan menjalankan rm -rf lokal daripada nfs?

10

Apakah akan ada banyak perbedaan waktu untuk login pada mesin yang memiliki direktori sebelum melakukan rm -rfpada direktori, atau hanya rm -rfdirektori di atas NFS?

steviekm3
sumber

Jawaban:

11

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:

  1. Anda rmperintah memberikan unlink()syscall
  2. nfs driver mengubahnya menjadi permintaan sunrpc, mengirimkannya ke server nfs
  3. server nfs mengonversi permintaan sunrpc ini kembali ke unlink()panggilan
  4. mengeksekusi unlink()panggilan ini di sisi jarak jauh
  5. setelah berhasil, berikan kembali pesan balasan rpc yang setara dengan "baiklah, selesai" ke klien
  6. driver kernel sisi klien mengonversi ini kembali ke kode keluar 0 dari unlink()panggilan sumber asli Andarm
  7. rm beralih ke file selanjutnya, goto 1

Sekarang, yang penting adalah: antara 2-7, rmharus 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:

  1. Pertama-tama pindahkan direktori ke nama yang berbeda ( mv -vf oldfilms oldfilms-)
  2. Hapus di latar belakang ( 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:

  • untuk menentukan apakah itu file atau direktori (dengan lstat()syscall),
  • kemudian lakukan sesuai. Dalam kasus file biasa unlink(),, dalam kasus direktori opendir(),, menghapus semua file / direktori di dalamnya secara rekursif, lalu closedir(), akhirnya rmdir().
  • akhirnya, beralih ke entri direktori berikutnya dengan readdir()panggilan.

Ini, itu membutuhkan 3 nfs RPC perintah untuk file, dan 3 tambahan untuk direktori.

peterh - Pasang kembali Monica
sumber
2
Kasus nfs bahkan lebih buruk. Sebagai pertanyaan menyebutkan -rflag, rmharus terlebih dahulu memeriksa apakah file adalah direktori ( lstatvia nfs), buka ( opendirvia nfs), baca isinya ( readdirvia 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 ( closedirvia nfs), dan kemudian ulangi, untuk setiap dir yang ditemukan.
el.pescado
5

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
Kusalananda
sumber