FUSE манипулирование файловой системой - PullRequest
2 голосов
/ 16 июля 2011

Как мне перебрать иноды в суперблоке файловой системы FUSE? В документации ничего не сказано об этом.

Ответы [ 2 ]

4 голосов
/ 03 августа 2011

Вы можете перебирать видимые (те, которые имеют записи), вызывая nftw() в точке монтирования активного экземпляра FUSE.Предоставленному обратному вызову будет дан путь и struct stat для каждой записи в файловой системе.Вы можете взаимодействовать с соответствующими inode через системные вызовы возвращаемых путей.

4 голосов
/ 03 августа 2011

FUSE не является файловой системой и не содержит традиционных inode. Лучше думать об этом, как об обратном тому, что предоставляет API файловой системы UNIX. Например, когда вы открываете файл, вы генерируете системный вызов открытия файла. Затем ядро ​​принимает этот системный вызов и возвращает файл.

То, что делает FUSE, это ядро, которое перенаправляет этот системный вызов в приложение FUSE, которое возвращается в пространство пользователя. Затем приложение решает, как ответить на этот системный вызов, и возвращает что-то ядру. Затем ядро ​​передает этот ответ обратно исходному вызывающему приложению.

Во многих случаях, когда вы монтируете что-то с помощью FUSE, вы не монтируете физический носитель. Когда вы открываете файл в файловой системе FUSE, он, вероятно, собирается создать временный файл в реальной файловой системе, скопировать данные в этот файл, а затем перенаправить большинство вызовов файловых операций над файлом FUSE во созданный им временный файл. ,

Большинство приложений FUSE реализуют stat и предоставляют большую часть информации, которую будет иметь реальная структура INODE, однако эта информация, как правило, не будет иметь аспект указателя.

С технической точки зрения вы можете реализовать что-то вроде EXT3 в FUSE, где в качестве аргумента монтирования будет использоваться файловая система EXT3 для монтирования. В этом случае вы можете представить себе реальные INODES, возможно, с реальными указателями INODE. Однако такая реализация EXT3, вероятно, будет довольно непопулярна, поскольку каждый вызов файловой системы будет включать в себя переход от пользовательского пространства к ядру к пользовательскому пространству FUSE к ядру, к пользовательскому пространству FUSE к ядру и затем, наконец, к вашему приложению. FUSE имеет больше смысла для файловых систем, где производительность не важна.

...