2012-06-17 2 views
8

Я планирую реализовать файловую систему FUSE с использованием низкоуровневого API и в настоящее время пытается понять структуру fuse_entry_param.Что такое номера генерации inode?

Интересно, что именно unsigned long fuse_entry_param::generation на самом деле означает. Documentation says только то, что пара ino/generation должна быть уникальной для жизни файловой системы, но не вдаваться в подробности.

Какова семантика поколений inode и как они используются?

Например, можно просто рассмотреть generation как дополнительные биты ino (как своего рода пространство имен) и использовать их свободно карту произвольно пожизненный уникальные 128-битный (2*sizeof(unsigned long) на x86_64) значениях дескрипторов? Или поколения должны только последовательно увеличиваться? Что происходит, когда числа inode сталкиваются, но их номера генерации отличаются?

ответ

11

Поле «генерация» важно, если ваш генератор номера inode может генерировать разные номера inode в разное время для одного и того же объекта. Это необычно для файловых систем на диске, но это может случиться для сетевых файловых систем (например, NFS, см. 1).

В файле 1 указано, что после перезагрузки сервер может использовать различные команды (fuse) inode numbers/(nfs). Если это произойдет, возможно, что новые номера inode сопоставляются с объектами по-другому, а затем номера inode, которые были выданы до перезапуска сервера. Клиент может использовать другой номер поколения для набора inode до перезагрузки и для набора inodes после перезапустить, чтобы указать, что означает индекс.

Если ваша файловая система имеет статическую схему генерации для inodes (где номер inode всегда указывает на один и тот же объект), нет необходимости использовать номер генерации, и его можно использовать для расширения номера индексного дескриптора.

Смежные вопросы