В протоколе CIFS / SMB я вижу, что существует 3 типа файловых дескрипторов: надежные, устойчивые и постоянные. В чем разница между ними?
Мои основные рекомендации по следующим вопросам:
https://wiki.samba.org/index.php/SMB3_kernel_status
и хотя изначально это было для Samba3, в нем есть более подробная информация:
https://wiki.samba.org/index.php/Samba3/SMB2
Прочные дескрипторы файлов позволяют подключению к серверу SMB пережить кратковременный сбой в сети - стойкие дескрипторы не обязательно очищаются после завершения процесса открытия. Когда клиент пытается повторно подключиться, если блокировка (/ lease) все еще существует, он повторно подключается к файлу.
Но если другой клиент пытается открыть файл, oplock / lease нарушается, и первый клиент не может повторно подключиться.
Устойчивые дескрипторы файлов сохраняются, даже если oplock / lease нарушена, но, честно говоря, я не могу следить за всеми техническими деталями того, как это работает. В одной из ссылок ниже говорится, что разница между Durable и Resilient заключается в том, как создаются ручки - Устойчивый с помощью вызова контекста создания и устойчивый с помощью IOCTL. (Главное, что я не могу понять, - это то, как в это вписывается последовательность блокировок и воспроизведение, но не похоже, что это критическая разница между прочностью и отказоустойчивостью.)
Для постоянных ручек лучше ничего придумать не могу чем этот документ Samba:
Стойкие ручки для файлов - это прочные ручки для файлов с надежными гарантиями. Они запрашиваются с помощью долговечного большого двоичного объекта запроса на создание версии 2 с постоянным флагом, установленным в значение true. Сервер предоставляет постоянные дескрипторы только для общих ресурсов, которые помечены как CA (постоянно доступны).
Насколько я могу судить, они еще не реализованы в Samba, но цель состоит в том, чтобы поддерживать кластеризацию и непрерывную доступность, так что над этим работают.
Подробнее о постоянных дескрипторах ... Постоянные дескрипторы доступны на нескольких серверах одного кластера. Когда один сервер выходит из строя по какой-либо причине, клиентская машина может полупрозрачно продолжать использовать этот дескриптор через соединение с другим сервером. Вот почему реализация постоянных дескрипторов (в отличие от прочных и отказоустойчивых дескрипторов) выходит за рамки чисто SMB. Например, наше хранилище NQ ожидает, что полная семантика постоянных дескрипторов будет реализована в настраиваемой VFS, в то время как механизм SMB отвечает за соответствующий синтаксис.
Постоянный дескриптор Samba поддерживает состояние дескрипторов файлов, и даже если один из серверов в кластере выходит из строя, новый мастер может получить текущий дескриптор файла и продолжить ввод-вывод без каких-либо ошибок ввода-вывода.