Sistem Fail Rangkaian (NFS) - sistem fail rangkaian. Sistem Fail Rangkaian NFS

#image.jpgSelamat bersenang-senang, pembaca dan tetamu blog saya. Terdapat rehat yang sangat lama antara siaran, tetapi saya kembali dalam perjuangan). Dalam artikel hari ini saya akan melihat Operasi protokol NFS, dan menyediakan pelayan NFS dan klien NFS pada Linux.

Pengenalan kepada NFS

NFS (Sistem Fail Rangkaian- sistem fail rangkaian) pada pendapat saya - penyelesaian ideal pada rangkaian tempatan yang anda perlukan pantas (lebih pantas berbanding SAMBA dan kurang intensif sumber berbanding sistem fail jauh dengan penyulitan - sshfs, SFTP, dll...) pertukaran data dan Keselamatan maklumat yang dihantar bukanlah keutamaan. protokol NFS membolehkan anda melekapkan sistem fail jauh melalui rangkaian ke dalam pepohon direktori tempatan, seolah-olah ia adalah sistem fail cakera yang dipasang.

Oleh itu, aplikasi tempatan boleh berfungsi dengan sistem fail jauh seolah-olah ia adalah aplikasi tempatan. Tetapi anda perlu berhati-hati (!) dengan menyediakan NFS, kerana dengan konfigurasi tertentu adalah mungkin untuk membekukan sistem pengendalian pelanggan menunggu I/O yang tidak berkesudahan.

protokol NFS berasaskan kerja protokol RPC, yang masih di luar pemahaman saya)) jadi bahan dalam artikel akan menjadi sedikit kabur... Sebelum anda boleh menggunakan NFS, sama ada pelayan atau pelanggan, anda mesti memastikan bahawa kernel anda mempunyai sokongan untuk fail NFS sistem. Anda boleh menyemak sama ada kernel menyokong sistem fail NFS dengan mencari kehadiran baris yang sepadan dalam fail /proc/filesystems:

ARCHIV ~ # grep nfs /proc/filesystems nodev nfs nodev nfs4 nodev nfsd

Jika baris yang dinyatakan tiada dalam fail /proc/filesystems, maka anda perlu memasang pakej yang diterangkan di bawah. Ini mungkin akan membolehkan anda memasang modul kernel bergantung untuk menyokong sistem fail yang sesuai.

Jika, selepas memasang pakej, sokongan NFS tidak dipaparkan dalam fail yang ditetapkan, maka anda perlu menyusun semula kernel untuk mendayakan fungsi ini.

cerita Sistem Fail Rangkaian

protokol NFS dibangunkan oleh Sun Microsystems dan mempunyai empat versi dalam sejarahnya. NFSv1 telah dibangunkan pada tahun 1989 dan adalah percubaan, berjalan pada protokol UDP. Versi Satu diterangkan dalam RFC 1094.

NFSv2 dikeluarkan pada tahun yang sama 1989, diterangkan oleh RFC1094 yang sama dan juga berdasarkan protokol UDP, sementara pada masa yang sama membenarkan untuk membaca sekurang-kurangnya 2GB daripada fail. NFSv3 telah dimuktamadkan pada tahun 1995 dan diterangkan dalam RFC 1813.

Inovasi utama versi ketiga ialah sokongan untuk fail besar, sokongan tambahan untuk protokol TCP dan paket TCP yang lebih besar, yang mempercepatkan prestasi teknologi dengan ketara. NFSv4 telah dimuktamadkan pada tahun 2000 dan diterangkan dalam RFC 3010, disemak pada tahun 2003 dan diterangkan dalam RFC 3530.

Versi ke-4 termasuk peningkatan prestasi, sokongan untuk pelbagai cara pengesahan (khususnya, Kerberos dan LIPKEY dengan pengenalan protokol RPCSEC GSS) dan senarai kawalan akses (kedua-dua jenis POSIX dan Windows). NFS v4.1 telah diluluskan oleh IESG pada tahun 2010 dan menerima RFC 5661.

Inovasi asas versi 4.1 ialah spesifikasi pNFS - NFS Selari, mekanisme untuk akses selari klien NFS kepada data daripada pelayan NFS berbilang teragih. Kehadiran mekanisme sedemikian dalam sistem fail rangkaian sampel akan membantu membina sistem storan dan maklumat "awan" yang diedarkan.

pelayan NFS

Memandangkan kita ada NFS- Ini rangkaian sistem fail, anda perlu mengkonfigurasi jaring dalam Linux. (Anda juga boleh membaca artikel konsep utama rangkaian). Seterusnya anda perlu memasang pakej yang sesuai. Pada Debian ini ialah pakej nfs-kernel-server dan nfs-common, pada RedHat ini ialah pakej nfs-utils.

Dan juga, anda perlu membenarkan syaitan berjalan pada tahap pelaksanaan yang sesuai (arahan dalam RedHat - /sbin/chkconfig nfs on, dalam Debian - /usr/sbin/update-rc.d nfs-kernel-server defaults).

Pakej yang dipasang dalam Debian dilancarkan dalam susunan berikut:

ARKIB ~ # ls -la /etc/rc2.d/ | grep nfs lrwxrwxrwx Satu akar punca 20 Okt Lapan Belas 15:02 S15nfs-common -> ../init.d/nfs-common lrwxrwxrwx Satu akar punca 20 tujuh Okt 20 dua 01:23 S16nfs-kernel-server -> ../init .d/nfs-kernel-server

Dengan kata lain, ia bermula dahulu nfs-common, kemudian pelayan itu sendiri nfs-kernel-server.

Dalam RedHat keadaannya adalah serupa, dengan satu-satunya pengecualian bahawa skrip pertama dipanggil nfslock, dan pelayan dipanggil secara ringkas nfs. Tentang nfs-common Tapak debian secara literal memberitahu kami perkara berikut: fail kongsi untuk klien dan pelayan NFS, pakej ini mesti dipasang pada mesin yang akan berfungsi sebagai klien atau pelayan NFS.

Pakej ini termasuk program: lockd, statd, showmount, nfsstat, gssd dan idmapd. Dengan melihat kandungan skrip permulaan /etc/init.d/nfs-common, anda boleh mengesan urutan kerja berikut: skrip menyemak kehadiran fail binari boleh laku /sbin/rpc.statd, menyemak kehadiran dalam fail /etc/default/nfs-common, /etc/fstab dan /etc/exports ciri-ciri yang memerlukan menjalankan syaitan idmapd Dan gssd, memulakan daemon /sbin/rpc.statd, kemudian sebelum memulakan /usr/sbin/rpc.idmapd dan /usr/sbin/rpc.gssd menyemak kehadiran fail binari boleh laku ini, kemudian untuk demon /usr/sbin/rpc.idmapd menyemak kehadiran modul kernel sunrpc, nfs dan nfsd, dan juga menyokong sistem fail rpc_pipefs dalam kernel (dengan kata lain, kehadirannya dalam fail /proc/filesystems), jika semuanya berjaya, ia dilancarkan /usr/sbin/rpc.idmapd. Selain itu, untuk syaitan /usr/sbin/rpc.gssd menyemak modul kernel rpcsec_gss_krb5 dan memulakan syaitan.

Jika anda melihat kandungannya Skrip permulaan pelayan NFS pada Debian (/etc/init.d/nfs-kernel-server), maka anda boleh mengikuti urutan berikut: pada permulaan, skrip menyemak kewujudan fail /etc/exports, kehadiran modul kernel nfsd, kehadiran sokongan untuk sistem fail NFS dalam kernel Linux (perkataan lain dalam fail /proc/filesystems), jika semuanya sudah sedia, maka syaitan akan mula /usr/sbin/rpc.nfsd, kemudian semak sama ada parameter NEED_SVCGSSD ditetapkan (ditetapkan dalam fail pilihan pelayan /etc/default/nfs-kernel-server) dan, jika ditetapkan, memulakan syaitan /usr/sbin/rpc.svcgssd, yang terakhir melancarkan syaitan /usr/sbin/rpc.mountd. Daripada skrip ini jelas bahawa Operasi pelayan NFS terdiri daripada demons rpc.nfsd, rpc.mountd dan jika pengesahan Kerberos digunakan, maka demon rcp.svcgssd. Dalam topi merah, demon rpc.rquotad dan nfslogd masih berjalan (Atas sebab tertentu dalam Debian saya tidak menemui maklumat tentang syaitan ini dan sebab ketiadaannya, nampaknya ia telah dipadamkan...).

