2011-11-29 41 views
19

Tôi gặp sự cố với bộ nhớ đệm thuộc tính phía máy khách NFS. Tôi đang sử dụng một số máy chủ, một là máy chủ NFS và các máy chủ khác là máy chủ khách NFS.Lệnh xóa bộ nhớ cache NFS?

Tất cả các máy chủ đều là Debian (lenny, 2.6.26-2-amd64 của Linux) và các phiên bản sau đây.

% dpkg -l | grep nfs 
ii libnfsidmap2      0.20-1      An nfs idmapping library 
ii nfs-common       1:1.1.2-6lenny1   NFS support files common to client and server 
ii nfs-kernel-server     1:1.1.2-6lenny1   support for NFS kernel server 

Trong máy chủ NFS,/etc/exports được viết như sau:

/export-path 192.168.0.0/255.255.255.0(async,rw,no_subtree_check) 

Trong các khách hàng NFS,/etc/fstab được viết như sau:

server:/export-path  /mountpoint nfs rw,hard,intr,rsize=8192,async 0 0 

Như bạn có thể thấy, tùy chọn "không đồng bộ" được sử dụng cho hiệu suất truy cập nhiều khách hàng. Tuy nhiên, đôi khi điều này có thể gây ra lỗi sai bộ nhớ đệm.

Vì tôi đang duy trì nhiều máy chủ (và tôi không cho phép mạnh mẽ để thay đổi tùy chọn gắn kết), tôi không muốn sửa đổi/etc/exports hoặc/etc/fstab. Tôi nghĩ rằng nó là đủ nếu tôi có một công cụ dòng lệnh "dọn dẹp" bộ nhớ cache thuộc tính phía máy khách NFS với sự cho phép của người dùng.

Vui lòng cho tôi biết nếu có các lệnh như vậy.

Cảm ơn,


(Nối)

tôi nghĩa là do "lỗi sai-bộ nhớ đệm",

% ls -l /data/1/kabe/foo     
ls: cannot access /data/1/kabe/foo: No such file or directory 
% ssh another-server 'touch /data/1/kabe/foo' 
% ls -l /data/1/kabe/foo 
ls: cannot access /data/1/kabe/foo: No such file or directory 

Đôi khi trường hợp này xảy ra. Vấn đề không phải là nội dung tệp nhưng thuộc tính tệp (= thông tin về răng giả) vì NFS cho biết nó đảm bảo tính nhất quán gần như mở.

+0

Tôi đã tìm thấy câu hỏi này trong khi điều tra các giải pháp khả thi cho vấn đề này (+1 cho điều đó). Tôi muốn hoặc không có bộ nhớ đệm cục bộ hoặc thời gian hết hạn rất ngắn của bộ nhớ cache cục bộ nếu NFS không thể cung cấp tính nhất quán khác. Gigabit LAN không phải là một trở ngại vì vậy tôi không mong đợi quá nhiều mất hiệu suất làm như vậy. Một giải pháp lý tưởng sẽ là máy chủ theo dõi những thay đổi đối với hệ thống tập tin và thông báo cho khách hàng khi bộ nhớ cache của họ cần được xóa sạch nhưng tôi không nghĩ rằng NFS hỗ trợ điều này. – Tronic

+0

Vì băng thông không đáng kể ở đây nhưng * độ trễ *, Gigabit LAN vẫn có một số tác động hiệu suất. FWIW, 'lookupcache = none' đã tăng thời gian cho' git clone' từ 2,7 giây lên 20 giây đối với tôi. –

Trả lời

18

Tùy thuộc vào ý bạn của "lỗi bộ nhớ đệm sai", chạy sync có thể giúp bạn có được những gì bạn cần. Điều này sẽ xóa tất cả các bộ đệm hệ thống tập tin.

Nếu cần, bạn cũng có thể xóa bộ đệm ảo trong hạt nhân bằng cách sử dụng /proc/sys/vm/drop_caches.

# To free pagecache 
echo 1 > /proc/sys/vm/drop_caches 

# To free dentries and inodes 
echo 2 > /proc/sys/vm/drop_caches 

# To free pagecache, dentries and inodes 
echo 3 > /proc/sys/vm/drop_caches 
+0

Cảm ơn bạn đã trả lời. Tôi đã thêm vào ý nghĩa của "lỗi bộ nhớ đệm sai" cho câu hỏi của mình. Vấn đề này chưa được giải quyết chỉ bởi 'đồng bộ'. Tôi nghĩ rằng thứ hai của lệnh đề xuất của bạn, vì vậy tôi sẽ cố gắng sau này. –

+0

Điều này đã hiệu quả! Cảm ơn bạn rất nhiều. –

+1

Tôi có cùng một vấn đề, tôi muốn đồng bộ hóa trên thư mục cụ thể, giả sử tôi không có gốc, vì vậy tôi không thể chạy các lệnh được đề xuất – Zamir

1

xóa/var/lib/nfs/rmtab tệp trên máy chủ nfs.

Các lệnh dưới đây được sử dụng để xóa các vấn đề liên quan đến bộ nhớ. và nó cũng rất nguy hiểm. lần soem nó sẽ sụp đổ ứng dụng ur lưu trữ trên hộp

# sync 

# To free pagecache 
echo 1 > /proc/sys/vm/drop_caches 

# To free dentries and inodes 
echo 2 > /proc/sys/vm/drop_caches 

# To free pagecache, dentries and inodes 
echo 3 > /proc/sys/vm/drop_caches 
3

AFAIK, các syncasync tùy chọn không phải là nguồn gốc của thuộc tính bộ nhớ đệm. Async cho phép máy chủ trì hoãn lưu dữ liệu vào hệ thống tệp của máy chủ, ví dụ: nó ảnh hưởng đến độ bền ghi trong trường hợp lỗi máy chủ NFS, nhưng nếu máy chủ NFS ổn định thì async không ảnh hưởng đến các máy khách NFS.

Có tùy chọn gắn kết NFS lookupcache=positive có thể được sử dụng để ngăn bộ nhớ cache tra cứu tiêu cực, ví dụ: NFS trả về "Không có tệp hoặc thư mục như vậy" khi tệp thực sự tồn tại trên máy chủ. Xem Directory entry caching trong man nfs.

6

Trong một quy trình nhất định, gọi opendir và closir trên thư mục mẹ của tệp sẽ làm mất hiệu lực bộ nhớ cache NFS. Tôi đã sử dụng nó trong khi lập trình một công việc lên lịch. Rất, rất hữu ích. Thử nó!

+0

Cảm ơn bạn rất nhiều vì đề xuất này – mob

1

Bạn đang thấy ảnh hưởng của bộ nhớ cache thuộc tính của NFS. Xem man nfs và xem DATA AND METADATA COHERENCE.

NFS theo mặc định lưu trữ các thuộc tính trong tối thiểu 30 giây (acregminacdirmin) và tối đa 60 giây (acregmaxacdirmax). Bạn có thể ghi đè tất cả các mục này cùng với actimeo hoặc tắt hoàn toàn bộ nhớ cache thuộc tính với noac. Với tùy chọn gắn kết noac, hành vi được mô tả bởi OP sẽ biến mất, nhưng sẽ đạt hiệu suất.

lookupcache=positive hữu ích nếu bạn chỉ tìm kiếm hình thức của các tệp mới, nhưng việc xóa sẽ vẫn đi qua bộ đệm thuộc tính.

Các vấn đề liên quan