Pasang kembali klien NFS tanpa restart

10

Saya telah bekerja di server saya, dari mana saya mengekspor satu direktori menggunakan NFS. Tentu saja selama seminggu atau lebih dari server reboot, saya berkali-kali lupa dengan umountsistem file ekspor di workstation saya (yang akan di-mount dari /etc/fstabsaat boot). Di sela-sela saya bisa umountsetelah fakta dan remount (saya tidak menggunakan autofs):

umount -fl /data0
mount /data0

Tetapi ini tidak lagi berhasil.

Saya tidak bisa me-mount direktori yang diekspor dari server pada direktori yang berbeda (mount hang), tapi saya bisa nfs me-mount direktori yang diekspor pada mesin virtual yang berjalan di workstation saya.

Apa yang saya coba adalah menghapus ( rmmod) modul nfsdan nfsv3(yang tidak akan berhasil Resource temporarily unavailable:). lsofhang. mounttidak menunjukkan apa pun yang dipasang melalui nfs. Ini semua mungkin hasil dari menggunakan 'umount-l' beberapa kali, tetapi dua kali pertama ini berhasil tanpa masalah.

Saya telah me-restart server untuk sementara waktu, setelah tidak dapat me-mount tanpa ada bedanya. Saya juga menggunakan service nfs-kernel-server restart. Saya curiga semuanya akan kembali normal jika saya me-restart workstation klien.

Apakah ada cara untuk memulihkan dari ini dan menginisialisasi ulang sisi klien nfs di workstation saya tanpa reboot?
Jika saya tidak bisa memperbaiki ini tanpa reboot, apakah ini tidak akan terjadi lagi jika saya mulai menggunakan autofs?

lsof -b digantung dengan baris terakhir:

lsof: avoiding readlink(/run/user/1001/gvfs): -b was specified.
lsof: avoiding stat(/run/user/1001/gvfs): -b was specified.
lsof: WARNING: can't stat() fuse.gvfsd-fuse file system /run/user/1001/gvfs
      Output information may be incomplete.

di baris sebelumnya, tidak ada /data0.

Entri di /etc/fstab:

192.168.0.2:/data0 /data0  nfs  defaults,auto,nolock,user 0 2
Anthon
sumber
"tetapi dua kali pertama ini berhasil tanpa masalah" ... mengingatkan saya pada roulette Rusia. Apakah lsof -bdigantung?
muru
@uru Ya hang, saya memperbarui Q dengan output. BTW, saya tidak pernah mendengar ada orang mengeluh tentang kekalahan dengan roulette Rusia, jadi itu pasti permainan win-win. Saya biasanya mengharapkan hal-hal untuk bekerja tidak pernah, sekali, atau selalu, tidak dihitung beberapa kali, tetapi mungkin keadaannya berbeda.
Anthon
Distro mana yang Anda gunakan? Prosesnya sangat bervariasi.
Graeme
@Graeme Ini Linix Mint 17.1 (Rebecca)
Anthon
Tidak yakin cara kerjanya di Ubuntu dengan upstartdan semua. Anda mungkin ingin me-restart semua layanan dalam nfs-commonpaket, sepertinya ada beberapa. Pesan kemungkinan juga penting, jadi cobalah berhenti kemudian mulai dengan urutan ketergantungan. Anda mungkin juga ingin melakukan rpcbindsebagai perhentian terakhir / awal pertama Anda. Saya telah melakukan ini sebelumnya di Debian, tetapi hanya memiliki satu nfs-commonlayanan yang bagus .
Graeme

Jawaban:

5

Seperti yang disarankan @PaperMonkey dalam komentar, Anda mungkin kacau karena Anda menggunakan opsi pemasangan default, yang termasuk mencoba ulang selamanya.

intrDulu cara untuk membuatnya lebih mudah untuk mengganggu hal-hal yang terjebak pada I / O ke mount NFS yang rusak, tapi sekarang itu adalah no-op. SIGKILLmasih bisa mengganggu proses macet di NFS, setidaknya begitu nfs(5)klaim. Lihat halaman manual itu untuk opsi pemasangan.

Gunakan softsebagai ganti default hardjika Anda ingin NFS tidak mencoba lagi selamanya.

Saya juga merekomendasikan menggunakan automounter. Buat symlink ke / net / host / foo / bar di suatu tempat, jika Anda mau.

