Các máy khách Windows sẽ không làm mới tệp samba Linux cục bộ nếu đọc tệp trong khoảng thời gian <= 10 giây


8

Nếu tôi có một máy khách windows đọc một tệp trên Linux smb share trong khoảng thời gian <= 10 giây, máy khách windows sẽ hiển thị thông tin không chính xác (được lưu trong bộ nhớ cache?) Của tệp đó.

Tôi đã tái tạo điều này trên nhiều hệ thống.

Các bước ví dụ để sao chép:

1) thiết lập chia sẻ samba linux - ví dụ này, sử dụng Debian và cài đặt samba. thí dụ:

sudo mkdir /test
sudo chmod 777 /test

bổ sung smb.conf:

[test]    
read only = no    
locking = no    
path = /test/    
guest ok = yes

2) Ánh xạ thư mục này dưới dạng một ổ đĩa trong máy khách windows (bài kiểm tra này sẽ sử dụng L :)

3) tạo một tập tin với một số văn bản trên máy chủ samba

nano /test/test.txt
ORIGINAL

4) tạo tệp bó đơn giản trên máy windows để xem tệp cứ sau 5 giây:

copy con test.bat
@echo off
cls
:1
type L:\test.txt
timeout 5
goto 1

5) chạy tệp bó, nó sẽ hiển thị GỐC sau mỗi 5 giây.

6) trên máy chủ linux, thay đổi nội dung tập tin

nano /test/test.txt
CHANGED

7) xem tệp bó đang chạy trên windows, nó vẫn sẽ nói "NGUỒN GỐC" cứ sau năm giây chứ không phải "THAY ĐỔI" như tệp thực.

8) chấm dứt tệp bó và đợi ~ 15 giây, HOẶC thay đổi thời gian chờ thành thứ gì đó> 10 giây và nó sẽ cập nhật đúng.

Hy vọng rằng tôi đã giải thích và vạch ra cách kiểm tra điều này đầy đủ.

Bất cứ ai cũng có thể tái tạo hành vi này và / hoặc đề nghị cách khắc phục điều này?

.

.

.

GHI CHÚ:

Máy khách Linux> Máy chủ Linux SMB hiển thị nội dung tệp thích hợp.

Windows Client> Windows SMB Host hiển thị nội dung tệp thích hợp.

Cụ thể là Windows Client> Linux SMB Host không hiển thị nội dung tệp thích hợp trong khoảng thời gian làm mới <= 10 giây.

Tất cả các hương vị Windows tôi đã thử nghiệm với (Win7, Win10, Server2016) đều thể hiện hành vi tương tự.

Tôi cũng đã thử nghiệm các giao thức khác nhau trên chia sẻ samba của mình 'NT1, SMB2, SMB3' và chúng không thay đổi hành vi.

LƯU Ý: Tôi tin rằng đây rất có thể là sự cố của Windows, nhưng tôi chưa nhận được bất kỳ phản hồi nào về kỹ thuật hoặc siêu người dùng trong một tuần. Điều này khá dễ dàng để kiểm tra, bất cứ ai cũng có thể xác nhận hành vi này hoặc trạng thái khác?


Chào! Có thể là máy khách windows lưu tập tin. Bạn đã thử thiết lập một máy chủ tập tin windows để xem nó có hoạt động như vậy không. Tôi biết bạn cần windows, nhưng tôi chỉ nói đùa. Giải pháp tốt nhất từng có: gỡ cài đặt windows.
máy tính

Tôi đã thử nghiệm điều này trên Server 2016 với vai trò File Server được cài đặt. Hành vi tương tự xảy ra.
R. StackUser

Có lẽ bước tiếp theo sẽ là kiểm tra việc vô hiệu hóa bộ nhớ đệm ở phía máy chủ và phía máy khách ...
máy tính

Câu trả lời:


8

Các giá trị mặc định cho các cài đặt có liên quan là:

  • oplocks = yes
  • kernel oplocks = no

(Xem tài liệu Samba smb.conf )


Bạn có thể vô hiệu hóa oplocks, theo câu trả lời khác .

Ngoài ra, nếu bạn đang chạy Linux O / S với kernel hiện đại (2.4 hoặc mới hơn), bạn có thể rời khỏi oplocks = yesthay vào đó thêm một dòng smb.confđể kích hoạt oplocks kernel. Theo phần oplocks kernel (S) trong tài liệu:

Hỗ trợ oplocks hạt nhân cho phép các oplocks Samba bị phá vỡ bất cứ khi nào một quá trình UNIX cục bộ hoặc hoạt động NFS truy cập vào một tệp mà smbd (8) đã bị khóa. Điều này cho phép thống nhất dữ liệu hoàn chỉnh giữa SMB / CIFS, NFS và truy cập tệp cục bộ

Khi oplockskernel oplockscả hai đều được bật, bạn sẽ có được hiệu suất tốt (từ bộ đệm) và vô hiệu hóa bộ đệm khi các tệp được cập nhật.

Để bật oplocks kernel, hãy thêm dòng này vào tệp cấu hình Samba của bạn:

kernel oplocks = yes

1
Trong phần đầu tiên của câu trả lời của bạn, bạn nhấn mạnh rằng oplocksnên được vô hiệu hóa. Trong phần thứ hai, trích dẫn nói cho phép họ cùng với kernel oplocks. Sẽ là đúng khi đề xuất ví dụ cuối cùng của bạn không chỉ có kernel oplocks = yesmà còn oplocks = yes?
roaima

@roaima, cấu hình mặc định là: oplocks = yeskernel oplocks = no. Vì vậy, không cần phải thêm oplocks = yes; chúng ta chỉ cần xác định kernel oplocksgiá trị.
Serge

2
Tôi chỉ nghĩ rằng có lẽ vì phần đầu tiên trong câu hỏi của bạn đề nghị vô hiệu hóa nó, nên có giá trị kết nối điều đó trong đề xuất cuối cùng của bạn.
roaima

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.