Назад | Перейти на главную страницу

Как настроить блокировку NFS (v3) для работы с несколькими IP-адресами?

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