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

Мы попали в беду после обновления от наших клиентов с Ubuntu 12.04 до Ubuntu 14.04.

Поведение:

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

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

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

Анализ:

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

С tcpdump и wireshark я вижу, что 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? Или как должен выглядеть ответ сервера в соответствии со спецификациями?

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

1 ответ

Решение

Исправлено в ZFS на Linux:

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

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

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

Другие вопросы по тегам