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

NFS-клиент, ZFS-сервер ZoL: cat для измененного файла заканчивается на not found

У нас возникли проблемы после обновления наших клиентов с Ubuntu 12.04 до Ubuntu 14.04.

Поведение:

На клиенте A я изменяю существующий файл foo на общей папке nfs. На клиенте B я делаю cat foo.

1-й раз после монтажа работает. cat показывает содержимое foo. Но если я снова изменю foo на клиенте A и сделаю cat на B, я получу ошибку: cat: foo: Нет такого файла или каталога

Делая ls на B решает проблему и cat foo снова работает, показывая новый контент. Но если я снова изменю foo на клиенте A, кот на клиенте B не будет работать.

Анализ:

Если программа на B сначала выполняет системный вызов stat, все работает. Но если такая программа, как cat, напрямую использует системный вызов open, она не найдет файл!

С помощью tcpdump и wirehark я могу видеть, что Ubuntu 12.04 вызывает пакет NFS под «PUTFH» с использованием правильного (обновленного) дескриптора файла, но в 14.04 дескриптор файла неправильный (равен старому дескриптору файла до изменения в системе A).

Теперь очень интересная часть: если мой общий ресурс nfs на сайте сервера находится в файловой системе ext4, и я делюсь им через / etc / exports, сервер nfs отвечает кодом ошибки NFS4ERR_STALE. Клиент (B) выполнит второй запрос с правильным дескриптором файла, и все будет работать нормально. Даже 14.04.

Если мой общий ресурс nfs на сайте сервера находится в файловой системе ZFS (ZoL 0.6.4.1, CentOS 7 и Ubuntu 14.04) и я делюсь им с помощью параметра sharefs или / etx / exports, сервер nfs отвечает кодом ошибки NFS4ERR_NOENT. Клиент потерпит неудачу.

Вопросы: 1. Как мне заставить новые клиенты (14.04+) правильно обновлять дескриптор файла, как в 12.04 2. (Альтернативно) Как я могу заставить сервер отвечать с помощью NFS4ERR_STALE в файловой системе ZFS? Или как должен выглядеть ответ сервера согласно спецификации?

С уважением, Йорг

пропатчен в ZFS в Linux:

https://github.com/zfsonlinux/zfs/pull/3404

получите версию git и скомпилируйте ее:

git clone https://github.com/zfsonlinux/zfs.git