考虑以下简短的程序,其中/nfsmount/merlin
是一个 NFS 挂载目录。
import java.io.*;
import java.nio.channels.*;
public class Main{
public static void main(String[] args) throws Exception {
String evilFile = "/nfsmount/merlin/foobar";
RandomAccessFile raf = new RandomAccessFile(evilFile, "rw");
FileChannel chan = raf.getChannel();
FileLock lock = chan.tryLock();
}
}
NFS 服务器有两个 IP 地址。当挂载到第一个 IP 时,上述程序运行正常。但是,当挂载到第二个 IP 时,程序会报错。
Exception in thread "main" java.io.IOException: No locks available
at sun.nio.ch.FileDispatcherImpl.lock0(Native Method)
at sun.nio.ch.FileDispatcherImpl.lock(FileDispatcherImpl.java:91)
at sun.nio.ch.FileChannelImpl.tryLock(FileChannelImpl.java:1095)
at java.nio.channels.FileChannel.tryLock(FileChannel.java:1154)
at Main.main(Main.java:11)
快速搜索可找到这个问题,这似乎表明 有问题lockd
。该程序在一个 IP 上运行的事实意味着lockd
仅绑定到一个 IP。
我该如何配置它才能让它lockd
在多个 IP 上正常工作?