Daripada ini menjadi jelas bahawa Pelayan Sistem Fail Rangkaian terdiri daripada proses berikut (baca - setan), terletak dalam direktori /sbin dan /usr/sbin:

  • rpc.statd- Pemantauan status rangkaian yang mustahil (aka Network Status Monitor, aka NSM). Ia membolehkan anda membatalkan kunci dengan betul selepas ranap/but semula. Untuk memberitahu tentang pelanggaran, gunakan program /usr/sbin/sm-notify. Imp statd berfungsi pada kedua-dua pelayan dan pelanggan. Sebelum ini, pelayan ini diperlukan untuk rpc.lockd berfungsi, tetapi kernel kini bertanggungjawab untuk mengunci (nota: kalau tak silap #image.jpg). (Program RPC 100 ribu 20 satu dan 100 ribu 20 empat - dalam versi baharu)
  • rpc.lockd- Lockd lock imp (aka pengurus kunci NFS (NLM)) mengendalikan permintaan kunci fail. Imp penyekat berfungsi pada kedua-dua pelayan dan pelanggan. Pelanggan meminta penguncian fail, dan pelayan membenarkannya. (lapuk dan tidak digunakan dalam pengedaran baharu sebagai setan. Fungsinya dalam pengedaran moden (dengan kernel lebih lama daripada 2.2.18) dilakukan oleh kernel, lebih tepat lagi oleh modul kernel (lockd).) (RPC program 100024)
  • rpc.nfsd- Syaitan utama pelayan NFS ialah nfsd (dalam versi baharu kadangkala dipanggil nfsd4). Imp ini menyediakan permintaan pelanggan NFS. Parameter RPCNFSDCOUNT dalam fail /etc/default/nfs-kernel-server pada Debian dan NFSDCOUNT dalam fail /etc/sysconfig/nfs pada RedHat menentukan bilangan syaitan untuk dijalankan (lalai ialah 8). (program RPC 100003)
  • rpc.mountd- Tanpa pemasangan NFS mountd mengendalikan permintaan pelanggan untuk melekapkan direktori. Imp yang dipasang berjalan pada pelayan NFS. (Program RPC 100005)
  • rpc.idmapd- Idmapd untuk NFSv4 pada pelayan menukar uid/gid tempatan pengguna kepada format nama@domain, dan perkhidmatan pada klien menukar nama pengguna/kumpulan nama@jenis domain kepada pengguna tempatan dan pengecam kumpulan (mengikut konfigurasi fail /etc/idmapd.conf, butiran lanjut dalam man idmapd.conf):.
  • Selain itu, versi lama NFS menggunakan imp: nfslogd- NFS log imp merekodkan aktiviti untuk sistem fail yang dieksport, berfungsi pada pelayan NFS dan rquotad- pelayan kuota jauh menyediakan maklumat tentang kuota pengguna dalam sistem fail jauh, boleh berfungsi pada kedua-dua pelayan dan pelanggan. (program RPC 100011)

Dalam NFSv4, apabila menggunakan Kerberos, syaitan juga dilancarkan:

  • rpc.gssd- Bes NFSv4 menyediakan kaedah pengesahan melalui GSS-API (pengesahan Kerberos). Berfungsi pada klien dan pelayan.
  • rpc.svcgssd- Imp pelayan NFSv4, yang menyediakan pengesahan klien sebelah pelayan.

peta port dan protokol RPC (Sun RPC)

Sebagai tambahan kepada pakej yang dinyatakan di atas, NFSv2 dan v3 memerlukan pakej tambahan untuk operasi yang betul peta port(digantikan dalam pengedaran yang lebih baharu dengan dinamakan semula kepada rpcbind). Pakej ini biasanya dipasang secara automatik dengan NFS sebagai pakej bergantung dan melaksanakan operasi pelayan RPC, dengan kata lain, ia bertanggungjawab untuk penetapan dinamik port untuk beberapa perkhidmatan yang didaftarkan dalam pelayan RPC.

Secara harfiah, menurut dokumentasi, ini adalah pelayan yang menukar nombor program RPC (Panggilan Prosedur Jauh) kepada nombor port TCP/UDP. portmap beroperasi pada beberapa entiti: panggilan atau permintaan RPC, port TCP/UDP, versi protokol (tcp atau udp), nombor program dan versi program. Demon portmap dilancarkan oleh skrip /etc/init.d/portmap sebelum permulaan perkhidmatan NFS.

Secara ringkasnya, tugas pelayan RPC (Remote Procedure Call) adalah untuk memproses panggilan RPC (yang dipanggil prosedur RPC) daripada proses tempatan dan jauh.

Menggunakan panggilan RPC, perkhidmatan mendaftar atau mengalih keluar diri mereka sendiri ke/daripada pemeta port (aka port mapper, aka portmap, aka portmapper, aka, dalam versi baharu, rpcbind), dan pelanggan menggunakan panggilan RPC untuk menghantar permintaan kepada portmapper menerima maklumat yang berkaitan. Nama mesra pengguna perkhidmatan program dan nombor yang sepadan ditakrifkan dalam fail /etc/rpc.

Memandangkan mana-mana perkhidmatan menghantar permintaan yang sepadan dan mendaftar sendiri pada pelayan RPC dalam pemeta port, pelayan RPC memperuntukkan, memetakan kepada perkhidmatan port TCP dan UDP di mana perkhidmatan bermula dan menyimpan dalam kernel maklumat yang sepadan tentang perkhidmatan yang sedang berjalan. (nama), nombor perkhidmatan yang unik (mengikut /etc/rpc), tentang protokol dan port di mana perkhidmatan berjalan dan tentang versi perkhidmatan dan memberikan maklumat yang ditunjukkan kepada pelanggan atas permintaan. Penukar port itu sendiri mempunyai nombor program (100000), nombor versi 2, port TCP 100 sebelas dan port UDP 111.

Di atas, apabila menunjukkan komposisi syaitan pelayan NFS, saya menunjukkan nombor program RPC utama. Saya mungkin telah mengelirukan anda sedikit dengan perenggan ini, jadi saya akan menyatakan frasa utama yang sepatutnya menjelaskan: fungsi utama pemeta pelabuhan adalah untuk kembali, atas permintaan pelanggan yang memberikan nombor program RPC (atau Nombor program RPC) dan versi kepadanya (pelanggan) port di mana program yang diminta sedang berjalan. Sehubungan itu, jika pelanggan perlu mengakses RPC dengan nombor program tertentu, ia mesti terlebih dahulu menghubungi proses peta port pada mesin pelayan dan mencari nombor port komunikasi dengan perkhidmatan RPC yang diperlukannya.

Pengendalian pelayan RPC boleh diwakili oleh langkah-langkah berikut:

Untuk mendapatkan maklumat daripada pelayan RPC, gunakan utiliti rpcinfo. Apabila anda menentukan ciri hos -p, atur cara memaparkan senarai semua program RPC berdaftar pada hos hos. Tanpa menyatakan hos, program akan memaparkan perkhidmatan pada localhost. Contoh:

ARCHIV ~ # rpcinfo -p prog-ma vers proto port 100 ribu Dua tcp 100 sebelas portmapper 100 ribu Dua udp 100 sebelas portmapper 100 ribu 20 empat Satu udp 50 sembilan ribu empat ratus 50 satu status 100 ribu 20 empat puluh Satu tcp lapan ratus 70 dua status 100 ribu 20 satu Satu udp 40 empat ribu tiga ratus 10 nlockmgr 100 ribu 20 satu Tiga udp 40 empat ribu tiga ratus 10 nlockmgr 100 ribu 20 satu Empat udp 40 empat ribu tiga ratus 10 nlockmgr 100 ribu 20 satu empat tcp 40 Satu tcp ribu lapan ratus 50 satu nlockmgr 100 ribu 20 satu Tiga tcp 40 empat ribu lapan ratus 50 satu nlockmgr 100 ribu 20 satu Empat tcp 40 empat ribu lapan ratus 50 satu nlockmgr 100 ribu tiga Dua tcp Dua ribu 40 sembilan nfs 100 ribu dua Tiga tcp ribu 40 sembilan nfs 100 ribu tiga Empat tcp Dua ribu 40 sembilan nfs 100 ribu tiga Dua udp Dua ribu 40 sembilan nfs 100 ribu tiga Tiga udp Dua ribu 40 sembilan nfs 100 ribu tiga Empat udp Dua ribu 40 sembilan nfs 100 ribu 5 Satu udp 50 seribu tiga ratus 6 dipasang 100 ribu 5 Satu tcp 40 seribu empat ratus 5 dipasang 100 ribu 5 Dua udp 50 seribu tiga ratus 6 dipasang 100 ribu 5 Dua tcp 40 seribu empat ratus 5 dipasang 100 ribu 5 Tiga udp 50 seribu tiga ratus 6 dipasang 100 ribu 5 Tiga tcp 40 seribu empat ratus 5 dipasang

Seperti yang anda lihat, rpcinfo menunjukkan (dalam lajur dari kiri ke kanan) nombor program, versi, protokol, port dan nama yang didaftarkan.

Menggunakan rpcinfo anda boleh mengalih keluar pendaftaran program atau mendapatkan maklumat tentang perkhidmatan RPC tertentu (lebih banyak pilihan dalam man rpcinfo). Seperti yang anda lihat, versi portmapper Dua syaitan didaftarkan pada port udp dan tcp, versi rpc.statd Satu pada port udp dan tcp, pengurus kunci NFS versi 1,3,4, pelayan nfs versi 2,3,4, serta memasang setan versi 1,2,3.

Pelayan NFS (lebih tepat, rpc.nfsd) menerima permintaan daripada klien dalam bentuk datagram UDP pada port 2049. Walaupun fakta bahawa NFS berfungsi dengan penyelesai port, yang membolehkan pelayan menggunakan port yang ditetapkan secara dinamik, port UDP Dua ribu 40 sembilan diberikan secara ketat kepada NFS dalam kebanyakan pelaksanaan.

Operasi Protokol Sistem Fail Rangkaian

Memasang NFS jauh

Proses pemasangan sistem fail NFS jauh boleh diwakili oleh rajah berikut:

Perihalan protokol NFS semasa memasang direktori jauh:

  1. Pelayan RPC dilancarkan pada pelayan dan klien (biasanya semasa boot), diservis oleh proses portmapper dan didaftarkan pada port tcp/111 dan udp/111.
  2. Perkhidmatan dilancarkan (rpc.nfsd, rpc.statd, dsb.), yang didaftarkan pada pelayan RPC dan didaftarkan pada port rangkaian rawak (jika port statik tidak dinyatakan dalam tetapan perkhidmatan).
  3. arahan mount pada komputer klien menghantar kernel permintaan untuk melekapkan direktori rangkaian yang menunjukkan jenis sistem fail, hos dan secara praktikal direktori, kernel menghantar dan menjana permintaan RPC ke proses peta port pada pelayan NFS pada port udp/ 111 (jika fungsi untuk berfungsi melalui tcp tidak ditetapkan pada klien )
  4. Kernel pelayan NFS menanyakan RPC untuk kehadiran imp rpc.mountd dan mengembalikan kepada kernel klien port rangkaian di mana imp sedang berjalan.
  5. mount menghantar permintaan RPC ke port di mana rpc.mountd sedang berjalan. Pada ketika ini, pelayan NFS boleh mengesahkan klien berdasarkan alamat IP dan nombor portnya untuk melihat sama ada klien boleh memasang sistem fail yang ditetapkan.
  6. Mountless mengembalikan perihalan sistem fail yang diminta.
  7. Perintah pelekap pelanggan mengeluarkan panggilan sistem pelekap untuk mengaitkan pemegang fail yang terdapat dalam langkah 5 dengan titik pelekap setempat pada hos pelanggan. Pemegang fail disimpan dalam kod klien NFS, dan mulai sekarang sebarang capaian oleh proses pengguna kepada fail pada sistem fail pelayan akan menggunakan pemegang fail sebagai titik permulaan.

Pertukaran data antara klien dan pelayan NFS

Akses biasa kepada sistem fail jauh boleh diterangkan dengan skema berikut:

Perihalan proses mengakses fail yang terletak pada pelayan NFS:

Menyediakan pelayan NFS

Penalaan Pelayan umumnya terdiri daripada menetapkan direktori tempatan yang dibenarkan untuk dipasang oleh sistem jauh dalam fail /etc/exports. Tindakan ini dipanggil hierarki direktori eksport. Sumber utama maklumat mengenai direktori yang dieksport ialah fail berikut:

  • /etc/exports- fail konfigurasi utama yang menyimpan konfigurasi direktori yang dieksport. Digunakan semasa memulakan NFS dan oleh utiliti exportfs.
  • /var/lib/nfs/xtab- mengandungi senarai direktori yang dipasang oleh pelanggan jauh. Digunakan oleh imp rpc.mountd apabila pelanggan cuba melekapkan hierarki (rekod pelekapan dibuat).
  • /var/lib/nfs/etab- senarai direktori yang boleh dipasang oleh sistem jauh, menunjukkan semua ciri direktori yang dieksport.
  • /var/lib/nfs/rmtab- senarai direktori yang tidak dieksport pada masa ini.
  • /proc/fs/nfsd- sistem fail khas (kernel 2.6) untuk menguruskan pelayan NFS.
    • eksport- senarai hierarki yang dieksport aktif dan pelanggan kepada siapa mereka dieksport, serta hartanah. Kernel mendapat maklumat ini daripada /var/lib/nfs/xtab.
    • benang- mengandungi bilangan benang (boleh juga diubah)
    • menggunakan filehandle anda boleh mendapatkan penunjuk ke fail
    • dan lain-lain...
  • /proc/net/rpc- mengandungi statistik "mentah", yang boleh diperoleh menggunakan nfsstat, serta pelbagai cache.
  • /var/run/portmap_mapping- maklumat tentang perkhidmatan yang didaftarkan dalam RPC

Catatan: Secara umumnya, di Internet terdapat banyak tafsiran dan rumusan tujuan fail xtab, etab, rmtab, saya tidak tahu siapa yang perlu dipercayai #image.jpg Walaupun di http://nfs.sourceforge.net/ tafsiran tidak jelas.

Menyediakan fail /etc/exports

Dalam kes biasa, fail /etc/exports ialah satu-satunya fail yang memerlukan pengeditan untuk fungsi pelayan NFS. Fail ini mengawal sifat berikut:

  • Apa jenis pelanggan boleh mengakses fail pada pelayan
  • hierarki yang mana? direktori pada pelayan boleh diakses oleh setiap klien
  • Bagaimanakah nama pelanggan tersuai dipaparkan kepada nama pengguna tempatan

Tidak kira baris mana fail eksport mempunyai format berikut:

export_point klien1(fungsi) [klien2(fungsi) ...]

di mana export_point laluan mutlak hierarki direktori yang dieksport, pelanggan1 - n nama 1 atau lebih pelanggan atau alamat IP, dipisahkan oleh ruang, yang dibenarkan untuk dipasang export_point. Fungsi gariskan peraturan pemasangan untuk pelanggan yang ditunjukkan sebelum pilihan.

Ini yang biasa contoh konfigurasi fail eksport:

ARCHIV ~ # cat /etc/exports /archiv1 files(rw,sync) 10.0.0.1(ro,sync) 10.0.230.1/24(ro,sync)

Dalam contoh ini, fail komputer dan 10.0.0.1 dibenarkan akses ke titik eksport /archiv1, manakala fail hos mempunyai akses baca/tulis dan hos 10.0.0.1 dan subnet 10.0.230.1/24 mempunyai akses baca sahaja.

Penerangan hos dalam /etc/exports dibenarkan dalam format berikut:

  • Nama nod individu diterangkan sebagai fail atau fail.DOMAIN.local.
  • Penerangan topeng domain dibuat dalam format berikut: *DOMAIN.local merangkumi semua nod domain DOMAIN.local.
  • Subnet ditentukan sebagai alamat IP/pasangan topeng. Contohnya: 10.0.0.0/255.255.255.0 termasuk semua nod yang alamatnya bermula dengan 10.0.0.
  • Menentukan nama kumpulan rangkaian @myclients yang mempunyai akses kepada sumber (apabila menggunakan pelayan NIS)

Fungsi umum untuk mengeksport hierarki direktori

Fungsi biasa berikut digunakan dalam fail eksport:(pertama, fungsi yang digunakan secara lalai dalam kebanyakan sistem ditunjukkan, dalam kurungan - bukan lalai):

  • auth_nlm (no_auth_nlm) atau kunci_selamat (kunci_tidak selamat)- menyatakan bahawa pelayan harus mendapatkan pengesahan permintaan kunci (menggunakan protokol Pengurus Kunci NFS).
  • nohide (sembunyikan)- jika pelayan mengeksport dua hierarki direktori, manakala satu bersarang (dipasang) dalam satu lagi. Pelanggan mesti, sudah tentu, melekapkan hierarki kedua (kanak-kanak), jika tidak, titik pelekap hierarki kanak-kanak akan kelihatan seperti direktori kosong. Fungsi nohide menghasilkan hierarki direktori ke-2 tanpa pemasangan remeh. (nota: Saya tidak dapat menggunakan pilihan ini...)
  • ro(rw)- Membenarkan permintaan baca (tulis) sahaja. (Akhirnya, sama ada ia boleh dibaca/ditulis atau tidak ditentukan berdasarkan hak sistem fail, dengan semua ini, pelayan tidak dapat membezakan permintaan untuk membaca fail daripada permintaan untuk dilaksanakan, jadi ia membenarkan membaca jika pengguna telah membaca atau melaksanakan hak.)
  • selamat (tidak selamat)- permintaan bahawa permintaan NFS datang dari port selamat (< 1024), чтобы программа без прав root не могла монтировать иерархию каталогов.
  • subtree_check (no_subtree_check)- Jika subdirektori sistem fail dieksport, tetapi bukan keseluruhan sistem fail, pelayan menyemak sama ada fail yang diminta berada dalam subdirektori yang dieksport. Melumpuhkan pengesahan mengurangkan keselamatan tetapi meningkatkan kelajuan pemindahan data.
  • segerak (async)- menyatakan bahawa pelayan harus bertindak balas kepada permintaan hanya selepas menulis konfigurasi yang dilakukan oleh permintaan tersebut ke cakera. Fungsi async memberitahu pelayan untuk tidak menunggu maklumat ditulis ke cakera, yang meningkatkan prestasi tetapi mengurangkan kebolehpercayaan, kerana Sekiranya sambungan putus atau kegagalan peralatan, maklumat mungkin hilang.
  • wdelay (no_wdelay)- mengarahkan pelayan untuk menangguhkan pelaksanaan permintaan tulis jika permintaan tulis berikutnya belum selesai, menulis data dalam blok yang lebih besar. Ini meningkatkan prestasi apabila menghantar baris gilir besar bagi arahan tulis. no_wdelay menentukan untuk tidak menangguhkan pelaksanaan perintah tulis, yang boleh berguna jika pelayan menerima bilangan arahan yang tidak berkaitan tanpa had.

Eksport pautan simbolik dan fail peranti. Apabila mengeksport hierarki direktori yang mengandungi pautan simbolik, objek pautan mesti boleh diakses oleh sistem klien (jauh), dengan kata lain, salah satu daripada peraturan berikut mestilah benar:

  • objek pautan mesti wujud pada sistem fail klien
  • perlu mengeksport dan melekapkan objek rujukan

Fail peranti merujuk kepada antara muka kernel Linux. Apabila anda mengeksport fail peranti, antara muka ini dieksport. Jika sistem klien tidak mempunyai peranti jenis yang sama, peranti yang dieksport tidak akan berfungsi.

Pada sistem klien, apabila memasang objek NFS, anda boleh menggunakan pilihan nodev supaya fail peranti dalam direktori yang dipasang tidak digunakan.

Fungsi lalai mungkin berbeza antara sistem dan boleh didapati dalam /var/lib/nfs/etab. Selepas menerangkan direktori yang dieksport dalam /etc/exports dan memulakan semula pelayan NFS, semua fungsi yang hilang (baca: fungsi lalai) akan ditunjukkan dalam fail /var/lib/nfs/etab.

Fungsi untuk memaparkan (padanan) ID pengguna

Untuk pemahaman yang lebih baik tentang perkara berikut, saya akan menasihati anda untuk membaca artikel Menguruskan Pengguna Linux. Setiap pengguna Linux mempunyai UID dan GID induknya sendiri, yang diterangkan dalam fail /etc/passwd dan /etc/group.

Pelayan NFS menganggap bahawa sistem pengendalian hos jauh telah mengesahkan pengguna dan memberikan mereka UID dan GID yang betul. Mengeksport fail memberikan pengguna sistem klien akses yang sama kepada fail tersebut seolah-olah mereka dilog terus pada pelayan. Sehubungan itu, apabila klien NFS menghantar permintaan kepada pelayan, pelayan menggunakan UID dan GID untuk mengenal pasti pengguna pada sistem setempat, yang boleh membawa kepada beberapa masalah:


Fungsi berikut menetapkan peraturan untuk memaparkan pengguna jauh dalam yang tempatan:

Contoh menggunakan fail pemetaan pengguna:

ARCHIV ~ # cat /etc/file_maps_users # Pemetaan pengguna # ulasan tempatan jauh uid 0-50 Seribu dua # pengguna pemetaan dengan UID jauh 0-50 ke UID setempat Seribu dua gid 0-50 Seribu dua # pengguna pemetaan dengan /span GID jauh 0-50 kepada GID 1002 tempatan

Pengurusan Pelayan NFS

Pelayan NFS diurus menggunakan utiliti berikut:

  • nfsstat
  • showmsecure (tidak selamat)mount
  • exportfs

nfsstat: statistik NFS dan RPC

Utiliti nfsstat membolehkan anda melihat statistik pelayan RPC dan NFS. Fungsi arahan boleh didapati dalam man nfsstat.

showmount: memaparkan maklumat tentang status NFS

utiliti showmount pertanyaan rpc.mountd pada hos jauh tentang sistem fail yang dipasang. Secara lalai, senarai pelanggan yang diisih dikembalikan. kunci:

  • --semua- senarai pelanggan dan titik lekap dipaparkan menunjukkan tempat pelanggan melekapkan direktori. Maklumat ini mungkin tidak boleh dipercayai.
  • --direktori- senarai titik pelekap dipaparkan
  • --eksport- senarai sistem fail yang dieksport diberikan berdasarkan kepercayaan nfsd

Apabila anda menjalankan showmount tanpa hujah, maklumat tentang sistem yang dibenarkan untuk dipasang akan dicetak ke konsol tempatan koleksi. Sebagai contoh, hos ARCHIV memberikan kami senarai direktori yang dieksport dengan alamat IP hos yang dibenarkan untuk melekapkan koleksi yang ditetapkan:

FILES ~ # showmount --exports archive Senarai eksport untuk arkib: /archiv-big 10.0.0.2 /archiv-small 10.0.0.2

Jika anda menentukan nama hos/IP dalam hujah, maklumat tentang hos ini akan dipaparkan:

ARCHIV ~ # fail showmount clnt_create: RPC: Program tidak didaftarkan # mesej ini memberitahu kami bahawa NFSd tidak berjalan pada hos FILES

exportfs: menguruskan direktori yang dieksport

Perintah ini menyediakan koleksi yang dieksport, data dalam fail /etc/exports, adalah lebih tepat untuk menulis bahawa ia tidak berfungsi, tetapi menyegerakkan dengan fail /var/lib/nfs/xtab dan mengalih keluar yang tidak wujud daripada xtab. exportfs dilakukan apabila menjalankan nfsd demon dengan hujah -r. Utiliti exportfs dalam mod kernel 2.6 bercakap dengan imp rpc.mountd melalui fail dalam direktori /var/lib/nfs/ dan tidak bercakap dengan kernel secara langsung. Tanpa ciri, memaparkan senarai sistem fail yang sedang dieksport.

hartanah exportfs:

  • [client:directory-name] - tambah atau alih keluar sistem fail yang ditetapkan untuk klien yang ditetapkan)
  • -v - memaparkan lebih banyak maklumat
  • -r - eksport semula semua koleksi (segerakkan /etc/exports dan /var/lib/nfs/xtab)
  • -u - keluarkan daripada senarai yang dieksport
  • -a - tambah atau alih keluar semua sistem fail
  • -o - fungsi dipisahkan dengan koma (serupa dengan pilihan yang digunakan dalam /etc/exports; iaitu anda boleh menukar fungsi sistem fail yang telah dipasang)
  • -i - jangan gunakan /etc/exports semasa menambah, hanya sifat baris arahan semasa
  • -f - set semula senarai sistem yang dieksport dalam kernel 2.6;

Pelanggan NFS

Sebelum mengakses fail pada sistem fail jauh, pelanggan mesti lekapkannya dan terima daripada pelayan penunjuk kepadanya. Gunung NFS boleh dilakukan menggunakan lekapkan arahan atau menggunakan salah satu pelekap automatik yang membiak (amd, autofs, automount, supermount, superpupermount). Proses pemasangan ditunjukkan dengan sempurna dalam ilustrasi di atas.

hidup pelanggan NFS tidak perlu melepaskan sebarang syaitan, fungsi klien membuat kernel modul kernel/fs/nfs/nfs.ko, yang digunakan semasa memasang sistem fail jauh. Koleksi yang dieksport daripada pelayan boleh dipasang pada klien dengan cara berikut:

  • secara manual menggunakan arahan mount
  • secara automatik semasa but, apabila memasang sistem fail yang digariskan dalam /etc/fstab
  • secara automatik menggunakan syaitan autofs

Saya tidak akan mempertimbangkan kaedah ke-3 dengan autof dalam artikel ini, kerana jumlah maklumatnya yang besar. Mungkin akan ada penerangan berasingan dalam artikel-artikel seterusnya.

Memasang Sistem Fail Rangkaian dengan arahan pelekap

Contoh penggunaan arahan mount dibentangkan dalam post Block Device Control Commands. Di sini saya akan melihat contoh arahan mount untuk memasang sistem fail NFS:

FAIL ~ # mount -t nfs archiv:/archiv-small /archivs/archiv-small FILES ~ # mount -t nfs -o ro archiv:/archiv-big /archivs/archiv-big FILES ~ # mount ..... .. arkiv:/archiv-small pada /archivs/archiv-jenis kecil nfs (rw,addr=10.0.0.6) archiv:/archiv-besar pada /archivs/archiv-jenis nfs (ro,addr=10.0.0.6)

Perintah pertama melekapkan direktori /archiv-small yang dieksport pada pelayan arkiv ke titik pelekap setempat /archivs/archiv-small dengan pilihan lalai (dengan kata lain, baca-tulis).

Walaupun arahan mount dalam pengedaran terkini ia dapat memikirkan jenis sistem fail yang digunakan walaupun tanpa menyatakan jenisnya; namun, lebih baik untuk menentukan parameter -t nfs. Perintah ke-2 melekapkan direktori yang dieksport /archiv-big pada pelayan arkiv ke direktori tempatan /archivs/archiv-big dengan pilihan baca sahaja (ro). arahan mount tanpa ciri jelas menunjukkan kepada kita hasil pemasangan. Selain fungsi baca sahaja (ro), yang lain boleh ditentukan fungsi utama apabila memasang NFS:

  • nosuid- Fungsi ini melarang pelaksanaan program setuid daripada direktori yang dipasang.
  • nodev(tiada peranti - bukan peranti) - Fungsi ini melarang penggunaan aksara dan menyekat fail khas sebagai peranti.
  • kunci (nolock)- Membenarkan penguncian NFS (lalai). nolock melumpuhkan penguncian NFS (tidak menjalankan lockd) dan mudah apabila bekerja dengan pelayan lama yang tidak menyokong penguncian NFS.
  • mounthost=nama- Nama hos yang NFS mountless dijalankan - mountd.
  • mountport=n - Port yang digunakan oleh imp yang dipasang.
  • pelabuhan=n- port yang digunakan untuk menyambung ke pelayan NFS (lalai ialah 2049 jika rpc.nfsd tidak didaftarkan pada pelayan RPC). Jika n=0 (lalai), maka NFS menghantar permintaan ke peta port pada pelayan untuk mencari port.
  • saiz=n(baca saiz blok - baca saiz blok) - Bilangan bait dibaca pada satu masa daripada pelayan NFS. Standard - 4096.
  • wsize=n(tulis saiz blok - tulis saiz blok) - Bilangan bait yang ditulis pada satu masa ke pelayan NFS. Standard - 4096.
  • tcp atau udp- Untuk memasang NFS, gunakan protokol TCP atau UDP, masing-masing.
  • bg- Jika anda kehilangan akses kepada pelayan, ulangi ujian di latar belakang supaya tidak mengganggu proses but sistem.
  • fg- Jika anda kehilangan akses kepada pelayan, ulangi ujian dalam mod keutamaan. Pilihan ini boleh menyekat proses but sistem dengan mengulangi percubaan pemasangan. Atas sebab ini, parameter fg digunakan terutamanya untuk penyahpepijatan.

Fungsi yang mempengaruhi caching atribut pada lekapan NFS

Atribut fail, disimpan dalam inod (deskriptor indeks), seperti masa pengubahsuaian, saiz, pautan keras, pemilik, biasanya berubah sekali-sekala untuk fail biasa dan lebih jarang untuk direktori. Banyak program, seperti ls, mengakses fail baca sahaja dan tidak menukar atribut atau kandungan fail, tetapi membuang sumber sistem pada operasi rangkaian yang mahal.

