Рассмотрим следующую короткую программу, где /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-адресам?