Jika saya memiliki klien windows membaca file pada Linux smb berbagi pada interval <= 10 detik, klien windows akan menunjukkan informasi yang salah (di-cache?) File tersebut.
Saya telah mereproduksi ini di banyak sistem.
Contoh langkah untuk mereproduksi:
1) mengatur share linux samba - untuk contoh ini, menggunakan Debian dan menginstal samba. contoh:
sudo mkdir /test
sudo chmod 777 /test
tambahan smb.conf:
[test]
read only = no
locking = no
path = /test/
guest ok = yes
2) Petakan direktori ini sebagai drive di klien windows (tes ini akan menggunakan L :)
3) buat file dengan beberapa teks di server samba
nano /test/test.txt
ORIGINAL
4) buat file batch sederhana di mesin windows untuk melihat file setiap 5 detik:
copy con test.bat
@echo off
cls
:1
type L:\test.txt
timeout 5
goto 1
5) jalankan file batch, itu harus menunjukkan ASLI setiap 5 detik.
6) di server linux, ubah konten file
nano /test/test.txt
CHANGED
7) melihat file batch berjalan di windows, masih akan mengatakan "ASLI" setiap lima detik, dan tidak "DIUBAH" seperti file aslinya.
8) menghentikan file batch dan tunggu ~ 15 detik, ATAU ubah batas waktu menjadi sesuatu> 10 detik, dan itu akan diperbarui dengan benar.
Semoga saya sudah menjelaskan dan menjabarkan cara mengujinya dengan cukup.
Adakah yang bisa mereproduksi perilaku ini dan / atau menyarankan cara memperbaikinya?
.
.
.
CATATAN:
Klien Linux> Linux SMB Host menunjukkan konten file yang tepat.
Klien Windows> Windows SMB Host menunjukkan konten file yang tepat.
Khususnya Klien Windows> Linux SMB Host yang tidak menampilkan konten file yang tepat pada interval penyegaran <= 10 detik.
Semua rasa Windows yang telah saya uji dengan (Win7, Win10, Server2016) menunjukkan perilaku yang sama.
Saya juga telah menguji protokol yang berbeda pada share samba saya 'NT1, SMB2, SMB3', dan mereka tidak mengubah perilaku.
CATATAN: Saya yakin ini kemungkinan besar merupakan masalah Windows, tetapi saya belum menerima tanggapan tentang teknologi atau superuser dalam seminggu. Ini seharusnya cukup mudah untuk diuji, adakah yang bisa mengkonfirmasi perilaku atau keadaan ini sebaliknya?
sumber
Jawaban:
Nilai default untuk pengaturan yang relevan adalah:
oplocks = yes
kernel oplocks = no
(Lihat dokumentasi Samba smb.conf )
Anda dapat menonaktifkan kunci pembuka, sesuai jawaban lain .
Atau, jika Anda menjalankan Linux O / S dengan kernel modern (2.4 atau lebih baru), Anda dapat meninggalkan
oplocks = yes
dan sebagai gantinya menambahkan barissmb.conf
untuk mengaktifkan kunci pembuka kernel. Sesuai bagian kernel oplocks (S) dalam dokumentasi:Ketika
oplocks
dankernel oplocks
keduanya diaktifkan, Anda harus mendapatkan kinerja yang baik (dari caching) dan pembatalan cache ketika file diperbarui.Untuk mengaktifkan kunci pembuka kernel, tambahkan baris ini ke file konfigurasi Samba Anda:
sumber
oplocks
harus dinonaktifkan. Pada bagian kedua kutipan mengatakan memungkinkan mereka bersamakernel oplocks
. Apakah benar untuk menyarankan contoh terakhir Anda seharusnya tidak hanyakernel oplocks = yes
tetapi jugaoplocks = yes
?oplocks = yes
dankernel oplocks = no
. Jadi tidak perlu menambahkanoplocks = yes
; kita hanya perlu menentukankernel oplocks
nilainya.Saya menyelesaikan ini dengan menempatkan
di smb.conf saya di bawah pengaturan share saya.
https://www.samba.org/samba/docs/old/Samba3-HOWTO/locking.html#id2615926
sumber