Untuk mengelakkan pembaziran sumber yang tidak perlu, anda boleh cache atribut ini. Kernel menggunakan masa pengubahsuaian fail untuk menentukan sama ada cache sudah lapuk dengan membandingkan masa pengubahsuaian dalam cache dan masa pengubahsuaian fail itu sendiri. Cache atribut dikemas kini secara berkala mengikut parameter ini:

  • ac (noac)(cache attrebute - caching atribut) - Membenarkan caching atribut (secara lalai). Walaupun noac memperlahankan pelayan, ia mengelakkan sifat basi apabila berbilang pelanggan secara aktif menulis maklumat kepada hierarki biasa.
  • acdirmax=n(maksimum fail direktori cache atribut - cache atribut maksimum untuk fail direktori) - Bilangan maksimum saat yang NFS tunggu sebelum mengemas kini atribut direktori (lalai Enam puluh saat)
  • acdirmin=n(minimum fail direktori cache atribut - cache atribut minimum untuk fail direktori) - Sebilangan kecil saat yang NFS tunggu sebelum mengemas kini atribut direktori (lalai 30 saat)
  • acregmax=n(maksimum fail cache atribut - cache atribut maksimum untuk fail biasa) - Bilangan saat maksimum yang NFS tunggu sebelum mengemas kini atribut fail biasa (lalai: Enam puluh saat)
  • acregmin=n(minimum fail cache atribut - cache atribut minimum untuk fail biasa) - Sebilangan kecil saat yang NFS tunggu sebelum mengemas kini atribut fail biasa (lalai Tiga saat)
  • acteo=n(masa tamat cache atribut - tamat masa cache atribut) - Menggantikan nilai untuk semua pilihan di atas. Jika acteo tidak dinyatakan, maka nilai di atas mengambil nilai lalai.

Fungsi Pengendalian Ralat NFS

Fungsi berikut mengawal perkara yang dilakukan oleh NFS apabila tiada respons daripada pelayan atau apabila ralat I/O berlaku:

  • fg(bg)(latar depan - latar depan, latar belakang - latar belakang) - Buat probe pelekap NFS yang gagal di latar depan/latar belakang.
  • keras (lembut)- memaparkan mesej "pelayan tidak bertindak balas" kepada konsol apabila tamat masa dicapai dan meneruskan ujian pemasangan. Dengan fungsi ini lembut- semasa tamat masa, melaporkan ralat I/O kepada program yang memanggil operasi. (adalah disyorkan untuk tidak menggunakan pilihan lembut)
  • nointr (intr)(tiada gangguan) - Tidak membenarkan isyarat untuk mengganggu operasi fail dalam hierarki direktori yang dipasang keras apabila tamat masa yang besar dicapai. intr- membolehkan gangguan.
  • retrans=n(nilai penghantaran semula) - Selepas n tamat masa kecil, NFS menjana tamat masa yang besar (lalai 3). Tamat masa yang besar menghentikan operasi atau mencetak mesej "pelayan tidak bertindak balas" ke konsol, bergantung pada sama ada fungsi keras/lembut ditentukan.
  • cuba semula=n(nilai cuba semula) - Bilangan minit perkhidmatan NFS akan mengulangi operasi pelekap sebelum menyerah (lalai 10000).
  • timeo=n(nilai tamat masa) - Bilangan ke-10 saat perkhidmatan NFS menunggu sebelum menghantar semula sekiranya RPC atau tamat masa kecil (lalai 7). Nilai ini meningkat dengan setiap tamat masa kepada nilai yang lebih besar iaitu Enam puluh saat atau sehingga tamat masa yang besar berlaku. Jika rangkaian sibuk, pelayan lambat, atau permintaan melalui berbilang penghala atau get laluan, meningkatkan nilai ini boleh meningkatkan prestasi.

Lekapkan NFS automatik semasa but (penerangan sistem fail dalam /etc/fstab)

Saya menyentuh perihalan fail /etc/fstab dalam artikel yang sepadan. Dalam contoh semasa, saya akan melihat beberapa contoh pemasangan sistem fail NFS dengan penerangan tentang pilihan:

FAIL ~ # kucing /etc/fstab | grep nfs archiv:/archiv-small /archivs/archiv-small nfs rw,timeo=4,rsize=16384,wsize=16384 Null Null nfs-server:/archiv-big /archivs/archiv-big nfs rw,timeo=50 ,keras,fg Zero 0

Contoh pertama melekapkan sistem fail /archiv-small daripada hos arkiv ke titik lekap /archivs/archiv-small, jenis sistem fail ditentukan sebagai nfs (sentiasa mesti dinyatakan untuk jenis ini), sistem fail dipasang dengan pilihan baca-tulis (rw) .

Hos arkib disambungkan melalui saluran tempatan yang pantas, jadi untuk meningkatkan prestasi, parameter timeo telah dikurangkan dan nilai rsize dan wsize telah meningkat dengan ketara. Medan untuk program dump dan fsck ditetapkan kepada sifar supaya program ini tidak menggunakan sistem fail yang dipasang NFS.

Contoh ke-2 memasang sistem fail /archiv-big daripada hos pelayan nfs. Kerana Kami disambungkan kepada hos pelayan nfs melalui sambungan yang perlahan, parameter timeo dinaikkan kepada 5 saat (50 10 saat), dan parameter keras juga ditetapkan keras supaya NFS terus memasang semula sistem fail selepas lama. tamat masa, parameter fg juga ditetapkan, supaya apabila sistem but dan hos pelayan nfs tidak tersedia, ia tidak membeku.

Sebelum menyimpan konfigurasi dalam /etc/fstab, pastikan anda cuba melekap secara manual dan pastikan semuanya berfungsi!!!

Prestasi NFS yang dipertingkatkan

Prestasi NFS boleh dipengaruhi oleh beberapa perkara, terutamanya apabila menjalankan sambungan yang perlahan. Apabila bekerja dengan sambungan yang perlahan dan banyak dimuatkan, lebih baik menggunakan parameter keras supaya tamat masa tidak menyebabkan program berhenti berfungsi. Tetapi anda perlu mempertimbangkan bahawa jika anda memasang sistem fail melalui NFS dengan parameter keras melalui fstab, dan hos jauh tidak dapat dicapai, maka sistem akan membeku apabila but.

Selain itu, salah satu cara paling mudah untuk meningkatkan prestasi NFS adalah dengan meningkatkan bilangan bait yang dipindahkan pada satu masa. Saiz Empat ribu sembilan puluh enam bait adalah sangat kecil untuk sambungan pantas moden, meningkatkan nilai ini kepada Lapan ribu 100 sembilan puluh dua atau lebih boleh didapati secara eksperimen untuk mencari kelajuan terbaik.

Juga, seseorang tidak boleh terlepas pandang fungsi tamat masa. NFS menunggu respons kepada pemindahan data dalam tempoh masa yang dinyatakan dalam fungsi timeo; jika respons tidak diterima dalam masa ini, maka pemindahan berulang dibuat.

Tetapi pada sambungan yang sibuk dan perlahan, masa ini mungkin kurang daripada masa tindak balas pelayan dan kapasiti saluran komunikasi, mengakibatkan penghantaran semula yang tidak perlu yang melambatkan kerja. Secara lalai, timeo ialah 0.7 saat (700 milisaat). selepas tiada respons untuk Tujuh ratus ms, pelayan akan menghantar semula dan menggandakan masa menunggu kepada 1.4 saat, peningkatan masa akan terus ke nilai yang lebih tinggi iaitu Enam puluh saat. Seterusnya, bergantung pada parameter keras/lembut, beberapa tindakan akan berlaku (lihat di atas).

Anda boleh memilih masa terbaik untuk nilai khusus paket yang dihantar (nilai saiz/wsize) menggunakan arahan ping:

FAIL ~ # ping -s 30 dua ribu tujuh ratus enam puluh lapan arkib PING arkib.DOMAIN.tempatan (10.0.0.6) 32768(32796) bait data. 30 dua ribu tujuh ratus 70 6 bait daripada archiv.domain.local (10.0.0.6): icmp_req=1 ttl=64 masa=0.931 ms 30 dua ribu tujuh ratus 70 6 bait daripada archiv.domain.local (10.0.0.6): icmp_req= 2 ttl=64 masa=0.958 ms 30 dua ribu tujuh ratus 70 6 bait daripada archiv.domain.local (10.0.0.6): icmp_req=3 ttl=64 masa=1.03 ms 30 dua ribu tujuh ratus 70 6 bait daripada arkib .domain.local (10.0.0.6): icmp_req=4 ttl=64 masa=1.00 ms 30 dua ribu tujuh ratus 70 6 bait daripada archiv.domain.local (10.0.0.6): icmp_req=5 ttl=64 masa=1.08 ms ^C --- archiv.DOMAIN.statistik ping tempatan --- 5 paket dihantar, 5 diterima, kehilangan paket 0%, masa 4006ms rtt min/avg/max/mdev = 0.931/1.002/1.083/0.061 ms

Seperti yang anda lihat, apabila menghantar paket bersaiz 30 dua ribu tujuh ratus enam puluh lapan (32Kb), masa perjalanannya dari klien ke pelayan dan belakang terapung sekitar Satu milisaat. Jika masa ini melebihi dua ratus ms, maka anda harus berfikir tentang meningkatkan nilai masa supaya ia melebihi nilai pertukaran sebanyak tiga hingga empat kali. Oleh itu, adalah lebih baik untuk melakukan ujian ini semasa beban rangkaian yang berat

Melancarkan NFS dan menyediakan Firewall

Nota itu disalin dari blog http://bog.pp.ru/work/NFS.html, yang mana terima kasih banyak!!!

Jalankan pelayan NFS, lekapkan, sekat, kuota dan status dengan port "betul" (untuk tembok api)

  • adalah lebih baik untuk mula-mula menyahlekap semua sumber pada pelanggan
  • hentikan dan lumpuhkan rpcidmapd daripada bermula jika NFSv4 tidak dirancang: chkconfig --level Three hundred 40 5 rpcidmapd off service rpcidmapd stop
  • jika perlu, benarkan perkhidmatan portmap, nfs dan nfslock bermula: chkconfig --levels Three hundred 40 5 portmap/rpcbind on chkconfig --levels Three hundred 40 5 nfs on chkconfig --levels Three hundred 40 5 nfslock on
  • jika perlu, hentikan perkhidmatan nfslock dan nfs, mulakan portmap/rpcbind, punggah modul perkhidmatan nfslock stop service nfs stop service portmap start # service rpcbind start umount /proc/fs/nfsd service rpcidmapd stop rmmod nfsd service autofs stop # somewhere later it mesti dijalankan rmmod nfs rmmod nfs_acl rmmod lockd
  • buka port dalam iptables
    • untuk RPC: UDP/111, TCP/111
    • untuk NFS: UDP/2049, TCP/2049
    • untuk rpc.statd: UDP/4000, TCP/4000
    • untuk dikunci: UDP/4001, TCP/4001
    • untuk dipasang: UDP/4002, TCP/4002
    • untuk rpc.rquota: UDP/4003, TCP/4003
  • untuk pelayan rpc.nfsd, tambah baris RPCNFSDARGS="--port 2049" ke /etc/sysconfig/nfs
  • untuk pelayan mount, tambahkan baris MOUNTD_PORT=4002 ke /etc/sysconfig/nfs
  • untuk fungsi rpc.rquota untuk versi baharu anda perlu menambah baris RQUOTAD_PORT=4003 ke /etc/sysconfig/nfs
  • untuk fungsi rpc.rquota adalah perlu untuk versi lama (lagipun, anda mesti mempunyai pakej kuota 3.08 atau lebih baru) tambah pada /etc/services rquotad 4003/tcp rquotad 4003/udp
  • akan menyemak kecukupan /etc/exports
  • jalankan perkhidmatan rpc.nfsd, mountd dan rpc.rquota (rpcsvcgssd dan rpc.idmapd dilancarkan pada masa yang sama, jika anda ingat untuk memadamkannya) perkhidmatan nfsd mula atau dalam versi baharu perkhidmatan nfs mula
  • untuk pelayan penyekat untuk sistem baharu, tambahkan baris LOCKD_TCPPORT=4001 LOCKD_UDPPORT=4001 ke /etc/sysconfig/nfs
  • untuk pelayan kunci untuk sistem lama, tambah terus ke /etc/modprobe[.conf]: options lockd nlm_udpport=4001 nlm_tcpport=4001
  • ikat pelayan status rpc.statd ke port Empat ribu (untuk sistem lama, jalankan rpc.statd dengan kekunci -p 4000 dalam /etc/init.d/nfslock) STATD_PORT=4000
  • mulakan perkhidmatan lockd dan rpc.statd perkhidmatan nfslock bermula
  • pastikan semua port diikat secara normal menggunakan "lsof -i -n -P" dan "netstat -a -n" (sesetengah port digunakan oleh modul kernel yang lsof tidak nampak)
  • jika sebelum "membina semula" pelayan digunakan oleh pelanggan dan mereka tidak dapat dinyahlekap, maka anda perlu memulakan semula perkhidmatan pemasangan automatik pada pelanggan (am-utils, autofs)

Contoh konfigurasi pelayan dan klien NFS

Konfigurasi pelayan

Jika anda ingin menjadikan direktori partition NFS anda awam dan boleh ditulis, anda boleh menggunakan pilihan all_squash dalam kombinasi dengan pilihan anonuid dan anongid. Sebagai contoh, untuk menetapkan kebenaran untuk pengguna "tiada sesiapa" dalam kumpulan "tiada sesiapa", anda boleh melakukan perkara berikut:

ARCHIV ~ # cat /etc/exports # Akses baca dan tulis untuk klien pada 192.168.0.100, dengan akses rw untuk pengguna Sembilan puluh sembilan dengan gid Ninety-nine /files 192.168.0.100(rw,sync,all_squash,anonuid=99,anongid = 99)) # Akses baca dan tulis untuk klien pada 192.168.0.100, dengan akses rw untuk pengguna Sembilan puluh sembilan dengan gid Sembilan puluh sembilan /files 192.168.0.100(rw,sync,all_squash,anonuid=99,anongid=99))

Ini juga bermakna jika anda ingin membenarkan akses kepada direktori yang ditetapkan, nobody.nobody mesti menjadi pemilik direktori kongsi:

# chown -R nobody.nobody /files

Konfigurasi Pelanggan

Pada klien, anda perlu melekapkan direktori jauh dengan cara yang mudah, contohnya dengan arahan pelekap:

FAIL ~ # mount -t nfs archive:/files /archivs/files

Ringkasan

Fuh... Artikel dah habis. Pada masa ini kami telah belajar apa itu Sistem Fail Rangkaian dan cara memakannya, dalam artikel seterusnya saya akan cuba membuat HOWTO dengan pengesahan Kerberos. Saya harap bahan itu boleh difahami dan diperlukan.

Saya akan gembira melihat penambahan dan komen anda!

NFS HOWTO, nfs.sourceforge, man nfs? man mount, man eksport

RFC Seribu sembilan puluh empat - NFSv1, v2
RFC Seribu lapan ratus tiga belas - NFSv3
RFC Tiga ribu 500 30 - NFSv4
RFC 5 ribu 600 enam puluh satu - NFSv4.1
NFS HOWTO
nfs.sourceforge.net
lelaki gunung
eksport manusia

"dan anda sudah mempunyai idea tentang "sistem fail rangkaian", keupayaan dan tahap keselamatannya. Walau bagaimanapun, dalam artikel ini semuanya difahami terutamanya dari sudut pandangan pelanggan... tetapi apa yang perlu dilakukan jika anda ingin mempunyai pelayan NFS anda sendiri? (nota: "fuck" tidak bermaksud "break", tetapi bermaksud "pasang dan konfigurasi").

Nah, jika anda mempunyai keinginan sedemikian, maka soalan pertama yang harus anda tanyakan kepada diri sendiri ialah: "Untuk apa seekor kambing memerlukan akordion?" Untuk memasang pelayan NFS di rumah
agak sia-sia - tiada siapa yang akan menghargainya, tetapi jika anda cukup bernasib baik untuk menjadi pentadbir di pejabat "lelaki berbaju hitam", atau dalam "Rangkaian HOME" yang baru - maka ini adalah perkara yang sama sekali berbeza...

Melancarkan pelayan itu sendiri adalah perkara yang agak mudah; jika anda membaca artikel sebelumnya, anda boleh mengendalikannya dengan baik. Jadi, anda memerlukan daemon berikut:

  • nfsd - perkhidmatan protokol langsung
    NFS;
  • mountd - operasi pemasangan servis;
  • rpc.portmap - daemon port RPC; diperlukan kerana permintaan kepada pelayan NFS dihantar dalam bentuk paket
    RPC;

Bagaimana hendak melakukannya? Ia sangat mudah - pergi ke fail "/etc/rc.d/rc.inet2" dan nyahkomen baris yang sepadan. Segala-galanya boleh dianggap bahawa pelancaran awal telah selesai; ia akan menjadi lebih sukar untuk menetapkan semuanya...
Perkara pertama yang perlu diputuskan ialah siapa yang mempunyai hak apa mengenai maklumat ini atau itu. Ini dikonfigurasikan melalui fail /etc/exports. Terdapat kebenaran "baca" dan "baca-tulis". Cara untuk menyediakan ini diterangkan dalam "Asas"
NFS".

Yang kedua ialah, sudah tentu, beban pada pelayan, i.e. bilangan pengguna aktif dan anggaran permintaan mereka. Permintaan kepada pelayan NFS biasanya dibahagikan kepada dua jenis: yang pertama ialah apabila klien bekerja dengan atribut, yang kedua ialah apabila pelanggan meminta data secara langsung. Permintaan jenis pertama sedang mencari fail, membaca senarai kebenaran, dsb., sudah tentu, anda faham bahawa ia memuatkan rangkaian dengan ringan. Permintaan jenis kedua ialah pemindahan dan penerimaan kandungan fail terus daripada klien; dan di sinilah persoalan timbul: "apa yang akan dihantar dan berapa kerap?" Ini amat relevan jika anda mempunyai rangkaian 10 Mbit/s (secara ringkasnya, rangkaian Rusia standard). Jika anda tahu, maka 10 Mbit/s adalah lebih sedikit daripada 1 MB sesaat; Sememangnya, jika fail bersaiz berpuluh-puluh megabait sentiasa dipindahkan, rangkaian akan mati begitu saja. Jika ini adalah situasi anda, maka anda perlu memasang caching data pada mesin klien (biod daemon). Kemudian, setelah meminta fail dan mengaksesnya semula, pelanggan tidak akan "memuat turun" semula dari pelayan, tetapi akan mengambilnya dari cachenya; pada masa yang sama, ia akan sentiasa diperiksa sama ada fail pada pelayan telah berubah, dan jika fakta perubahan dikesan, fail dalam cache akan digantikan dengan "versi baru"
(seperti yang anda faham, menyemak "telah menukar fail" ialah pertanyaan "mengikut atribut", yang selalunya beratus kali lebih kecil daripada fail itu sendiri).

Nah: kami melancarkan pelayan NFS, menentukan kebenaran akses, menangani beban... Sekarang yang tinggal hanyalah mengisi skru dengan maklumat yang diperlukan dan menggunakannya
Keupayaan NFS sepenuhnya...

Daripada kesimpulan:

Jika anda berhadapan dengan persoalan mengatur pertukaran data pada rangkaian, maka jangan teragak-agak untuk memilih NFS - NFS adalah tiga kepala lebih tinggi daripada
FTP adalah kepala dan bahu di atas "belon" Windows dan ia tidak begitu sukar untuk disediakan...

NFS
Tahap (mengikut model OSI):Digunakan
Keluarga:Timbunan protokol TCP/IP
Port/ID:67, 68/UDP
Tujuan protokol:Mendapatkan konfigurasi rangkaian
Spesifikasi:RFC 2131
Pelaksanaan utama (pelayan):dhcpd, Pelayan DHCP ISC, Infoblox
Berkuatkuasa dari: 1990

