Ответ 1
Есть 4 поля (источник):
- инода
- номер основного устройства
- номер младшего устройства
- смещение байта
Предполагая, что жесткий диск будет сегментирован в тысячах очень маленьких частей с номером для каждого из них, inode будет более или менее похож на число крошечной части, где начинается файл. Таким образом, заданный индексный дескриптор уникален для каждого жесткого диска, но для того, чтобы разрешить случаи, когда на одном и том же сервере имеется несколько дисков, требуется использование основного и младшего номера устройства, чтобы гарантировать уникальность триплета {inode, младшего номера устройства, номер младшего устройства}. Более точную информацию об инодах на Wikipedia.
Тем не менее, я не уверен, что (например) файлы, смонтированные через NFS, не могли столкнуться с локальными файлами, так как индексный файл файла, установленного через NFS, кажется удаленным. Несмотря на то, что я не думаю, что писатель плагинов беспокоился о таких случаях, и, несмотря на то, что сам использовал NFS, до сих пор не возникало никаких проблем. Также я подозреваю, что вероятность столкновения очень мала.
Теперь с помощью триплета, образованного inode и номерами основных и второстепенных устройств, мы можем настроить таргетинг на единственный файл журнала, который плагин читает без ошибок (или, по крайней мере, это было первоначальное намерение). Последний номер, смещение байта, отслеживает, насколько далеко файл входного журнала уже был прочитан и выведен в Logstash.
В некоторых конкретных архитектурах, таких как Solaris или Windows, были ошибки с рубином, ошибочно обнаруживающим номер inode, равное 0. Это могло бы привести к таким проблемам, как logstash, не обнаруживая вращения файла.