Seringkali lebih mudah untuk hanya reboot, tapi saya pikir secara teori Anda harus dapat kill -9(yaitu kill -KILL) proses yang macet di NFS. MAKA umount -f mungkin bekerja. Berhati-hatilah untuk tidak membiarkan penyelesaian-tab macet lebih banyak proses pada NFS mount.

Peter Cordes
sumber
Secara teori, tetapi sulit untuk menemukan proses-proses itu ketika lsof hang.
kmarsh
@kmarsh: proses apa pun dalam keadaan D(Disk-sleep) di ps / top mungkin macet di NFS.
Peter Cordes
1
Harap dicatat bahwa ketika menggunakan "lunak" bukannya "keras" ada kemungkinan kehilangan data setiap kali server NFS tidak tersedia untuk sementara.
Marki555
4

Di bawah ini adalah daftar perintah yang harus dijalankan untuk memperbaiki masalah ini pada distro berbasis RPM.

service rpcbind stop
service nfslock stop
rm -rf /var/lib/nfs/statd/sm/*
rm -rf /var/lib/nfs/statd/sm.bak/*

Setelah itu:

umount -f /share
zombi_man
sumber
1

Menggunakan autofsakan membantu menghindari masalah ini di masa mendatang. Manfaat terbesar autofsadalah tidak mencoba me-mount direktori sampai Anda mencoba menggunakannya, ini berarti Anda menghindari titik-titik mount yang rusak dan itu tidak akan mencoba untuk me-mount tanpa batas, Anda dapat mengatur periode batas waktu untuk unmount (yang biasanya pendek). Saya tidak yakin apakah automount mencoba ulang sama sekali selama periode pretimout ini, tapi bagaimanapun saya biasanya mengatur batas waktu automount menjadi hanya beberapa detik.

Untuk menyelesaikan masalah tanpa memulai ulang, Anda mungkin dapat bertahan dengan umount -a(unmount semua yang disebutkan di / etc / fstab) mount -a(mount semua di / etc / fstab) tapi saya sudah kecuali direktori yang hilang berisi direktori home you ' lebih baik menyimpan pekerjaan di tempat lain dan hanya me-reboot.

Centimane
sumber
0

Gunakan hasil dari perintah lsof untuk menemukan proses pada klien yang memegang referensi ke sistem file basi dan membunuh proses-proses tersebut.

umount -f / data0

pastikan Anda dapat melakukan ping ke server kemudian memasang kembali drive. Mulai ulang proses yang diinginkan.

Cluster

Catatan, jika Anda menjalankan pengaturan server cluster Anda akan mendapatkan file basi nfs basi setiap kali server harus gagal. Untuk menghindari itu, Anda harus mengekspor sistem file Anda menggunakan opsi fsid. Jumlah untuk fsid harus sama untuk setiap sistem file masing-masing pada dua server. Terserah Anda untuk memastikan replikasi file terjadi. Lihat cuplikan dari halaman manual di bawah ini:

fsid = num | root | uuid NFS harus dapat mengidentifikasi setiap sistem file yang diekspornya. Biasanya ia akan menggunakan UUID untuk sistem file (jika sistem file memiliki hal seperti itu) atau nomor perangkat perangkat yang memegang sistem file (jika sistem file disimpan pada perangkat). Karena tidak semua sistem file disimpan di perangkat, dan tidak semua sistem file memiliki UUID, terkadang perlu secara eksplisit memberi tahu NFS cara mengidentifikasi sistem file. Ini dilakukan dengan opsi fsid =.

Untuk NFSv4, ada sistem file yang dibedakan yang merupakan akar dari semua sistem file yang diekspor. Ini ditentukan dengan fsid = root atau fsid = 0 yang keduanya berarti hal yang persis sama.

Sistem file lain dapat diidentifikasi dengan integer kecil, atau UUID yang harus berisi 32 digit hex dan tanda baca sewenang-wenang.

Kernel Linux versi 2.6.20 dan sebelumnya tidak memahami pengaturan UUID sehingga integer kecil harus digunakan jika opsi fsid perlu diatur untuk kernel tersebut. Pengaturan sejumlah kecil dan UUID didukung sehingga konfigurasi yang sama dapat dibuat untuk bekerja pada kernel lama dan baru.

UDude
sumber
Dia sudah mengatakan lsof hang.
kmarsh