NFS mengasingkan diri daripada jenis sistem fail pelayan dan klien, dan terdapat banyak pelayan NFS dan pelaksanaan klien untuk sistem pengendalian dan seni bina perkakasan yang berbeza. Versi NFS yang paling matang ialah v.4, yang menyokong pelbagai cara pengesahan (khususnya, Kerberos dan LIPKEY menggunakan protokol RPCSEC GSS) dan senarai kawalan akses (kedua-dua jenis POSIX dan Windows).

Organisasi umum NFS

NFS memberikan pelanggan akses telus kepada fail pelayan dan sistem fail. Tidak seperti FTP, protokol NFS hanya mengakses bahagian fail yang diakses oleh proses, dan kelebihan utamanya ialah ia menjadikan akses ini telus. Ini bermakna bahawa mana-mana aplikasi klien yang boleh berfungsi dengan fail tempatan boleh berfungsi dengan mudah dengan fail NFS, tanpa sebarang pengubahsuaian pada program itu sendiri.

Pelanggan NFS mengakses fail pada pelayan NFS dengan menghantar permintaan RPC ke pelayan. Ini boleh dilaksanakan menggunakan proses pengguna biasa - iaitu, klien NFS boleh menjadi proses pengguna yang membuat panggilan RPC khusus ke pelayan, yang juga boleh menjadi proses pengguna.

Satu bahagian penting dalam versi terkini piawaian NFS (v4.1) ialah spesifikasi pNFS, bertujuan untuk menyediakan pelaksanaan selari perkongsian fail, meningkatkan kelajuan pemindahan data mengikut nisbah saiz dan tahap keselarian sistem.

cerita

Protokol NFS mempunyai 4 versi dalam sejarahnya.

Versi pertama hanya digunakan untuk kegunaan dalaman di Sun untuk tujuan percubaan. Versi 2 dikeluarkan pada Mac 1989, pada mulanya dijalankan sepenuhnya melalui UDP. Pembangun memutuskan untuk tidak menyimpan data keadaan dalaman di dalam protokol, seperti penguncian yang dilaksanakan di luar protokol asas. Orang yang terlibat dalam mencipta NFS versi 2 ialah Rusty Sandberg, Bob Lyon, Bill Joy dan Steve Kleiman.

NFSv3 dikeluarkan pada Jun 1995, ia menambah sokongan untuk deskriptor fail bersaiz berubah-ubah sehingga 64 bait (dalam versi 2 - tatasusunan saiz tetap 32 bait), mengalih keluar had 8192 bait dalam RPC panggilan baca dan tulis (oleh itu, saiz blok yang dipindahkan dalam panggilan dihadkan hanya oleh had untuk datagram UDP - 65535 bait), sokongan untuk fail besar telah dilaksanakan, panggilan tak segerak untuk menulis operasi disokong, panggilan ke prosedur READ dan WRITE telah ditambahkan pada panggilan ACCESS (menyemak hak akses fail), MKNOD (membuat fail Unix khas), READDIRPLUS (mengembalikan nama fail dalam direktori bersama-sama dengan atributnya), FSINFO (mengembalikan maklumat statistik tentang sistem fail), FSSTAT (mengembalikan maklumat dinamik tentang sistem fail), PATHCONF (mengembalikan maklumat POSIX.1 tentang fail) dan COMMIT (menghantar rekod tak segerak yang dibuat sebelum ini untuk storan kekal). Pada masa pengenalan versi 3, terdapat peningkatan dalam populariti di kalangan pembangun protokol TCP. Sesetengah pembangun bebas secara bebas menambah sokongan TCP kepada NFS versi 2 sebagai protokol pengangkutan, Sun Microsystems menambah sokongan TCP kepada NFS dalam salah satu tambahan kepada versi 3. Sokongan TCP meningkatkan kebolehlaksanaan praktikal menggunakan NFS dalam rangkaian kawasan luas.

NFSv4 dikeluarkan pada Disember 2000, dipengaruhi oleh AFS dan CIFS, dan termasuk peningkatan prestasi dan keselamatan. Versi 4 ialah versi pertama yang dibangunkan bersama dengan Pasukan Petugas Kejuruteraan Internet (IETF). NFS v4.1 telah diluluskan oleh IESG pada Januari 2010 (spesifikasi baharu, pada 612 muka surat, dikenali sebagai dokumen terpanjang yang diluluskan oleh IETF). Inovasi penting dalam versi 4.1 ialah spesifikasi pNFS - NFS Selari, mekanisme untuk akses pelanggan NFS selari kepada data daripada pelayan NFS berbilang teragih. Kehadiran mekanisme sedemikian dalam standard sistem fail rangkaian akan membantu membina storan awan dan sistem maklumat teragih.

Matlamat Pembangunan

Keperluan awal untuk pembangunan NFS adalah:

  • sokongan berpotensi untuk pelbagai sistem pengendalian (bukan hanya UNIX), supaya pelayan dan pelanggan NFS boleh dilaksanakan pada sistem pengendalian yang berbeza;
  • protokol tidak boleh bergantung pada mana-mana perkakasan tertentu;
  • mekanisme pemulihan mudah harus dilaksanakan sekiranya pelayan atau klien gagal;
  • aplikasi mesti mempunyai akses telus kepada fail jauh tanpa menggunakan nama laluan atau perpustakaan khas dan tanpa penyusunan semula;
  • Semantik UNIX mesti disokong untuk pelanggan UNIX;
  • Prestasi NFS hendaklah setanding dengan prestasi cakera tempatan;
  • pelaksanaannya tidak seharusnya bergantung kepada kenderaan.

Cara NFS berfungsi

NFS dibina daripada sekurang-kurangnya dua bahagian utama: pelayan dan satu atau lebih pelanggan. Pelanggan mengakses data yang terletak pada pelayan dalam mod akses jauh. Agar ini berfungsi dengan baik, beberapa proses perlu dikonfigurasikan dan dilancarkan. Pelaksanaan NFS terdiri daripada beberapa komponen. Sebahagian daripada mereka disetempatkan sama ada pada pelayan atau klien, dan sesetengahnya digunakan pada kedua-dua belah sambungan. Sesetengah komponen tidak diperlukan untuk menyediakan fungsi teras, tetapi merupakan sebahagian daripada antara muka NFS lanjutan.

Protokol NFS mentakrifkan satu set permintaan (operasi) yang boleh dihantar oleh klien ke pelayan, serta satu set argumen dan nilai pulangan untuk setiap permintaan ini. Versi 1 protokol ini hanya wujud dalam kedalaman Sun Microsystems dan tidak pernah dikeluarkan. Semua pelaksanaan NFS (termasuk NFSv3) menyokong NFS versi 2 (NFSv2), yang pertama kali dikeluarkan pada tahun 1985 dengan SunOS 2.0. Versi 3 protokol telah diterbitkan pada tahun 1993 dan telah dilaksanakan oleh beberapa vendor.

Protokol Panggilan Prosedur Jauh (RPC) mentakrifkan format semua interaksi antara klien dan pelayan. Setiap permintaan NFS dihantar sebagai paket RPC. Daemon berikut sedang berjalan pada pelayan:

  • rpc.nfsd - Daemon pelayan NFS utama ialah nfsd (kadangkala dipanggil nfsd4 dalam versi baharu). Daemon ini menyediakan permintaan daripada pelanggan NFS. Parameter RPCNFSDCOUNT dalam fail /etc/default/nfs-kernel-server pada Debian dan NFSDCOUNT dalam fail /etc/sysconfig/nfs pada RedHat menentukan bilangan daemon untuk dimulakan (lalai ialah 8). (Program RPC 100003)
  • rpc.mountd - NFS mount daemon mountd memproses permintaan klien untuk melekapkan direktori. Daemon yang dipasang berjalan pada pelayan NFS. (Program RPC 100005)
  • rpc.statd - Daemon pemantauan status rangkaian (aka Network Status Monitor, aka NSM). Ia membolehkan anda membatalkan kunci dengan betul selepas ranap/but semula. Untuk memberitahu tentang kegagalan, ia menggunakan program /usr/sbin/sm-notify. Daemon statd berjalan pada kedua-dua pelayan dan pelanggan. Sebelum ini, pelayan ini diperlukan untuk rpc.lockd berfungsi, tetapi kernel kini bertanggungjawab untuk mengunci. (Program RPC 100021 dan 100024 - dalam versi baharu)
  • rpc.lockd - Daemon lockd (aka pengurus kunci NFS (NLM)) mengendalikan permintaan kunci fail. Daemon pengunci berjalan pada kedua-dua pelayan dan pelanggan. Pelanggan meminta penguncian fail, dan pelayan membenarkannya. (usang dan tidak digunakan sebagai daemon dalam pengedaran baharu. Fungsinya dalam pengedaran moden (dengan kernel lebih lama daripada 2.2.18) dilakukan oleh kernel (lockd). (RPC program 100024)
  • rpc.idmapd - Daemon idmapd untuk NFSv4 pada pelayan menukar uid/gid tempatan pengguna kepada format nama@domain dan perkhidmatan pada klien menukar nama pengguna/kumpulan nama borang@domain kepada pengguna tempatan dan pengecam kumpulan (mengikut fail konfigurasi /etc/idmapd .conf).

Pelanggan juga boleh menjalankan daemon yang dipanggil nfsiod. nfsiod menyediakan permintaan sebelah pelayan daripada pelayan NFS. Ia adalah pilihan, meningkatkan prestasi, tetapi tidak diperlukan untuk operasi normal dan betul. Dalam NFSv4, apabila menggunakan Kerberos, daemon tambahan dimulakan:

  • rpc.gssd - Daemon NFSv4 menyediakan kaedah pengesahan melalui GSS-API (pengesahan Kerberos). Berfungsi pada klien dan pelayan.
  • rpc.svcgssd - Daemon pelayan NFSv4 yang menyediakan pengesahan klien sebelah pelayan.

Daemon versi lama (NFS v.3 dan ke bawah):

  • nfslogd - aktiviti log daemon log NFS untuk sistem fail yang dieksport, berjalan pada pelayan NFS
  • rpc.rquotad - pelayan kuota jauh menyediakan maklumat tentang kuota pengguna pada sistem fail jauh, boleh dijalankan pada kedua-dua pelayan dan pelanggan.

Sebagai tambahan kepada pakej di atas, untuk NFSv2 dan v3 berfungsi dengan betul, pakej peta port tambahan diperlukan (digantikan dalam pengedaran yang lebih baharu dengan dinamakan semula rpcbind). Sun RPC ialah pelayan yang menukar nombor program RPC (Remote Procedure Call) kepada nombor port TCP/UDP.

portmap beroperasi pada beberapa entiti:

  • Panggilan atau permintaan RPC
  • Port TCP/UDP, versi protokol (tcp atau udp)
  • nombor program dan versi program

Daemon portmap dilancarkan oleh skrip /etc/init.d/portmap sebelum perkhidmatan NFS bermula.

Tugas pelayan RPC (Remote Procedure Call) adalah untuk memproses panggilan RPC (yang dipanggil prosedur RPC) daripada proses tempatan dan jauh. Menggunakan panggilan RPC, perkhidmatan mendaftar atau memadamkan diri mereka sendiri ke/daripada pemeta port (portmap, portmapper, juga dikenali sebagai rpcbind dalam versi baharu), dan pelanggan, menggunakan panggilan RPC, menghantar permintaan kepada portmapper untuk mendapatkan maklumat yang diperlukan.

Pengendalian pelayan RPC boleh diwakili oleh langkah-langkah berikut:

  1. Penukar port harus bermula dahulu, biasanya apabila sistem but. Ini mencipta titik akhir TCP dan membuka port TCP 111. Ia juga mencipta titik akhir UDP yang menunggu datagram UDP tiba pada port UDP 111.
  2. Pada permulaan, program yang dijalankan melalui pelayan RPC mencipta titik akhir TCP dan titik akhir UDP untuk setiap versi program yang disokong. (Pelayan RPC boleh menyokong berbilang versi. Pelanggan menentukan versi yang diperlukan semasa membuat panggilan RPC.) Nombor port yang diperuntukkan secara dinamik diberikan kepada setiap versi perkhidmatan. Pelayan log setiap program, versi, protokol, dan nombor port dengan membuat panggilan RPC yang sesuai.
  3. Apabila program klien RPC perlu mendapatkan maklumat yang diperlukan, ia memanggil rutin penyelesai port untuk mendapatkan nombor port yang diperuntukkan secara dinamik untuk program, versi dan protokol yang ditentukan.
  4. Sebagai tindak balas kepada permintaan ini, utara mengembalikan nombor port.
  5. Pelanggan menghantar mesej permintaan RPC ke nombor port yang diperoleh dalam langkah 4. Jika UDP digunakan, pelanggan hanya menghantar datagram UDP yang mengandungi mesej cabaran RPC ke nombor port UDP di mana perkhidmatan yang diminta sedang berjalan. Sebagai tindak balas, perkhidmatan menghantar datagram UDP yang mengandungi mesej respons RPC. Jika TCP digunakan, pelanggan secara aktif membuka ke nombor port TCP perkhidmatan yang dikehendaki dan kemudian menghantar mesej cabaran RPC melalui sambungan yang telah ditetapkan. Pelayan bertindak balas dengan mesej tindak balas RPC pada sambungan.

Untuk mendapatkan maklumat daripada pelayan RPC, utiliti rpcinfo digunakan; ia memaparkan nombor program berdaftar, versi, protokol, port dan nama. Anda juga boleh menggunakan rpcinfo untuk mengalih keluar pendaftaran program atau mendapatkan maklumat tentang perkhidmatan RPC individu. Apabila anda menentukan parameter hos -p, atur cara memaparkan senarai semua program RPC berdaftar pada hos hos. Tanpa menyatakan hos, program akan memaparkan perkhidmatan pada localhost.

Pelayan NFS (lebih tepat, daemon rpc.nfsd) menerima permintaan daripada klien dalam bentuk datagram UDP pada port 2049. Walaupun NFS berfungsi dengan penyelesai port, yang membolehkan pelayan menggunakan port yang ditetapkan secara dinamik, port UDP 2049 adalah dikod keras kepada NFS dalam kebanyakan pelaksanaan.

Perihalan proses mengakses fail yang terletak pada pelayan NFS:

  • Pelanggan (proses pengguna) tidak peduli sama ada ia mengakses fail tempatan atau fail NFS. Kernel berinteraksi dengan perkakasan melalui modul kernel atau panggilan sistem terbina dalam.
  • Kernel modul kernel/fs/nfs/nfs.ko, yang melaksanakan fungsi klien NFS, menghantar permintaan RPC ke pelayan NFS melalui modul TCP/IP. NFS biasanya menggunakan UDP, namun pelaksanaan yang lebih baharu mungkin menggunakan TCP.
  • Pelayan NFS menerima permintaan daripada klien sebagai datagram UDP pada port 2049. Walaupun NFS boleh berfungsi dengan penyelesai port, yang membolehkan pelayan menggunakan port yang diperuntukkan secara dinamik, port UDP 2049 dikodkan keras kepada NFS dalam kebanyakan pelaksanaan.
  • Apabila pelayan NFS menerima permintaan daripada klien, ia dihantar kepada rutin akses fail tempatan, yang menyediakan akses kepada cakera tempatan pada pelayan.
  • Hasil capaian cakera dikembalikan kepada klien.

Menyediakan pelayan NFS

Menyediakan pelayan secara keseluruhan terdiri daripada menetapkan direktori tempatan yang dibenarkan untuk dipasang oleh sistem jauh dalam fail /etc/exports. Tindakan ini dipanggil mengeksport hierarki direktori. Sumber maklumat utama tentang katalog yang dieksport ialah fail berikut:

Struktur folder akar

  1. /etc/exports ialah fail konfigurasi utama yang menyimpan konfigurasi direktori yang dieksport. Digunakan semasa memulakan NFS dan oleh utiliti exportfs.
  2. /var/lib/nfs/xtab - Mengandungi senarai direktori yang dipasang oleh klien jauh. Digunakan oleh daemon rpc.mountd apabila pelanggan cuba melekapkan hierarki (entri pelekap dibuat).
  3. /var/lib/nfs/etab - senarai direktori yang boleh dipasang oleh sistem jauh, menunjukkan semua parameter direktori yang dieksport.
  4. /var/lib/nfs/rmtab - senarai direktori yang tidak dieksport pada masa ini.
  5. /proc/fs/nfsd - sistem fail khas (kernel 2.6) untuk menguruskan pelayan NFS.
  6. /proc/net/rpc - mengandungi statistik mentah, yang boleh diperoleh menggunakan nfsstat, serta pelbagai cache.
  7. /var/run/portmap_mapping - maklumat tentang perkhidmatan yang didaftarkan dalam RPC.

Fail eksport menggunakan pilihan umum berikut:

  • auth_nlm (no_auth_nlm) atau secure_locks (insecure_locks) - menyatakan bahawa pelayan harus memerlukan pengesahan permintaan kunci (menggunakan protokol Pengurus Kunci NFS).
  • nohide (hide) - jika pelayan mengeksport dua hierarki direktori, dengan satu bersarang (dipasang) di dalam yang lain. Pelanggan perlu melekapkan hierarki kedua (kanak-kanak) secara eksplisit, jika tidak, titik pelekap hierarki kanak-kanak akan muncul sebagai direktori kosong. Pilihan nohide menghasilkan hierarki direktori kedua tanpa pelekapan yang jelas.
  • ro - Membenarkan permintaan baca sahaja.
  • rw - Membenarkan permintaan tulis.
  • selamat (tidak selamat) - Memerlukan permintaan NFS untuk datang dari port selamat (< 1024), чтобы программа без прав root не могла монтировать иерархию каталогов.
  • subtree_check (no_subtree_check) - Jika subdirektori sistem fail dieksport, tetapi bukan keseluruhan sistem fail, pelayan menyemak sama ada fail yang diminta berada dalam subdirektori yang dieksport. Melumpuhkan pengesahan mengurangkan keselamatan tetapi meningkatkan kelajuan pemindahan data.
  • penyegerakan (async) - menyatakan bahawa pelayan harus bertindak balas kepada permintaan hanya selepas perubahan yang dibuat oleh permintaan tersebut telah ditulis ke cakera. Pilihan async memberitahu pelayan untuk tidak menunggu maklumat ditulis ke cakera, yang meningkatkan prestasi tetapi mengurangkan kebolehpercayaan kerana Sekiranya sambungan putus atau kegagalan peralatan, maklumat mungkin hilang.
  • wdelay (no_wdelay) - Mengarahkan pelayan untuk menangguhkan pelaksanaan permintaan tulis jika permintaan tulis berikutnya belum selesai, menulis data dalam blok yang lebih besar. Ini meningkatkan prestasi apabila menghantar baris gilir besar bagi arahan tulis. no_wdelay menentukan untuk tidak menangguhkan pelaksanaan arahan tulis, yang boleh berguna jika pelayan menerima sejumlah besar arahan yang tidak berkaitan.

Pengurusan Pelayan NFS

Pelayan NFS diurus menggunakan utiliti berikut:

  • nfsstat
  • showmsecure (tidak selamat)mount
  • exportfs

Utiliti nfsstat membolehkan anda melihat statistik pelayan RPC dan NFS.

showmount

Utiliti showmount menanyakan daemon rpc.mountd pada hos jauh tentang sistem fail yang dipasang. Secara lalai, senarai pelanggan yang diisih dikembalikan. Pasukan:

  • --all - memaparkan senarai pelanggan dan titik lekap yang menunjukkan tempat pelanggan melekapkan direktori. Maklumat ini mungkin tidak boleh dipercayai.
  • --directories - memaparkan senarai titik lekap.
  • --exports - memaparkan senarai sistem fail yang dieksport dari sudut pandangan nfsd.

Menjalankan showmount tanpa hujah akan mencetak maklumat konsol tentang sistem yang dibenarkan untuk melekapkan direktori tempatan.

exportfs

Perintah ini menyegerakkan direktori yang dieksport yang dinyatakan dalam fail /etc/exports dengan fail /var/lib/nfs/xtab dan mengalih keluar direktori yang tidak wujud daripada xtab. exportfs dilaksanakan apabila daemon nfsd dimulakan dengan argumen -r. Utiliti exportfs dalam mod kernel 2.6 berkomunikasi dengan daemon rpc.mountd melalui fail dalam direktori /var/lib/nfs/ dan tidak berkomunikasi secara langsung dengan kernel. Tanpa parameter, memaparkan senarai sistem fail yang sedang dieksport. parameter exportfs:

  1. [client:directory-name] - tambah atau alih keluar sistem fail yang ditentukan untuk klien yang ditentukan)
  2. -v - memaparkan lebih banyak maklumat
  3. -r - eksport semula semua direktori (segerakkan /etc/exports dan /var/lib/nfs/xtab)
  4. -u - keluarkan daripada senarai yang dieksport
  5. -a - tambah atau alih keluar semua sistem fail
  6. -o - pilihan dipisahkan dengan koma (serupa dengan pilihan yang digunakan dalam /etc/exports; iaitu anda boleh menukar pilihan sistem fail yang telah dipasang)
  7. -i - jangan gunakan /etc/exports semasa menambah, hanya pilihan baris arahan semasa
  8. -f - set semula senarai sistem yang dieksport dalam kernel 2.6.

