Bagaimana saya bisa menentukan apakah remote NFS mengekspor direktori?

11

Dalam skrip saya, saya memiliki beberapa lapisan status:

  1. jarak jauh tersedia (ping)
  2. layanan NFS jarak jauh aktif
  3. NFS jarak jauh mengekspor direktori tertentu
  4. NFS jarak jauh sudah terpasang (mount)

Untuk (2) dan (3), saya percaya rcpinfoadalah taruhan terbaik. Namun untuk (2), saya tidak tahu cara mempersempit kueri saya ke layanan NFS tanpa memulai subkulit (yang tidak dapat diterima untuk aplikasi ini). Untuk (3), saya tidak yakin informasi ini bahkan tersedia dari jarak jauh (tanpa sshmasuk, tentu saja).

Saya sedang mengerjakan RHEL 6 dan tidak memiliki akses ke program yang tidak termasuk dalam distribusi standar.

Sean Allred
sumber

Jawaban:

16

Untuk 3) Anda mungkin ingin menggunakan showmount -e remote_nfs_serveryang menunjukkan jika remote_nfs_server telah mengekspor sesuatu.

Dan untuk 2) jika Anda tidak ingin menggunakan shubshell dan tahu apakah server jarak jauh menjalankan NFSv3 atau NFSv4 dan jika TCP atau UDP, Anda dapat menanyakannya secara khusus dengan rpcinfo:
rpcinfo -u remote_nfs_server nfs 3 untuk NFSv3 melalui UDP dan
rpcinfo -t remote_nfs_server nfs 4untuk NFSv4 melalui TCP

Untuk 4) Anda mungkin ingin melihat Periksa apakah folder adalah sistem file jarak jauh yang terpasang


Informasi lebih lanjut:

doktor5000
sumber
showmount -r remoteakan memberi tahu saya apakah remotemengekspor sesuatu , tetapi apakah ada cara bagi saya untuk menentukan apakah remote:/mnt/dirdiekspor tanpa memulai subkulit (yaitu pipa)?
Sean Allred
showmount -e remoteakan memberi tahu Anda jika remotetelah mengekspor sesuatu. showmount -rhanya akan memberi Anda pesan kesalahan karena opsi itu tidak ada. Anda bisa mencoba menggunakan pencocokan substring shell untuk pada dasarnya grep untuk ekspresi reguler di output showmount. Mungkin kita lihat misalnya stackoverflow.com/questions/12619720/…
doktor5000
Atau sebaliknya, saya tidak tahu ada perintah mandiri yang secara khusus dapat meminta server NFS jarak jauh untuk satu mount tertentu, dan saya tidak berpikir itu ada. Hanya dua cara lain yang layak adalah dengan menanyakan server jarak jauh secara lokal melalui ssh (walaupun demikian pun tidak ada cara yang dapat diandalkan untuk menentukan apakah direktori yang diberikan saat ini diekspor karena sifat stateless NFS). Pendekatan lain dapat mencoba untuk me-mount ekspor NFS dari klien dan memeriksa kode keluar dan kemudian mount lokal dan isinya.
doktor5000
Kesalahan saya dengan -ropsi versus -e- itulah yang saya maksud :) 'Pendekatan upaya' telah disarankan sebelumnya. Saya tidak terlalu suka, tapi itu terlihat seperti opsi nyata.
Sean Allred
5

Anda dapat menggunakan showmount -e <server>untuk beberapa aspek # 3. Ketika ekspor sederhana, paling tidak akan menyarankan bahwa direktori (atau mungkin induk dari direktori semacam itu) diekspor.

# showmount -e server
/export                               (everyone)

Untuk # 2, saya tidak yakin apa yang Anda cari. Jika Anda menggunakan NFSv3, Anda akan mencari setidaknya mountd dan nfs (dan dalam beberapa kasus mungkin ingin mengonfirmasi pengelola kunci). Anda dapat memeriksa secara eksplisit dengan rpcinfo seperti yang Anda katakan.

# rpcinfo -t server mountd 3
program 100005 version 3 ready and waiting
BowlOfRed
sumber
showmount -r remoteakan memberi tahu saya apakah remotemengekspor sesuatu , tetapi apakah ada cara bagi saya untuk menentukan apakah remote:/mnt/dirdiekspor tanpa memulai subkulit (yaitu pipa)?
Sean Allred
Itu tergantung pada fasilitas yang Anda inginkan. Apa skrip Anda ditulis? Mengapa memulai executable terpisah (showmount) lebih sedikit masalah daripada memulai shell lain?
BowlOfRed
Saya sedang menulis skrip saya dengan Python 2.6 dan menggunakan subprocessmodul. Saya dapat mengatur pipa dengan itu, tapi saya lebih suka tidak terlalu menyulitkan desain. Saya perlu menghindari memulai subkulit untuk memungkinkan skrip untuk dibunuh dengan anggun - jika terbunuh, proses anak-anaknya akan dibunuh, tetapi tidak anak-anak dari proses anak. Dengan demikian, subkulit akan dibunuh, tetapi bukan proses subkulit menumbuhkan. Saya juga mencatat rpcinfoperlu waktu hingga tiga menit untuk kembali, yang merupakan dasar orisinal untuk hal tanpa kulit. Sudah terlambat untuk mengubahnya sekarang.
Sean Allred
Tulis skrip terpisah yang melakukan apa yang Anda butuhkan (seperti panggilan showmount, tetapi mengambil argumen untuk direktori dan mengembalikan keberhasilan / kegagalan, dan menyertakan batas waktu yang masuk akal untuk tujuan Anda), lalu panggil skrip itu dari python Anda.
BowlOfRed
Saya bisa berjanji kepada Anda itu tidak semudah yang akan Anda pikirkan - ketika terkunci demikian, rpcinfotidak menanggapi apa pun kecuali SIGKILL (yang merupakan kesalahan distribusi - OS jelas-jelas hanya membunuh prosesnya). Bagaimanapun, itu masih akan memulai shell untuk memulai rpcinfo- masalah mendasar masih ada.
Sean Allred
0

Daftar semua direktori ekspor pseudo root NFS-V4

ls /net/ip-addr-nfs-server

Lihat jawaban saya di utas lain

Sathish
sumber
Agar /netpemasangan berfungsi, /etc/auto.netskrip harus menetapkan bahwa server memiliki ekspor yang sesuai. Ini menggunakan showmountperintah. Jika server hanya memiliki NFSv4, itu tidak akan berfungsi (showmount display RPC: Program not registered, dan /net/serverhanya akan melaporkan File not found)
Ale