Saya mencoba menggunakan kunci flock () / BSD untuk mengunci file yang digunakan pada banyak klien, tetapi file menjadi rusak. Bagaimana bisa? A. flock () / kunci BSD hanya bertindak secara lokal pada klien Linux NFS sebelum 2.6.12. Gunakan kunci fcntl () / POSIX untuk memastikan bahwa kunci file dapat dilihat oleh klien lain.
Berikut adalah beberapa cara untuk membuat serialisasi akses ke file NFS.
Gunakan API pengunci fcntl () / POSIX. Jenis penguncian ini menyediakan penguncian rentang-byte di banyak klien melalui protokol NLM, atau melalui NFSv4. Gunakan file kunci terpisah, dan buat tautan keras ke sana. Lihat deskripsi di bagian O_EXCL halaman manual creat (2). Perlu dicatat bahwa sampai kernel 2.6 awal, O_EXCL menciptakan tidak atom pada klien Linux NFS. Jangan gunakan O_EXCL membuat dan mengharapkan perilaku atom di antara banyak klien NFS kecuali Anda menjalankan kernel yang lebih baru dari 2.6.5.
Ini masalah yang diketahui Perl menggunakan penguncian kawanan () / BSD secara default. Ini dapat memecah program yang porting dari sistem operasi lain, seperti Solaris, yang mengharapkan kunci kawanan / BSD berfungsi seperti kunci POSIX.
Di Linux, menggunakan penguncian file sebagai ganti tautan keras memiliki manfaat tambahan dengan memeriksa titik cache klien dengan server. Ketika kunci file diperoleh, klien akan membuka cache halaman untuk file itu sehingga setiap pembacaan selanjutnya mendapatkan data baru dari server. Ketika kunci file dilepaskan, setiap perubahan pada file pada klien itu dibilas kembali ke server sebelum kunci dilepaskan sehingga klien lain yang menunggu untuk mengunci file itu dapat melihat perubahan.
Klien NFS di 2.6.12 menyediakan dukungan untuk kawanan () / kunci BSD pada file NFS dengan meniru kunci gaya BSD dalam hal kunci jangkauan byte POSIX. Klien NFS lain yang menggunakan mekanisme emulasi yang sama, atau yang menggunakan kunci fcntl () / POSIX, kemudian akan melihat kunci yang sama dengan yang dilihat oleh klien Linux NFS.
Pada sistem file Linux lokal, kunci POSIX dan kunci BSD tidak terlihat satu sama lain. Dengan demikian, karena persaingan ini, aplikasi yang berjalan pada server Linux NFS masih akan melihat file dikunci oleh klien NFS sebagai dikunci dengan kunci fcntl () / POSIX, apakah aplikasi pada klien menggunakan gaya BSD atau POSIX- kunci gaya. Jika aplikasi server menggunakan kawanan () kunci BSD, itu tidak akan melihat kunci yang digunakan klien NFS.