Memasang Sistem Fail Rangkaian dengan arahan pelekap

Contoh arahan mount untuk memasang sistem fail NFS pada Debian:

FAIL~# mount -t nfs archive:/archiv-small /archivs/archiv-small FAIL~# mount -t nfs -o ro archive:/archiv-big /archivs/archiv-big FAIL ~ # lekap ....... archiv:/archiv-small pada /archivs/archiv-jenis kecil nfs (rw,addr=10.0.0.6) archiv:/archiv-big pada /archivs/archiv-big type nfs (ro,addr=10.0.0.6)

Perintah pertama melekapkan direktori /archiv-small yang dieksport pada pelayan arkiv ke titik pelekap setempat /archivs/archiv-small dengan pilihan lalai (iaitu, baca-tulis). Perintah kedua melekapkan direktori yang dieksport /archiv-big pada pelayan arkiv ke direktori tempatan /archivs/archiv-big dengan pilihan baca sahaja (ro). Perintah mount tanpa parameter jelas menunjukkan kepada kita hasil pemasangan. Sebagai tambahan kepada pilihan baca sahaja (ro), adalah mungkin untuk menetapkan pilihan asas lain apabila memasang NFS:

  • nosuid - Pilihan ini menghalang program setuid daripada dilaksanakan daripada direktori yang dipasang.
  • nodev (tiada peranti) - Pilihan ini melarang penggunaan aksara dan menyekat fail khas sebagai peranti.
  • kunci (nolock) - Membolehkan penguncian NFS (lalai). nolock melumpuhkan penguncian NFS (tidak memulakan daemon terkunci) dan berguna apabila bekerja dengan pelayan lama yang tidak menyokong penguncian NFS.
  • mounthost=name - Nama hos di mana daemon pemasangan NFS - mountd - sedang dijalankan.
  • mountport=n - Port yang digunakan oleh daemon yang dipasang.
  • port=n - port yang digunakan untuk menyambung ke pelayan NFS (lalai ialah 2049 jika daemon rpc.nfsd tidak didaftarkan pada pelayan RPC). Jika n=0 (lalai), maka NFS menanyakan peta port pada pelayan untuk menentukan port.
  • rsize=n (baca saiz blok - baca saiz blok) - Bilangan bait dibaca pada satu masa daripada pelayan NFS. Standard - 4096.
  • wsize=n (tulis saiz blok - tulis saiz blok) - Bilangan bait yang ditulis pada satu masa ke pelayan NFS. Standard - 4096.
  • tcp atau udp - Untuk memasang NFS, gunakan protokol TCP atau UDP, masing-masing.
  • bg - Jika anda kehilangan akses kepada pelayan, cuba lagi di latar belakang supaya tidak menyekat proses but sistem.
  • fg - Jika anda kehilangan akses kepada pelayan, cuba lagi dalam mod keutamaan. Pilihan ini boleh menyekat proses but sistem dengan mengulangi percubaan pemasangan. Atas sebab ini, parameter fg digunakan terutamanya untuk penyahpepijatan.
  • Pilihan yang mempengaruhi caching atribut pada lekapan NFS
  • Atribut fail yang disimpan dalam inod (inod), seperti masa pengubahsuaian, saiz, pautan keras, pemilik, biasanya jarang berubah untuk fail biasa dan lebih jarang untuk direktori. Kernel menggunakan masa pengubahsuaian fail untuk menentukan sama ada cache sudah lapuk dengan membandingkan masa pengubahsuaian dalam cache dan masa pengubahsuaian fail itu sendiri.

Cache atribut dikemas kini secara berkala mengikut parameter yang ditentukan:

  1. ac (noac) (cache attrebute - caching atribut) - Membenarkan caching atribut (secara lalai). Walaupun pilihan noac memperlahankan pelayan, ia mengelakkan sifat basi apabila berbilang pelanggan secara aktif menulis maklumat kepada hierarki biasa.
  2. acdirmax=n (maksimum fail direktori cache atribut - cache atribut maksimum untuk fail direktori) - Bilangan saat maksimum yang NFS tunggu sebelum mengemas kini atribut direktori (lalai 60 saat)
  3. acdirmin=n (minimum fail direktori cache atribut - cache atribut minimum untuk fail direktori) - Bilangan saat minimum yang NFS tunggu sebelum mengemas kini atribut direktori (lalai 30 saat)
  4. acregmax=n (maksimum fail biasa cache atribut - cache atribut maksimum untuk fail biasa) - Bilangan saat maksimum yang NFS tunggu sebelum mengemas kini atribut fail biasa (lalai 60 saat)
  5. acregmin=n (cache atribut minimum fail biasa - cache atribut minimum untuk fail biasa) - Bilangan minimum saat yang NFS tunggu sebelum mengemas kini atribut fail biasa (lalai 3 saat)
  6. acteo=n (tamat masa cache atribut) - Menggantikan nilai untuk semua pilihan di atas. Jika acteo tidak dinyatakan, maka nilai di atas mengambil nilai lalai.

Pilihan Pengendalian Ralat NFS

Pilihan berikut mengawal perkara yang dilakukan oleh NFS apabila tiada respons daripada pelayan atau apabila ralat I/O berlaku:

  • fg (bg) (latar depan - latar depan, latar belakang - latar belakang) - Percubaan untuk melekapkan NFS yang gagal di latar depan/latar belakang.
  • keras (lembut) - memaparkan mesej "pelayan tidak bertindak balas" kepada konsol apabila tamat masa dicapai dan terus cuba untuk melekapkan. Apabila pilihan lembut ditentukan, semasa tamat masa, melaporkan ralat I/O kepada program yang memanggil operasi.
  • nointr (intr) (tiada gangguan) - Menghalang isyarat daripada mengganggu operasi fail dalam hierarki direktori yang dipasang keras apabila tamat masa yang besar dicapai. intr - membolehkan gangguan.
  • retrans=n (nilai penghantaran semula) - Selepas n tamat masa kecil, NFS menjana tamat masa yang besar (lalai 3). Tamat masa yang besar menghentikan operasi atau mencetak mesej "pelayan tidak bertindak balas" ke konsol, bergantung pada sama ada pilihan keras/lembut ditentukan.
  • cuba semula=n (nilai cuba semula) - Bilangan minit perkhidmatan NFS akan mengulangi operasi pemasangan sebelum menyerah (lalai 10000).
  • timeo=n (nilai tamat masa) - Bilangan persepuluhan saat perkhidmatan NFS menunggu sebelum menghantar semula dalam kes RPC atau tamat masa kecil (lalai 7). Nilai ini meningkat dengan setiap tamat masa sehingga maksimum 60 saat atau sehingga tamat masa yang besar berlaku. Jika rangkaian sibuk, pelayan lambat, atau permintaan melalui berbilang penghala atau get laluan, meningkatkan nilai ini boleh meningkatkan prestasi.

Prestasi NFS yang dipertingkatkan

Prestasi NFS boleh dipengaruhi oleh beberapa parameter, terutamanya apabila menjalankan sambungan yang perlahan. Apabila bekerja dengan sambungan yang perlahan dan sarat tinggi, adalah dinasihatkan untuk menggunakan parameter keras supaya tamat masa tidak menyebabkan program berhenti berfungsi. Tetapi anda perlu sedar bahawa jika anda memasang sistem fail melalui NFS dengan parameter keras melalui fstab, dan hos jauh tidak dapat dicapai, maka sistem akan membeku apabila but.

Satu cara untuk meningkatkan prestasi NFS adalah dengan meningkatkan bilangan bait yang dipindahkan pada satu masa. Saiz 4096 bait terlalu kecil untuk sambungan pantas moden, meningkatkan nilai ini kepada 8192 atau lebih boleh didapati secara eksperimen untuk mencari kelajuan optimum.

Selain itu, anda tidak seharusnya mengabaikan tetapan tamat masa. NFS menunggu respons kepada pemindahan data untuk tempoh masa yang dinyatakan dalam pilihan timeo; jika respons tidak diterima dalam masa ini, maka penghantaran semula dilakukan. Pada sambungan yang sibuk dan perlahan, masa ini mungkin kurang daripada masa tindak balas pelayan dan kapasiti saluran komunikasi, mengakibatkan penghantaran semula yang tidak perlu yang memperlahankan prestasi. Secara lalai, timeo ialah 0.7 saat (700 milisaat). selepas mengesan bahawa sambungan telah terputus dalam 700 ms, pelayan akan menghantar semula dan menggandakan masa menunggu kepada 1.4 saat, peningkatan dalam masa akan berterusan ke nilai maksimum 60 saat.

Sistem Fail Rangkaian (NFS) ialah penyelesaian perkongsian fail untuk organisasi yang mempunyai persekitaran mesin Windows dan Unix/Linux bercampur. Sistem fail NFS membolehkan anda berkongsi fail merentasi platform tertentu semasa menjalankan sistem pengendalian Windows Server 2012. Perkhidmatan NFS dalam Windows Server 2012 termasuk ciri dan peningkatan berikut.

1. Carian Direktori Aktif. Anda mempunyai keupayaan untuk menggunakan Windows Active Directory untuk mengakses fail. Pengurusan Identiti untuk sambungan skema Unix untuk Active Directory mengandungi medan pengecam pengguna Unix (UID) dan pengecam kumpulan (GID). Ini membolehkan Pelayan untuk NFS dan Pelanggan untuk NFS melihat pemetaan akaun pengguna Windows pada Unix terus daripada Perkhidmatan Domain Direktori Aktif. Pengurusan Identiti untuk Unix memudahkan untuk mengurus pemetaan akaun pengguna Windows pada Unix kepada Perkhidmatan Domain Direktori Aktif.

2. Prestasi pelayan yang lebih baik. Perkhidmatan untuk NFS termasuk pemacu penapis fail yang mengurangkan kependaman keseluruhan dengan ketara apabila mengakses fail pada pelayan.

3. Sokongan untuk peranti Unix khas. Perkhidmatan untuk NFS menyokong peranti Unix khas (mknod).

4. Sokongan Unix yang diperluaskan. Perkhidmatan untuk NFS menyokong versi Unix berikut: Sun Microsystems Solaris versi 9, Red Hat Linux versi 9, IBM AIX versi 5L 5.2, dan Hewlett Packard HP-UX versi 11i, serta banyak pengedaran Linux moden.

Salah satu senario paling biasa yang mewujudkan keperluan untuk NFS melibatkan pendedahan sistem perancangan sumber perusahaan (ERP) berasaskan Unix kepada pengguna Windows. Semasa dalam sistem ERP, pengguna boleh membuat laporan dan/atau mengeksport data kewangan ke Microsoft Excel untuk analisis lanjut. Sistem fail NFS membenarkan fail ini diakses semasa masih dalam persekitaran Windows, mengurangkan keperluan untuk kemahiran teknikal khusus dan masa yang dihabiskan untuk mengeksport fail menggunakan skrip Unix dan kemudian mengimportnya ke dalam aplikasi Windows tertentu.

Mungkin juga terdapat situasi di mana anda mempunyai sistem Unix yang digunakan untuk menyimpan fail pada beberapa jenis Rangkaian Kawasan Storan (SAN). Menjalankan perkhidmatan NFS pada mesin Windows Server 2012 membolehkan pengguna dalam organisasi mengakses fail yang disimpan di sana tanpa overhed skrip sisi Unix.

Sebelum memasang Perkhidmatan NFS, anda mesti mengalih keluar sebarang komponen NFS yang dipasang sebelum ini, seperti komponen NFS yang disertakan dengan Perkhidmatan untuk Unix.

Komponen Perkhidmatan NFS

Dua komponen perkhidmatan NFS berikut tersedia.

1. Pelayan untuk NFS(Pelayan untuk NFS). Biasanya, komputer berasaskan Unix tidak boleh mengakses fail yang terletak pada komputer berasaskan Windows. Walau bagaimanapun, komputer yang menjalankan Windows Server 2012 R2 dan Server untuk NFS boleh bertindak sebagai pelayan fail untuk komputer Windows dan Unix.

2. Pelanggan untuk NFS(Pelanggan untuk NFS). Biasanya, komputer berasaskan Windows tidak boleh mengakses fail yang terletak pada komputer berasaskan Unix. Walau bagaimanapun, komputer yang menjalankan Windows Server 2012 R2 dan ciri Klien untuk NFS boleh mengakses fail yang disimpan pada pelayan NFS berasaskan Unix.

Memasang Pelayan Untuk NFS menggunakan PowerShell

Mari lihat cara menggunakan PowerShell untuk memasang peranan NFS pada pelayan dan mencipta bahagian fail NFS.

1. Buka tetingkap Windows PowerShell melalui bar tugas sebagai akaun pentadbir.

2. Masukkan arahan berikut untuk memasang peranan NFS pada pelayan:

PS C:\> Import-Module ServerManager PS C:\> Add-WindowsFeature FS-NFS-Services PS C:\> Import-Modul NFS

3. Masukkan arahan di bawah untuk mencipta perkongsian fail NFS baharu:

PS C:\> New-NfsShare -Nama "Test" -Path "C:\Shares\Test"

4. Untuk melihat semua cmdlet PowerShell khusus NFS baharu yang tersedia dalam Windows Server 2012 R2, jalankan arahan berikut:

PS C:\>Get-Command -Modul NFS

5. Klik kanan pada folder C:\Shares\Test, pilih "properties", kemudian pergi ke tab Perkongsian NFS. Klik pada butang Urus Perkongsian NFS, dalam kotak dialog yang muncul, anda boleh mengurus kebenaran akses folder, membenarkan akses tanpa nama dan mengkonfigurasi tetapan pengekodan fail. Anda boleh berkongsi folder melalui NFS menggunakan dialog Perkongsian Lanjutan NFS tanpa menggunakan PowerShell.

Menetapkan resolusi standard

Sekarang kita perlu membuka beberapa port firewall untuk NFS berfungsi. Port yang diperlukan untuk perkhidmatan NFS berfungsi dengan betul dibentangkan dalam jadual di bawah.

Bab 29 NFS: Sistem Fail Rangkaian

pengenalan

Dalam bab ini, kita akan melihat Sistem Fail Rangkaian (NFS), aplikasi popular yang menyediakan aplikasi klien dengan akses telus kepada fail. Asas NFS ialah Sun RPC: Panggilan Prosedur Jauh, yang akan kami bincangkan dahulu.

Program pelanggan tidak memerlukan alat khas untuk memanfaatkan NFS. Kernel mengesan bahawa fail berada pada pelayan NFS dan secara automatik menjana panggilan RPC untuk mengakses fail.

Kami tidak akan melihat secara terperinci cara capaian fail dilaksanakan, tetapi akan melihat bagaimana protokol Internet digunakan, terutamanya UDP.

Panggilan Prosedur Jauh Matahari

Dalam kebanyakan kes, masalah pengaturcaraan rangkaian diselesaikan dengan menulis program aplikasi yang memanggil fungsi yang disediakan oleh sistem untuk melaksanakan operasi rangkaian tertentu. Contohnya, satu fungsi menjalankan TCP aktif terbuka, satu lagi TCP pasif terbuka, satu lagi menghantar data melalui sambungan TCP, keempat menetapkan pilihan protokol tertentu (membolehkan pemasa "kekal hidup" TCP), dan sebagainya. Dalam bahagian Antara Muka Pengaturcaraan Aplikasi Bab 1, kami menyebut bahawa terdapat dua set popular fungsi pengaturcaraan rangkaian (antara muka pengaturcaraan aplikasi, API): soket dan TLI. API yang digunakan oleh klien dan API yang digunakan oleh pelayan mungkin berbeza, begitu juga sistem pengendalian yang dijalankan oleh klien dan pelayan. Ia adalah protokol komunikasi dan aplikasi yang menentukan sama ada pelanggan tertentu boleh berkomunikasi dengan pelayan. Pelanggan Unix yang ditulis dalam C menggunakan soket sebagai antara muka pengaturcaraan dan TCP sebagai protokol komunikasi boleh berkomunikasi dengan pelayan kerangka utama yang ditulis dalam COBOL menggunakan API dan TCP yang berbeza jika kedua-dua hos disambungkan ke rangkaian dan kedua-duanya mempunyai pelaksanaan TCP. /IP.

Biasanya, klien menghantar arahan kepada pelayan, dan pelayan menghantar respons kepada klien. Semua aplikasi yang kami semak - Ping, Traceroute, daemon penghalaan, klien dan pelayan DNS, TFTP, BOOTP, SNMP, Telnet, FTP, SMTP - semuanya dibina dengan cara ini.

RPC, panggilan prosedur jauh, melaksanakan pendekatan yang berbeza untuk pengaturcaraan rangkaian. Program klien hanya memanggil fungsi dalam program pelayan. Jadi ini diputuskan dari sudut pandangan pengaturcara, tetapi pada hakikatnya urutan tindakan berikut berlaku.

  1. Apabila pelanggan memanggil prosedur jauh, fungsi pada hos tempatan yang dijana oleh paket RPC dipanggil. Fungsi ini dipanggil stub pelanggan. rintisan klien membungkus argumen prosedur ke dalam mesej rangkaian dan menghantar mesej ke pelayan.
  2. rintisan pelayan pada hos pelayan menerima mesej rangkaian. Argumen diambil daripada mesej rangkaian dan panggilan dibuat ke prosedur pelayan yang ditulis oleh pengaturcara aplikasi.
  3. Fungsi pelayan mengembalikan kawalan kepada stub pelayan, yang seterusnya mengambil nilai yang diterima, membungkusnya ke dalam mesej rangkaian, dan menghantar semula mesej ke stub klien.
  4. rintisan klien mengembalikan nilai daripada mesej rangkaian kepada aplikasi klien.

Pengaturcaraan rangkaian menggunakan stub dan rutin RPC perpustakaan menggunakan API (soket atau TLI), tetapi aplikasi pengguna (program klien dan prosedur pelayan yang dipanggil oleh klien) tidak pernah mengakses API. Aplikasi klien hanya perlu memanggil prosedur pelayan, manakala semua butiran pelaksanaan disembunyikan oleh pakej RPC, stub klien dan stub pelayan.

Paket RPC mempunyai kelebihan berikut.

  • Pengaturcaraan menjadi lebih mudah kerana anda tidak perlu menyelesaikan masalah pengaturcaraan rangkaian (dan jika anda melakukannya, ia adalah sangat sedikit). Pengaturcara aplikasi hanya menulis program klien dan prosedur pelayan yang dipanggil oleh pelanggan.
  • Jika protokol yang tidak boleh dipercayai seperti UDP digunakan, semua butiran, iaitu tamat masa dan penghantaran semula, dikendalikan oleh paket RPC. Ini seterusnya memudahkan aplikasi pengguna.
  • Pustaka RPC mengendalikan penukaran argumen yang diperlukan dan nilai pulangan. Sebagai contoh, jika argumen terdiri daripada integer dan nombor titik terapung, pakej RPC akan mengendalikan sebarang perbezaan antara perwakilan integer dan nombor titik terapung pada klien dan pelayan. Ini memudahkan pelaksanaan pelanggan dan pelayan untuk beroperasi dalam persekitaran heterogen.

Pengaturcaraan RPC diliputi secara terperinci dalam Bab 18. Dua pakej RPC yang paling popular ialah Sun RPC dan pakej RPC dalam Persekitaran Pengkomputeran Teragih (DCE) Yayasan Perisian Terbuka (OSF). kepada pakej Sun RPC, kerana pakej inilah yang digunakan dalam sistem fail rangkaian. Sun RPC versi 2 diterangkan dalam RFC 1057 [Sun Microsystems 1988a].

Terdapat dua jenis Sun RPC. Satu versi dibina menggunakan API soket dan berfungsi dengan TCP dan UDP. Yang lain dipanggil TI-RPC (bebas pengangkutan), dibina menggunakan API TLI dan berfungsi dengan mana-mana lapisan pengangkutan yang disediakan oleh kernel. Dari sudut pandangan kami, tidak ada perbezaan antara mereka, kerana dalam bab ini kami hanya mempertimbangkan TCP dan UDP.

Rajah 29.1 menunjukkan format mesej panggilan prosedur RPC menggunakan UDP.

Rajah 29.1 Mesej panggilan prosedur RPC dalam format datagram UDP.

Pengepala IP dan UDP standard ditunjukkan sebelum ini (Rajah 3.1 dan Rajah 11.2). Semua yang mengikuti pengepala UDP ditentukan oleh paket RPC.

Pengecam transaksi (XID - ID transaksi) ditetapkan oleh pelanggan dan dikembalikan oleh pelayan. Apabila pelanggan menerima respons, ia membandingkan XID yang dikembalikan oleh pelayan dengan XID permintaan yang dihantar. Jika mereka tidak sepadan, pelanggan membuang mesej dan menunggu mesej seterusnya tiba. Setiap kali pelanggan mengeluarkan RPC baharu, ia menukar XID. Walau bagaimanapun, jika pelanggan menghantar semula RPC (jika tiada respons diterima), XID tidak berubah.

Pembolehubah panggilan ialah 0 untuk panggilan dan 1 untuk respons. Versi RPC semasa ialah 2. Tiga pembolehubah seterusnya, nombor program, nombor versi dan nombor prosedur, mengenal pasti prosedur khusus untuk dipanggil pada pelayan.

Bukti kelayakan mengenal pasti pelanggan. Dalam beberapa contoh medan ini dibiarkan kosong, manakala dalam yang lain, anda boleh melihat pengecam digital pengguna dan pengecam kumpulan yang dimilikinya. Pelayan boleh melihat ke dalam kelayakan dan memutuskan sama ada untuk memproses permintaan atau tidak. Pengesah digunakan untuk Secure RPC, yang menggunakan penyulitan DES. Walaupun medan kuasa dan pengesahan adalah medan panjang berubah-ubah, panjangnya diluluskan sebagai sebahagian daripada medan.

Seterusnya ialah parameter prosedur. Format mereka bergantung pada cara aplikasi mentakrifkan prosedur jauh. Bagaimanakah penerima (stub pelayan) mengetahui saiz parameter? Oleh kerana UDP digunakan, saiz parameter boleh dikira sebagai saiz datagram UDP tolak panjang semua medan sehingga medan semak. Apabila TCP digunakan dan bukannya UDP, tiada konsep panjang tetap, kerana TCP ialah aliran bait tanpa pembatas rekod. Dalam kes sedemikian, medan panjang 4-bait muncul di antara pengepala TCP dan XID, dari mana penerima mengetahui panjang panggilan RPC dalam bait. Ini membolehkan mesej panggilan RPC dihantar melalui berbilang segmen TCP jika perlu. (DNS menggunakan teknik yang sama; Latihan 4 dalam Bab 14.)

Rajah 29.2 menunjukkan format respons RPC. Ia dihantar dari stub pelayan ke stub klien apabila prosedur jauh keluar.

Rajah 29.2 Format mesej respons prosedur RPC sebagai datagram UDP.

Panggilan XID hanya disalin ke dalam respons XID. Medan balasan mengandungi 1, medan ini membezakan antara cabaran dan respons. Medan status mengandungi nilai nol jika mesej panggilan telah diterima. (Mesej mungkin dibuang jika nombor versi RPC bukan 2 atau jika pelayan tidak dapat mengesahkan klien.) Medan pengesah digunakan dalam kes RPC selamat untuk menunjukkan pelayan.

Medan status terima mengandungi nilai sifar jika semuanya baik-baik saja. Nilai bukan sifar boleh menunjukkan, sebagai contoh, nombor versi yang salah atau nombor prosedur yang salah. Jika TCP digunakan dan bukannya UDP, maka, seperti dengan mesej cabaran RPC, medan panjang 4-bait dihantar antara pengepala TCP dan XID.

XDR: Perwakilan Data Luaran

Perwakilan Data Luaran (XDR) ialah piawai yang digunakan untuk mengekod nilai dalam panggilan RPC dan mesej respons - medan pengepala RPC (XID, nombor program, status terima, dll.), parameter prosedur dan keputusan prosedur. Cara standard pengekodan data membolehkan pelanggan memanggil prosedur pada sistem dengan seni bina yang berbeza. XDR ditakrifkan dalam RFC 1014 [Sun Microsystems 1987].

XDR mentakrifkan bilangan jenis data tertentu dan cara tepat ia dibawa dalam mesej RPC (tertib bit, susunan bait dan sebagainya). Pengirim mesti membina mesej RPC dalam format XDR, kemudian penerima menukar format XDR kepada perwakilan asal. (Dalam format yang diterima untuk sistemnya.) Kita lihat, sebagai contoh, dalam Rajah 29.1 dan 29.2, bahawa semua nilai integer yang kami tunjukkan (XID, panggilan, nombor program, dan sebagainya) ialah integer 4-bait . Sesungguhnya, semua integer dalam XDR menduduki 4 bait. XDR menyokong jenis data lain, termasuk integer tidak bertanda, boolean, titik terapung, tatasusunan panjang tetap, tatasusunan panjang berubah-ubah dan struktur.

Pematuhan Pelabuhan

Program pelayan RPC yang mengandungi prosedur jauh menggunakan port yang diperuntukkan secara dinamik dan bukannya port yang telah diketahui sebelumnya. Ini memerlukan beberapa bentuk "pelogam" untuk sentiasa mengetahui port yang ditetapkan secara dinamik yang digunakan oleh program RPC mana. Dalam Sun RPC pembalak ini dipanggil pemeta pelabuhan. (Pemeta port ialah pelayan yang menukar nombor program RPC kepada nombor port protokol DARPA. Pelayan ini mesti berjalan untuk membuat panggilan RPC.)

Istilah "port" dalam nama itu berasal dari nombor port TCP dan UDP, ciri-ciri keluarga protokol Internet. Memandangkan TI-RPC berjalan di atas mana-mana lapisan pengangkutan, bukan sahaja TCP dan UDP, nama pemeta port pada sistem yang menggunakan TI-RPC (SVR4 dan Solaris 2.2, contohnya) telah ditukar kepada rpcbind. Walau bagaimanapun, kami akan terus menggunakan pemeta pelabuhan yang lebih biasa.

Sebenarnya, penyelesai port itu sendiri mesti mempunyai port yang diketahui: port UDP 111 dan port TCP 111. Penyelesai port hanyalah program pelayan RPC. Ia mempunyai nombor program (100000), nombor versi (2), port TCP 111 dan port UDP 111. Pelayan mendaftar satu sama lain dengan penyelesai port menggunakan panggilan RPC, dan pelanggan meminta penyelesai port menggunakan panggilan RPC. Penyelesai port menyediakan empat prosedur pelayan:

  1. PMAPPROC_SET. Dipanggil oleh pelayan RPC semasa permulaan untuk mendaftarkan nombor program, nombor versi dan protokol dengan penyelesai port.
  2. PMAPPROC_UNSET. Dipanggil oleh pelayan untuk mengalih keluar transformasi yang didaftarkan sebelum ini.
  3. PMAPPROC_GETPORT. Dipanggil oleh klien RPC semasa permulaan untuk mendapatkan nombor port untuk nombor program, nombor versi dan protokol yang diberikan.
  4. PMAPPROC_DUMP. Mengembalikan semua item (nombor program, nombor versi, protokol dan nombor port) ke pangkalan data penyelesai port.

Apabila program pelayan RPC bermula dan kemudian apabila ia dipanggil oleh program klien RPC, langkah berikut berlaku.

  1. Penukar port harus bermula dahulu, biasanya apabila sistem but. Ini mencipta titik akhir TCP dan membuka port TCP 111 secara pasif. Ia juga mencipta titik akhir UDP yang menunggu datagram UDP tiba pada port UDP 111.
  2. Apabila program pelayan RPC bermula, ia mencipta titik akhir TCP dan titik akhir UDP untuk setiap versi program yang disokong. (Program RPC boleh menyokong berbilang versi. Pelanggan menentukan versi yang diperlukan apabila memanggil prosedur pelayan.) Nombor port yang ditetapkan secara dinamik diberikan kepada setiap titik akhir. (Tidak ada bezanya sama ada nombor port TCP dan UDP adalah sama atau berbeza.) Pelayan mendaftarkan setiap program, versi, protokol dan nombor port dengan membuat panggilan jauh ke prosedur penyelesai port PMAPPROC_SET.
  3. Apabila program klien RPC bermula, ia memanggil prosedur penyelesai port PMAPPROC_GETPORT untuk mendapatkan nombor port yang diberikan secara dinamik untuk program, versi dan protokol yang ditentukan.
  4. Pelanggan menghantar mesej cabaran RPC ke nombor port yang diperoleh dalam langkah 3. Jika UDP digunakan, pelanggan hanya menghantar datagram UDP yang mengandungi mesej cabaran RPC (Rajah 29.1) ke nombor port UDP pelayan. Sebagai tindak balas, pelayan menghantar datagram UDP yang mengandungi mesej tindak balas RPC (Rajah 29.2). Jika TCP digunakan, pelanggan melakukan pembukaan aktif ke nombor port TCP pelayan dan kemudian menghantar mesej cabaran RPC melalui sambungan. Pelayan bertindak balas dengan mesej tindak balas RPC pada sambungan.

Program rpcinfo(8) mencetak semua tetapan pemeta port semasa. (Di sinilah rutin pemeta port PMAPPROC_DUMP dipanggil.) Output tipikal ditunjukkan di bawah:

Matahari % /usr/etc/rpcinfo -p
program berbanding port proto
100005 1 tcp 702 dipasang NFS mount daemon
100005 1 udp 699 dipasang
100005 2 tcp 702 dipasang
100005 2 udp 699 dipasang

100003 2 udp 2049 nfs NFS itu sendiri

100021 1 tcp 709 nlockmgr pengurus kunci NFS
100021 1 udp 1036 nlockmgr
100021 2 tcp 721 nlockmgr
100021 2 udp 1039 nlockmgr
100021 3 tcp 713 nlockmgr
100021 3 udp 1037 nlockmgr

Kami melihat bahawa sesetengah atur cara menyokong berbilang versi, dan setiap gabungan nombor program, nombor versi dan protokol mempunyai susun atur nombor portnya sendiri, disampaikan oleh penyelesai port.

Kedua-dua versi daemon pelekap boleh diakses melalui nombor port TCP yang sama (702) dan nombor port UDP yang sama (699), namun setiap versi pengurus penyekat mempunyai nombor portnya sendiri.

protokol NFS

NFS memberikan pelanggan akses telus kepada fail pelayan dan sistem fail. Ini berbeza daripada FTP (Bab 27), yang menyediakan pemindahan fail. Menggunakan FTP, salinan fail lengkap dijalankan. NFS hanya mengakses bahagian fail yang telah diakses oleh proses, dan kelebihan utama NFS ialah ia menjadikan akses ini telus. Ini bermakna bahawa mana-mana aplikasi klien yang boleh berfungsi dengan fail tempatan boleh berfungsi dengan mudah dengan fail NFS, tanpa sebarang pengubahsuaian pada program itu sendiri.

NFS ialah aplikasi pelayan pelanggan yang dibina menggunakan Sun RPC. Pelanggan NFS mengakses fail pada pelayan NFS dengan menghantar permintaan RPC ke pelayan. Ini boleh dilaksanakan menggunakan proses pengguna biasa - iaitu, klien NFS boleh menjadi proses pengguna yang membuat panggilan RPC khusus ke pelayan, yang juga boleh menjadi proses pengguna. Walau bagaimanapun, NFS biasanya dilaksanakan secara berbeza atas dua sebab. Pertama, akses kepada fail NFS mestilah telus kepada pelanggan. Oleh itu, panggilan klien NFS dibuat oleh sistem pengendalian klien bagi pihak proses pengguna klien. Kedua, pelayan NFS dilaksanakan dalam sistem pengendalian untuk meningkatkan kecekapan pelayan. Jika pelayan NFS adalah proses pengguna, setiap permintaan pelanggan dan tindak balas pelayan (termasuk data untuk dibaca atau ditulis) perlu melalui pemisah antara kernel dan proses pengguna, yang secara amnya agak mahal.

Dalam bahagian ini, kita akan melihat versi 2 NFS seperti yang didokumenkan dalam RFC 1094 [Sun Microsystems 1988b]. Penerangan terbaik tentang Sun RPC, XDR dan NFS diberikan dalam [X/Open 1991]. Butiran penggunaan dan pentadbiran NFS diberikan dalam [Stern 1991]. Spesifikasi protokol NFS versi 3 telah dilaksanakan pada tahun 1993, yang akan kita bincangkan dalam bahagian bab ini.

Rajah 29.3 menunjukkan tetapan klien NFS dan pelayan NFS biasa. Dalam angka ini, anda perlu memberi perhatian kepada perkara berikut.

  1. Pelanggan tidak peduli sama ada ia mengakses fail tempatan atau fail NFS. Kernel mengesan ini apabila fail dibuka. Selepas fail dibuka, kernel menghantar semua akses kepada fail tempatan ke kotak berlabel "akses fail tempatan", dan semua pautan ke fail NFS dihantar ke kotak "klien NFS".
  2. Pelanggan NFS menghantar permintaan RPC ke pelayan NFS melalui modul TCP/IP. NFS biasanya menggunakan UDP, namun pelaksanaan yang lebih baharu mungkin menggunakan TCP.
  3. Pelayan NFS menerima permintaan daripada klien sebagai datagram UDP pada port 2049. Walaupun NFS boleh berfungsi dengan penyelesai port, yang membolehkan pelayan menggunakan port yang diperuntukkan secara dinamik, port UDP 2049 dikodkan keras kepada NFS dalam kebanyakan pelaksanaan.

Rajah 29.3 Tetapan klien NFS dan pelayan NFS biasa.

  • Apabila pelayan NFS menerima permintaan daripada klien, ia dihantar kepada rutin akses fail tempatan, yang menyediakan akses kepada cakera tempatan pada pelayan.
  • Pelayan mungkin mengambil masa untuk memproses permintaan pelanggan. Malah mengakses sistem fail tempatan boleh mengambil sedikit masa. Pada masa ini, pelayan tidak mahu menyekat permintaan daripada pelanggan lain yang juga perlu disampaikan. Untuk menghadapi situasi ini, kebanyakan pelayan NFS dimulakan beberapa kali, bermakna terdapat berbilang pelayan NFS dalam kernel. Kaedah penyelesaian khusus bergantung pada sistem pengendalian. Kebanyakan kernel Unix tidak "hidup" berbilang pelayan NFS, sebaliknya memulakan berbilang proses pengguna (biasanya dipanggil nfsd) yang membuat satu panggilan sistem dan kekal di dalam kernel sebagai proses kernel.
  • Begitu juga, klien NFS mengambil masa untuk memproses permintaan daripada proses pengguna pada hos klien. RPC dikeluarkan kepada hos pelayan, selepas itu respons dijangka. Untuk memastikan proses pengguna pada hos klien boleh memanfaatkan NFS pada bila-bila masa, terdapat beberapa klien NFS berjalan di dalam kernel klien. Pelaksanaan khusus juga bergantung pada sistem pengendalian. Sistem Unix biasanya menggunakan teknik yang mengingatkan pelayan NFS: proses pengguna yang dipanggil biod membuat panggilan sistem tunggal dan kekal di dalam kernel sebagai proses kernel.
  • Kebanyakan hos Unix boleh berfungsi sebagai klien NFS dan pelayan NFS, atau kedua-duanya pada masa yang sama. Kebanyakan pelaksanaan PC (MS-DOS) hanya mempunyai pelaksanaan klien NFS. Kebanyakan kerangka utama IBM hanya menyediakan fungsi pelayan NFS.

    NFS sebenarnya lebih daripada sekadar protokol NFS. Rajah 29.4 menunjukkan pelbagai program RPC yang digunakan dengan NFS.

    Permohonan

    Nombor program

    Nombor versi

    Bilangan prosedur

    penukar pelabuhan
    NFS
    program lekapkan
    pengurus menyekat
    pemantau status

    Rajah 29.4 Pelbagai atur cara RPC yang digunakan dalam NFS.

    Versi yang telah kami tunjukkan dalam angka ini sebagai unit ditemui pada sistem seperti SunOS 4.1.3. Pelaksanaan baharu menyediakan versi baharu beberapa program. Solaris 2.2, sebagai contoh, turut menyokong versi 3 dan 4 penyelesai port dan versi 2 daemon gunung. SVR4 juga menyokong versi 3 penukar port.

    Daemon gunung digunakan pada hos NFS klien sebelum klien boleh mengakses sistem fail pelayan. Kami menerangkan proses ini di bawah.

    Pengurus penyekat dan pemantau status membenarkan klien menyekat beberapa fail yang terletak pada pelayan NFS. Kedua-dua program ini adalah bebas daripada protokol NFS kerana penyekatan memerlukan pengesahan pelanggan kepada hos klien dan pelayan, dan NFS sendiri adalah "neutral." (Kita akan bercakap tentang ketidakpedulian NFS dengan lebih terperinci di bawah.) Bab 9, 10, dan 11 [X/Open 1991] mendokumenkan prosedur yang digunakan oleh pengurus kunci dan monitor status untuk mengunci dalam NFS.

    Deskriptor fail

    Salah satu asas NFS dilaksanakan oleh deskriptor fail. Untuk mengakses fail atau direktori pada pelayan objek, legap digunakan. Istilah legap bermaksud pelayan mencipta pemegang fail, menyerahkannya kembali kepada klien, yang kemudiannya digunakan oleh klien apabila mengakses fail tersebut. Pelanggan tidak pernah melihat kandungan deskriptor fail - kandungannya hanya menarik minat pelayan.

    Pelanggan NFS menerima pemegang fail setiap kali ia membuka fail yang sebenarnya berada pada pelayan NFS. Apabila klien NFS membaca atau menulis ke fail ini (bagi pihak proses pengguna), pemegang kepada fail dihantar kembali ke pelayan. Ini menunjukkan bahawa fail telah diakses.

    Biasanya proses pengguna tidak berfungsi dengan deskriptor fail. Deskriptor fail ditukar antara klien NFS dan pelayan NFS. Dalam versi 2 NFS, deskriptor fail ialah 32 bait, dan dalam versi 3 ia telah berkembang kepada 64 bait.

    Pelayan Unix biasanya menyimpan maklumat berikut dalam deskriptor fail: pengecam sistem fail (nombor peranti sistem fail utama dan kecil), nombor inod (i-nod) (nombor unik dalam sistem fail), nombor penjanaan inod (nombor yang berubah. setiap kali inode digunakan semula untuk fail lain).

    Pasang protokol

    Pelanggan menggunakan protokol pemasangan NFS untuk memasang sistem fail pelayan sebelum mengakses fail NFS. Ini biasanya berlaku apabila pelanggan sedang memuatkan. Akibatnya, pelanggan menerima pemegang fail ke sistem fail pelayan.

    Rajah 29.5 menerangkan urutan tindakan klien Unix apabila melaksanakan perintah mount(8).

    Rajah 29.5 Protokol pemasangan yang digunakan oleh arahan pemasangan Unix.

    Dalam kes ini, langkah-langkah berikut dijalankan.

    1. Apabila pelayan but, penukar port bermula padanya.
    2. Selepas penyelesai port, daemon pelekap (dilekapkan) bermula pada pelayan. Ia mencipta titik akhir TCP dan titik akhir UDP, dan memberikan setiap nombor port yang diberikan secara dinamik. Ia kemudian mendaftarkan nombor ini dengan pemeta port.
    3. Pelanggan melaksanakan perintah pelekap, yang mengeluarkan panggilan RPC kepada penyelesai port pelayan untuk mendapatkan nombor port daripada daemon pelekap pada pelayan. Kedua-dua TCP dan UDP boleh digunakan untuk komunikasi antara klien dan penyelesai port, tetapi UDP biasanya digunakan.
    4. Penyelesai port melaporkan nombor port.
    5. Arahan pelekap mengeluarkan panggilan RPC kepada daemon pelekap untuk melekapkan sistem fail pelayan. Sekali lagi, sama ada TCP atau UDP boleh digunakan, namun UDP biasanya digunakan. Pelayan kini boleh mengesahkan klien berdasarkan alamat IP dan nombor portnya untuk melihat sama ada klien boleh memasang sistem fail yang ditentukan.
    6. Daemon gunung bertindak balas dengan pemegang fail kepada sistem fail yang ditentukan.
    7. Perintah pelekap pelanggan mengeluarkan panggilan sistem pelekap untuk mengaitkan pemegang fail yang diperoleh dalam langkah 5 dengan titik pelekap setempat pada hos pelanggan. Pemegang fail disimpan dalam kod NFS klien, dan mulai sekarang sebarang capaian oleh proses pengguna kepada fail pada sistem fail pelayan akan menggunakan pemegang fail sebagai titik permulaan.

    Pelaksanaan ini menyerahkan keseluruhan proses pemasangan, kecuali untuk panggilan sistem pelekap pada klien, kepada proses pengguna dan bukannya kernel. Tiga program yang kami tunjukkan - arahan pelekap, penyelesai pelabuhan, dan daemon pelekap - adalah proses pengguna.

    Dalam contoh ini, pada matahari hos (pelanggan NFS), arahan telah dilaksanakan

    matahari # mount -t nfs bsdi:/usr /nfs/bsdi/usr

    Perintah ini melekapkan direktori /usr pada hos bsdi (pelayan NFS) sebagai sistem fail tempatan /nfs/bsdi/usr. Rajah 29.6 menunjukkan keputusan.

    Rajah 29.6 Memasang direktori bsdi:/usr sebagai /nfs/bsdi/usr pada matahari hos.

    Selepas itu, apabila mengakses fail /nfs/bsdi/usr/rstevens/hello.c pada klien matahari, fail /usr/rstevens/hello.c pada pelayan bsdi diakses.

    prosedur NFS

    Pelayan NFS menyediakan 15 prosedur, yang kini akan kami huraikan. (Nombor yang digunakan dalam perihalan ini tidak sama dengan nombor prosedur NFS, kerana kami telah mengumpulkannya mengikut fungsi.) Walaupun NFS direka untuk berfungsi merentas sistem pengendalian, bukan hanya sistem Unix, beberapa prosedur adalah berdasarkan khusus pada fungsi Unix. , yang, seterusnya, mungkin tidak disokong oleh sistem pengendalian lain (contohnya, pautan keras, pautan simbolik, penggunaan kumpulan, hak akses pelaksanaan dan sebagainya). Bab 4 mengandungi lebih banyak maklumat tentang ciri-ciri sistem fail, sebahagian daripadanya digunakan oleh NFS.

    1. GETATTR. Mengembalikan atribut fail: jenis fail (fail biasa, direktori, dll.), hak akses, saiz fail, pemilik fail, masa capaian terakhir dan sebagainya.
    2. SETATTR. Menetapkan atribut fail. Hanya set atribut tertentu boleh ditetapkan: hak akses, pemilik, pemilikan kumpulan, saiz, masa akses terakhir dan masa pengubahsuaian terakhir.
    3. STATFS. Mengembalikan status sistem fail: jumlah ruang kosong, saiz optimum untuk pemindahan dan sebagainya. Digunakan, sebagai contoh, oleh perintah Unix df.
    4. LIHAT. "Menilai" fail. Prosedur ini dipanggil oleh klien setiap kali proses pengguna membuka fail yang terletak pada pelayan NFS. Pemegang fail dikembalikan, bersama-sama dengan atribut fail.
    5. BACA. Dibaca daripada fail. Pelanggan menentukan pemegang fail, offset bait permulaan dan bilangan maksimum bait untuk dibaca (sehingga 8192).
    6. TULIS. Menulis pada fail. Pelanggan menentukan pemegang fail, offset permulaan dalam bait, bilangan bait untuk ditulis dan data untuk ditulis.

      Tulisan NFS dikehendaki segerak (dengan menunggu). Pelayan tidak boleh bertindak balas OK sehingga data telah berjaya ditulis (dan sebarang maklumat fail lain yang perlu dikemas kini) ke cakera.

    7. CIPTA. Mencipta fail.
    8. KELUARKAN. Memadamkan fail.
    9. NAMA SEMULA. Menamakan semula fail.
    10. PAUTAN. Membuat pautan keras ke fail. Pautan keras ialah konsep Unix yang menyatakan bahawa fail tertentu pada cakera boleh mempunyai sebarang bilangan titik masuk (nama, juga dipanggil pautan keras) yang menghala ke fail tersebut.
    11. SYMLINK. Mencipta pautan simbolik ke fail. Pautan simbolik ialah fail yang mengandungi nama fail lain. Kebanyakan operasi yang dilakukan pada pautan simbolik (contohnya, pembukaan) sebenarnya dilakukan pada fail yang ditunjukkan oleh pautan simbolik.
    12. BACA PAUTAN. Membaca symlink mengembalikan nama fail yang ditunjukkan oleh symlink.
    13. MKDIR. Mencipta direktori.
    14. RMDIR. Memadam direktori.
    15. READDIR. Membaca direktori. Digunakan, sebagai contoh, oleh perintah Unix ls.

    Sebenarnya, nama prosedur yang ditunjukkan bermula dengan awalan NFSPROC_, yang telah kami tinggalkan.

    UDP atau TCP?

    NFS pada asalnya ditulis untuk menggunakan UDP, dan semua vendor menyediakan keupayaan ini. Walau bagaimanapun, pelaksanaan yang lebih baharu turut menyokong TCP. Sokongan TCP digunakan untuk beroperasi melalui rangkaian global, yang menjadi lebih pantas. Oleh itu, penggunaan NFS tidak lagi terhad kepada rangkaian tempatan.

    Sempadan antara rangkaian tempatan dan global semakin kabur, dan semua ini berlaku dengan pantas. Masa pemulangan berbeza-beza dalam julat yang sangat luas dan limpahan berlaku lebih dan lebih kerap. Ciri-ciri rangkaian global ini membawa kepada fakta bahawa mereka semakin menggunakan algoritma yang kami pertimbangkan untuk TCP - permulaan perlahan dan mengelakkan kesesakan. Memandangkan UDP tidak menyediakan apa-apa yang serupa dengan algoritma ini, ia atau yang serupa mesti dibina ke dalam klien dan pelayan NFS, jika tidak, TCP mesti digunakan.

    NFS melalui TCP

    Pelaksanaan NFS Berkeley Net/2 menyokong kedua-dua UDP dan TCP. [Macklem 1991] menerangkan pelaksanaan ini. Mari lihat bagaimana penggunaan NFS berbeza apabila menjalankan TCP.

    1. Apabila pelayan but, ia memulakan pelayan NFS, yang dibuka secara aktif pada port TCP 2049, menunggu permintaan sambungan tiba daripada klien. Ini biasanya dilakukan sebagai tambahan kepada UDP NFS biasa, yang mendengar datagram masuk pada port UDP 2049.
    2. Apabila pelanggan memasang sistem fail pelayan menggunakan TCP, ia melakukan pembukaan aktif pada port TCP 2049 pada pelayan. Ini mewujudkan sambungan TCP antara klien dan pelayan untuk sistem fail ini. Jika klien yang sama memasang sistem fail lain pada pelayan yang sama, sambungan TCP lain dibuat.
    3. Kedua-dua pelanggan dan pelayan menetapkan pilihan "kekal hidup" TCP di hujung sambungan mereka (Bab 23). Ini membolehkan anda menentukan saat kegagalan atau but semula satu atau peserta pertukaran yang lain.
    4. Semua aplikasi pada klien yang menggunakan sistem fail pelayan berkongsi sambungan TCP yang sama kepada sistem fail tersebut. Sebagai contoh, jika terdapat dalam Rajah 29.6, akan ada direktori lain pada bsdi, bernama smith, di bawah direktori /usr, panggilan ke fail dalam /nfs/bsdi/usr/rstevens dan /nfs/bsdi/usr/smith akan berkongsi perkara yang sama sambungan TCP yang sama.
    5. Jika pelanggan menentukan bahawa pelayan telah ranap atau but semula (selepas menerima ralat "sambungan tamat masa" atau "sambungan ditutup oleh hos" TCP), ia cuba menyambung semula ke pelayan. Pelanggan melakukan satu lagi buka aktif untuk mewujudkan semula sambungan TCP untuk sistem fail ini. Sebarang permintaan daripada pelanggan yang tamat masa pada sambungan sebelumnya dikeluarkan semula pada sambungan baharu.
    6. Jika pelanggan gagal, begitu juga aplikasi yang berjalan sebelum kegagalan. Apabila klien but semula, ia mungkin melekapkan semula sistem fail pelayan menggunakan TCP, menggunakan sambungan TCP yang berbeza ke pelayan. Sambungan sebelumnya antara klien dan pelayan untuk sistem fail ini berada dalam keadaan separuh terbuka (pelayan berpendapat ia masih terbuka), namun, memandangkan pelayan telah menetapkan pilihan "kekal hidup", sambungan separuh terbuka ini akan ditutup apabila pelayan TCP menghantar siasatan seterusnya." kekal hidup."

    Dari masa ke masa, vendor lain merancang untuk menyokong NFS melalui TCP.

    Contoh NFS

    Mari gunakan tcpdump untuk melihat rutin NFS yang digunakan oleh klien untuk operasi fail biasa. Apabila tcpdump menentukan bahawa datagram UDP mengandungi panggilan RPC (panggilan ialah 0 dalam Rajah 29.1) dengan port destinasi 2049, ia menyahkod datagram sebagai permintaan NFS. Begitu juga, jika datagram UDP mengandungi respons RPC (balasan ialah 1 dalam Rajah 29.2) dengan port sumber 2049, ia menyahkod datagram sebagai tindak balas NFS.

    Contoh mudah: membaca fail

    Dalam contoh pertama, kami akan menyalin fail yang terletak pada pelayan NFS ke terminal menggunakan perintah cat(1):

    Matahari % kucing /nfs/bsdi/usr/rstevens/hello.c menyalin fail ke terminal
    utama()
    {
    printf("hello, dunia\n");
    }

    Sistem fail /nfs/bsdi/usr pada hos sun (klien NFS) sebenarnya adalah sistem fail /usr pada hos bsdi (pelayan NFS), seperti yang ditunjukkan dalam Rajah 29.6. Kernel matahari mengesan ini apabila kucing membuka fail dan menggunakan NFS untuk mengakses fail. Rajah 29.7 menunjukkan output arahan tcpdump.

    1 0.0 sun.7aa6 > bsdi.nfs: 104 getattr
    2 0.003587 (0.0036) bsdi.nfs > sun.7aa6: balas ok 96

    3 0.005390 (0.0018) sun.7aa7 > bsdi.nfs: 116 carian "rstevens"
    4 0.009570 (0.0042) bsdi.nfs > sun.7aa7: balas ok 128

    5 0.011413 (0.0018) sun.7aa8 > bsdi.nfs: 116 carian "hello.c"
    6 0.015512 (0.0041) bsdi.nfs > sun.7aa8: balas ok 128

    7 0.018843 (0.0033) matahari.7aa9 > bsdi.nfs: 104 getattr
    8 0.022377 (0.0035) bsdi.nfs > sun.7aa9: balas ok 96

    9 0.027621 (0.0052) matahari.7aaa > bsdi.nfs: 116 dibaca 1024 bait @ 0
    10 0.032170 (0.0045) bsdi.nfs > sun.7aaa: balas ok 140

    Rajah 29.7 Operasi NFS semasa membaca fail.

    Perintah tcpdump menyahkod permintaan atau respons NFS, dan ia juga mencetak medan XID untuk klien dan bukannya nombor port. Medan XID dalam baris 1 dan 2 ialah 0x7aa6.

    Nama fail /nfs/bsdi/usr/rstevens/hello.c diproses oleh fungsi terbuka dalam kernel klien satu elemen nama pada satu masa. Apabila fungsi terbuka mencapai /nfs/bsdi/usr, ia menentukan bahawa ini ialah titik lekap sistem fail NFS.

    Pada baris 1, pelanggan memanggil GETATTR untuk mendapatkan atribut direktori pelayan yang dipasang oleh klien (/usr). Permintaan RPC ini mengandungi 104 bait data, sebagai tambahan kepada pengepala IP dan UDP. Respons pada baris 2 mengembalikan OK dan mengandungi 96 bait data, sebagai tambahan kepada pengepala IP dan UDP. Kita dapat melihat dalam angka ini bahawa mesej NFS minimum mengandungi kira-kira 100 bait data.

    Pada baris 3, pelanggan memanggil LOOKUP pada rstevens fail dan menerima respons OK pada baris 4. LOOKUP menentukan nama rstevens fail dan pemegang kepada fail yang disimpan oleh kernel apabila sistem fail jauh dipasang. Respons mengandungi pemegang fail baharu yang digunakan dalam langkah seterusnya.

    Pada baris 5, klien MENCARI fail hello.c menggunakan pemegang fail dari baris 4. Ia menerima pemegang fail yang berbeza pada baris 6. Pemegang fail baharu ini betul-betul apa yang digunakan klien pada baris 7 dan 9 untuk mengakses fail / nfs /bsdi/usr/rstevens/hello.c. Kami melihat bahawa pelanggan melakukan LOOKUP pada setiap komponen nama dalam laluan ke fail yang dibuka.

    Pada baris 7, klien melaksanakan GETATTR sekali lagi, diikuti dengan BACA pada baris 9. Pelanggan meminta 1024 bait bermula pada offset 0, tetapi menerima kurang daripada 1024 bait data. (Selepas menolak saiz medan RPC dan nilai lain yang dikembalikan oleh prosedur READ, 38 bait data dikembalikan pada baris 10. Ini betul-betul saiz fail hello.c.)

    Dalam contoh ini, proses pengguna tidak mengetahui apa-apa tentang permintaan dan respons NFS ini yang dijalankan oleh kernel. Aplikasi hanya memanggil fungsi teras terbuka, yang menyebabkan 3 permintaan dan 3 respons ditukar (baris 1-6), dan kemudian memanggil fungsi baca teras, yang memanggil 2 permintaan dan 2 respons (baris 7-10). Untuk aplikasi klien, fail yang terletak pada pelayan NFS adalah telus.

    Contoh mudah: mencipta direktori

    Sebagai contoh lain, mari tukar direktori kerja kepada direktori yang terletak pada pelayan NFS, dan kemudian buat direktori baharu:

    Matahari % cd /nfs/bsdi/usr/rstevens tukar direktori kerja
    matahari% mkdir Mail buat direktori

    Rajah 29.8 menunjukkan output arahan tcpdump.

    1 0.0 sun.7ad2 > bsdi.nfs: 104 getattr
    2 0.004912 (0.0049) bsdi.nfs > sun.7ad2: balas ok 96

    3 0.007266 (0.0024) matahari.7ad3 > bsdi.nfs: 104 getattr
    4 0.010846 (0.0036) bsdi.nfs > sun.7ad3: balas ok 96

    5 35.769875 (35.7590) sun.7ad4 > bsdi.nfs: 104 getattr
    6 35.773432 (0.0036) bsdi.nfs > sun.7ad4: balas ok 96

    7 35.775236 (0.0018) sun.7ad5 > bsdi.nfs: 112 carian "Mail"
    8 35.780914 (0.0057) bsdi.nfs > sun.7ad5: balas ok 28

    9 35.782339 (0.0014) sun.7ad6 > bsdi.nfs: 144 mkdir "Mail"
    10 35.992354 (0.2100) bsdi.nfs > sun.7ad6: balas ok 128

    Rajah 29.8 Operasi NFS apabila menukar direktori (cd) kepada direktori NFS dan kemudian mencipta direktori (mkdir).

    Apabila menukar direktori, pelanggan memanggil GETATTR dua kali (baris 1-4). Apabila kami mencipta direktori baharu, pelanggan memanggil GETATTR (baris 5 dan 6), kemudian LOOKUP (baris 7 dan 8 untuk menyemak sama ada direktori itu tidak wujud), kemudian MKDIR untuk mencipta direktori (baris 9 dan 10). Respons OK pada baris 8 tidak bermakna direktori itu wujud. Ia hanya bermakna bahawa prosedur mengembalikan beberapa nilai. tcpdump tidak mentafsir nilai yang dikembalikan oleh prosedur NFS. Perintah hanya mencetak OK dan bilangan bait data dalam tindak balas.

    Sikap acuh tak acuh

    Salah satu ciri NFS (pengkritik NFS memanggilnya ketuat, bukan ciri) ialah pelayan NFS tidak peduli. Pelayan tidak peduli pelanggan mana yang mengakses fail mana. Perhatikan bahawa senarai prosedur NFS yang ditunjukkan sebelum ini tidak termasuk prosedur buka atau tutup. Prosedur LOOKUP adalah serupa dengan buka, tetapi pelayan tidak pernah mengetahui sama ada klien telah mengakses fail selepas LOOKUP dibuat.

    Sebab untuk "kelakuan tidak peduli" ini adalah untuk memudahkan pemulihan daripada kegagalan pelayan selepas ia ranap dan but semula.

    Contoh: kegagalan pelayan

    Dalam contoh berikut, kami sedang membaca fail daripada pelayan NFS apabila pelayan ranap dan but semula. Ini akan menunjukkan bagaimana "ketidakpedulian" pelayan membolehkan pelanggan "tidak tahu" bahawa pelayan telah gagal. Sepanjang masa pelayan ranap dan but semula, pelanggan tidak menyedari masalah tersebut dan aplikasi klien berfungsi sama seperti sebelumnya.

    Pada klien matahari, kami menjalankan kucing dengan fail yang sangat besar sebagai argumen (/usr/share/lib/termcap pada pelayan svr4 NFS), memutuskan sambungan kabel Ethernet pada pertengahan pemindahan, menutup dan but semula pelayan, dan kemudian menyambung semula kabel . Pelanggan telah dikonfigurasikan untuk membaca 1024 bait setiap bacaan NFS. Rajah 29.9 menunjukkan output tcpdump.

    Baris 1-10 sepadan dengan klien membuka fail. Operasi ini adalah serupa dengan yang ditunjukkan dalam Rajah 29.7. Pada baris 11 kita melihat bacaan pertama (BACA) daripada fail 1024 bait data; respons kembali pada baris 12. Ini berterusan sehingga baris 129 (membaca 1024 bait READ dan kemudian membalas OK).

    Dalam baris 130 dan 131 kita melihat dua permintaan yang tamat masa dan diserahkan semula dalam baris 132 dan 133. Soalan pertama: kita melihat dua permintaan baca, satu bermula pada offset 65536 dan satu lagi bermula pada offset 73728, kenapa? Kernel pelanggan menentukan bahawa aplikasi klien membaca secara berurutan dan cuba mendapatkan blok data terlebih dahulu. (Kebanyakan kernel Unix melakukan baca-depan ini.) Kernel klien juga menjalankan beberapa daemon (proses bio) blok NFS (proses bio) yang cuba menjana berbilang permintaan RPC bagi pihak klien. Satu daemon membaca 8192 bait, bermula pada 65536 (dalam rantai 1024-bait), dan yang lain membaca ke hadapan 8192 bait, bermula pada 73728.

    Penghantaran semula pelanggan muncul pada baris 130-168. Pada baris 169 kita melihat bahawa pelayan telah but semula dan menghantar permintaan ARP sebelum menjawab permintaan NFS pelanggan pada baris 168. Respons kepada baris 168 dihantar pada baris 171. Permintaan BACA pelanggan diteruskan.

    1 0.0 sun.7ade > svr4.nfs: 104 getattr
    2 0.007653 (0.0077) svr4.nfs > sun.7ade: balas ok 96

    3 0.009041 (0.0014) sun.7adf > svr4.nfs: 116 carian "kongsi"
    4 0.017237 (0.0082) svr4.nfs > sun.7adf: balas ok 128

    5 0.018518 (0.0013) sun.7ae0 > svr4.nfs: 112 carian "lib"
    6 0.026802 (0.0083) svr4.nfs > sun.7ae0: balas ok 128

    7 0.028096 (0.0013) sun.7ae1 > svr4.nfs: 116 carian "termcap"
    8 0.036434 (0.0083) svr4.nfs > sun.7ae1: balas ok 128

    9 0.038060 (0.0016) matahari.7ae2 > svr4.nfs: 104 getattr
    10 0.045821 (0.0078) svr4.nfs > sun.7ae2: balas ok 96

    11 0.050984 (0.0052) sun.7ae3 > svr4.nfs: 116 dibaca 1024 bait @ 0
    12 0.084995 (0.0340) svr4.nfs > sun.7ae3: balas ok 1124

    Membaca

    128 3.430313 (0.0013) sun.7b22 > svr4.nfs: 116 dibaca 1024 bait @ 64512
    129 3.441828 (0.0115) svr4.nfs > sun.7b22: balas ok 1124

    130 4.125031 (0.6832) matahari.7b23 >
    131 4.868593 (0.7436) matahari.7b24 >

    132 4.993021 (0.1244) sun.7b23 > svr4.nfs: 116 dibaca 1024 bait @ 65536
    133 5.732217 (0.7392) sun.7b24 > svr4.nfs: 116 dibaca 1024 bait @ 73728

    134 6.732084 (0.9999) sun.7b23 > svr4.nfs: 116 dibaca 1024 bait @ 65536
    135 7.472098 (0.7400) sun.7b24 > svr4.nfs: 116 dibaca 1024 bait @ 73728

    136 10.211964 (2.7399) matahari.7b23 >
    137 10.951960 (0.7400) matahari.7b24 >

    138 17.171767 (6.2198) sun.7b23 > svr4.nfs: 116 dibaca 1024 bait @ 65536
    139 17.911762 (0.7400) sun.7b24 > svr4.nfs: 116 dibaca 1024 bait @ 73728

    140 31.092136 (13.1804) sun.7b23 > svr4.nfs: 116 dibaca 1024 bait @ 65536
    141 31.831432 (0.7393) sun.7b24 > svr4.nfs: 116 dibaca 1024 bait @ 73728

    142 51.090854 (19.2594) sun.7b23 > svr4.nfs: 116 dibaca 1024 bait @ 65536
    143 51.830939 (0.7401) sun.7b24 > svr4.nfs: 116 dibaca 1024 bait @ 73728

    144 71.090305 (19.2594) sun.7b23 > svr4.nfs: 116 dibaca 1024 bait @ 65536
    145 71.830155 (0.7398) sun.7b24 > svr4.nfs: 116 dibaca 1024 bait @ 73728

    Penghantaran semula

    167 291.824285 (0.7400) sun.7b24 > svr4.nfs: 116 dibaca 1024 bait @ 73728
    168 311.083676 (19.2594) sun.7b23 > svr4.nfs: 116 dibaca 1024 bait @ 65536

    Pelayan but semula

    169 311.149476 (0.0658) arp siapa ada matahari beritahu svr4
    170 311.150004 (0.0005) arp reply matahari is-at 8:0:20:3:f6:42

    171 311.154852 (0.0048) svr4.nfs > sun.7b23: balas ok 1124

    172 311.156671 (0.0018) sun.7b25 > svr4.nfs: 116 dibaca 1024 bait @ 66560
    173 311.168926 (0.0123) svr4.nfs > sun.7b25: balas ok 1124
    membaca

    Rajah 29.9 Pelanggan membaca fail apabila pelayan NFS ranap dan but semula.

    Aplikasi pelanggan tidak akan tahu bahawa pelayan ranap dan but semula, kecuali terdapat jeda 5 minit antara baris 129 dan 171, jadi ranap pelayan adalah telus kepada pelanggan.

    Untuk menganggarkan tempoh tamat masa penghantaran semula dalam contoh ini, bayangkan bahawa terdapat dua daemon pelanggan, masing-masing dengan tamat masa mereka sendiri. Selang untuk daemon pertama (membaca dari offset 65536) adalah lebih kurang seperti berikut (dibundarkan kepada dua tempat perpuluhan): 0.68; 0.87; 1.74; 3.48; 6.96; 13.92; 20.0; 20.0; 20.0 dan seterusnya. Selang untuk daemon kedua (membaca dari offset 73728) adalah sama. Ini bermakna pelanggan NFS ini menggunakan tamat masa yang merupakan gandaan 0.875 saat, dengan had atas 20 saat. Selepas setiap tamat masa, selang penghantaran semula berganda: 0.875; 1.75; 3.5; 7.0 dan 14.0.

    Berapa lamakah masa yang diambil untuk pelanggan membuat penghantaran semula? Pelanggan mempunyai dua pilihan yang boleh menjejaskan perkara ini. Pertama, jika sistem fail pelayan dipasang keras, pelanggan akan menghantar semula selama-lamanya, tetapi jika sistem fail pelayan dipasang lembut, pelanggan akan berhenti mencuba selepas bilangan penghantaran semula yang tetap. Selain itu, dalam kes pemasangan keras, pelanggan mempunyai pilihan untuk membenarkan pengguna membatalkan penghantaran semula yang gagal atau tidak membatalkannya. Jika, semasa memasang sistem fail pelayan, hos pelanggan menunjukkan bahawa ia boleh diganggu, dan jika kita tidak mahu menunggu 5 minit untuk pelayan but semula selepas ranap, kita boleh memasukkan simbol gangguan untuk menamatkan aplikasi klien.

    Beberapa prosedur yang sama

    Prosedur RPC boleh dilaksanakan oleh pelayan beberapa kali, tetapi masih mengembalikan hasil yang sama. Sebagai contoh, prosedur membaca NFS. Seperti yang kita lihat dalam Rajah 29.9, pelanggan hanya mengeluarkan semula panggilan READ selagi ia menerima respons. Dalam contoh kami, sebab penghantaran semula adalah kerana pelayan tidak berfungsi. Jika pelayan tidak gagal dan mesej yang mengandungi respons RPC telah hilang (memandangkan UDP ialah protokol yang tidak boleh dipercayai), pelanggan hanya menghantar semula dan pelayan melakukan READ yang sama sekali lagi. Bahagian yang sama pada fail yang sama dibaca semula dan dihantar kepada klien.

    Ini berfungsi kerana setiap permintaan baca READ mengandungi offset permulaan. Jika prosedur NFS meminta pelayan membaca N bait seterusnya bagi fail, ia tidak akan berfungsi. Jika pelayan tidak acuh tak acuh (ini adalah bertentangan dengan acuh tak acuh) dan respons telah hilang dan klien mengeluarkan semula READ untuk N bait seterusnya, hasilnya akan berbeza. Inilah sebabnya mengapa prosedur NFS READ dan WRITE mempunyai offset permulaan. Ia adalah pelanggan yang mengekalkan keadaan (offset semasa untuk setiap fail), bukan pelayan.

    Malangnya, tidak semua operasi sistem fail boleh dilakukan beberapa kali. Sebagai contoh, bayangkan langkah berikut: klien NFS mengeluarkan permintaan REMOVE untuk mengalih keluar fail; Pelayan NFS memadam fail dan bertindak balas OK; tindak balas pelayan hilang; Pelanggan NFS tamat masa dan menghantar semula permintaan; Pelayan NFS tidak dapat mencari fail dan mengembalikan ralat; Aplikasi klien menerima ralat yang menyatakan bahawa fail itu tidak wujud. Ralat ini dikembalikan kepada aplikasi klien, dan ralat ini membawa maklumat yang salah - fail tidak wujud dan telah dipadamkan.

    Di bawah ialah senarai prosedur NFS yang boleh dilaksanakan beberapa kali: GETATTR, STATFS, LOOKUP, READ, WRITE, READLINK dan READDIR. Prosedur yang tidak boleh dilaksanakan beberapa kali: CREATE, REMOVE, RENAME, LINK, SYMLINK, MKDIR dan RMDIR. SETATTR biasanya dilaksanakan beberapa kali, melainkan ia digunakan untuk memotong fail.

    Oleh kerana tindak balas yatim selalu mungkin berlaku apabila menggunakan UDP, pelayan NFS mesti mempunyai cara untuk mengendalikan operasi yang tidak boleh dilakukan beberapa kali. Kebanyakan pelayan mempunyai cache respons terbaharu di mana mereka menyimpan respons yang diterima terakhir untuk operasi sedemikian. Setiap kali pelayan menerima permintaan, ia mula-mula melihat melalui cachenya, dan jika padanan ditemui, mengembalikan respons sebelumnya daripada memanggil prosedur NFS sekali lagi. [Juszczak 1989] menerangkan butiran jenis cache ini.

    Pendekatan kepada prosedur pelayan ini digunakan untuk semua aplikasi berasaskan UDP, bukan hanya NFS. DNS, sebagai contoh, menyediakan perkhidmatan yang boleh digunakan beberapa kali tanpa rasa sakit. Pelayan DNS boleh menanyakan parser beberapa kali, yang tidak akan membawa kepada keputusan negatif (mungkin, kecuali sumber rangkaian akan diduduki).

    NFS versi 3

    Pada tahun 1994, spesifikasi untuk versi 3 protokol NFS telah dikeluarkan [Sun Microsystems 1993]. Pelaksanaan dijangka tersedia pada tahun 1994.

    Berikut ialah senarai ringkas perbezaan utama antara versi 2 dan 3. Kami akan memanggilnya V2 dan V3.

    1. Deskriptor fail dalam V2 ialah tatasusunan bersaiz tetap 32 bait. Dalam V3 ia adalah tatasusunan bersaiz berubah-ubah dengan saiz sehingga 64 bait. Tatasusunan panjang berubah-ubah dalam XDR ditakrifkan oleh pembilang 4-bait diikuti oleh bait sebenar. Ini mengurangkan saiz deskriptor fail dalam pelaksanaan seperti Unix, di mana hanya kira-kira 12 bait diperlukan, tetapi membenarkan pelaksanaan bukan Unix bertukar maklumat tambahan.
    2. V2 mengehadkan bilangan bait setiap prosedur READ atau WRITE RPC kepada 8192 bait. Had ini tidak terpakai dalam V3, yang seterusnya bermakna bahawa menggunakan UDP had hanya akan menjadi saiz datagram IP (65535 bait). Ini membolehkan paket besar digunakan untuk membaca dan menulis pada rangkaian pantas.
    3. Saiz fail dan offset bait permulaan untuk prosedur READ dan WRITE telah dikembangkan daripada 32 kepada 64 bit, membolehkan saiz fail yang lebih besar dikendalikan.
    4. Atribut fail dikembalikan dalam setiap panggilan yang boleh menjejaskan atribut. Ini mengurangkan bilangan panggilan GETATTR yang diperlukan oleh pelanggan.
    5. Tulisan (WRITE) boleh menjadi tak segerak, manakala dalam V2 ia sepatutnya segerak. Ini boleh meningkatkan prestasi prosedur WRITE.
    6. Satu prosedur telah dialih keluar (STATFS) dan tujuh telah ditambah: ACCESS (semak kebenaran fail), MKNOD (buat fail Unix khas), READDIRPLUS (mengembalikan nama fail dalam direktori bersama-sama dengan atributnya), FSINFO (mengembalikan maklumat statistik tentang sistem fail ), FSSTAT (mengembalikan maklumat sistem fail dinamik), PATHCONF (mengembalikan maklumat fail POSIX.1) dan COMMIT (melakukan penulisan tak segerak yang dibuat sebelum ini kepada storan berterusan).

    Kesimpulan ringkas

    RPC ialah satu cara untuk membina aplikasi pelayan-pelanggan dengan cara yang pelanggan hanya memanggil prosedur pada pelayan. Semua butiran rangkaian disembunyikan dalam stub klien dan pelayan, yang dijana untuk aplikasi oleh pakej RPC dan dalam rutin perpustakaan RPC. Kami menunjukkan format panggilan RPC dan mesej respons dan menyebut bahawa XDR digunakan untuk mengekod nilai, membenarkan pelanggan dan pelayan RPC berjalan pada seni bina mesin yang berbeza.

    Salah satu aplikasi RPC yang paling banyak digunakan ialah Sun NFS, protokol akses fail heterogen yang digunakan secara meluas pada hos hampir semua saiz. Kami melihat NFS dan cara ia menggunakan UDP atau TCP. Protokol NFS Versi 2 mentakrifkan 15 prosedur.

    Akses pelanggan ke pelayan NFS bermula dengan protokol pelekap, selepas itu pemegang fail dikembalikan kepada klien. Pelanggan kemudiannya boleh mengakses fail pada sistem fail pelayan menggunakan pemegang fail ini. Nama fail dicari pada pelayan satu elemen nama pada satu masa, mengembalikan pemegang fail baharu untuk setiap elemen. Hasil akhir ialah pemegang kepada fail yang telah diakses, dan yang digunakan untuk membaca dan menulis berurutan.

    NFS cuba untuk membuat semua prosedurnya bebas daripada bilangan pelaksanaan supaya pelanggan hanya boleh mengeluarkan semula permintaan jika respons hilang. Kami telah melihat contoh ini di mana pelanggan sedang membaca fail semasa pelayan ranap dan but semula.

    Senaman

    Dalam Rajah 29.7, kami melihat bahawa tcpdump mentafsirkan paket sebagai permintaan dan respons NFS, dan mencetak XID. Bolehkah tcpdump melakukan ini untuk sebarang permintaan atau respons RPC?
  • Pada pendapat anda, mengapakah program pelayan RPC pada sistem Unix menggunakan port yang diperuntukkan secara dinamik dan bukannya port yang telah diketahui?
  • Pelanggan RPC memanggil dua prosedur pelayan. Prosedur pertama mengambil masa 5 saat untuk diselesaikan, dan yang kedua - 1 saat. Pelanggan mempunyai tamat masa selama 4 saat. Lukis gambarajah masa tentang apa yang ditukar antara klien dan pelayan. (Bayangkan bahawa tidak ada masa yang dihabiskan untuk menghantar mesej dari klien ke pelayan dan sebaliknya.)
  • Dalam contoh dalam Rajah 29.9, apakah yang akan berlaku jika kad Ethernet pelayan NFS dialih keluar semasa pelayan NFS dimatikan?
  • Apabila pelayan but semula dalam Rajah 29.9, ia memproses permintaan bermula pada offset 65536 (baris 168 dan 171), dan kemudian memproses permintaan seterusnya bermula pada offset 66560 (baris 172 dan 173). Apakah yang berlaku kepada pertanyaan bermula pada offset 73728 (baris 167)?
  • Apabila kami menerangkan prosedur yang bebas daripada bilangan pelaksanaan NFS, kami menunjukkan contoh tindak balas ABUH yang hilang dalam rangkaian. Apakah yang berlaku dalam kes ini jika TCP digunakan dan bukannya UDP?
  • Jika pelayan NFS menggunakan port yang diperuntukkan secara dinamik dan bukannya port 2049, apakah yang berlaku kepada klien NFS apabila pelayan ranap dan but semula?
  • Terdapat sangat, sangat sedikit nombor port yang dikhaskan (Bab 1, bahagian "Nombor Port"), dengan maksimum 1023 setiap hos. Jika pelayan NFS memerlukan pelanggannya mempunyai port tersimpan (yang biasanya mereka lakukan), dan klien NFS menggunakan TCP memasang sistem fail N pada N pelayan yang berbeza, adakah pelanggan perlu mempunyai nombor port tersimpan yang berbeza untuk setiap sambungan?