Индексирование файловой системы разреженным индексом Inode (macOS/HFS+)
Я стремлюсь лучше понять, какова политика выделения номера Inode новым файлам в собственной файловой системе macOS.
Чтобы проверить, какие идентификаторы используются, я написал простой скрипт, который сканирует используемые номера инодов в /.vol/
точка монтирования, которая используется для доступа к файлам по их идентификационному номеру (так называемый номер инода), а не по имени. Похоже, что многие идентификаторы свободны.
import magic
import os
mime = magic.Magic(mime=True)
base_inode = 0
local_mount = 16777220
for x in range(0, 100000):
inode = base_inode + x
try :
file_path = os.path.join('/.vol', local_mount, str(inode))
mime.from_file(file_path)
except Exception as ex:
print ex
и вот некоторый типичный выходной блок, который подразумевает, что из 15 последовательных идентификаторов используется только один (игнорируйте разрешение, меня волнует только наличие файла под этим идентификатором):
[Errno 2] No such file or directory: '/.vol/16777220/8593855259'
[Errno 2] No such file or directory: '/.vol/16777220/8593855260'
[Errno 2] No such file or directory: '/.vol/16777220/8593855262'
[Errno 2] No such file or directory: '/.vol/16777220/8593855263'
[Errno 2] No such file or directory: '/.vol/16777220/8593855265'
[Errno 2] No such file or directory: '/.vol/16777220/8593855267'
[Errno 13] Permission denied: '/.vol/16777220/8593855268'
[Errno 2] No such file or directory: '/.vol/16777220/8593855269'
[Errno 2] No such file or directory: '/.vol/16777220/8593855271'
[Errno 2] No such file or directory: '/.vol/16777220/8593855273'
[Errno 2] No such file or directory: '/.vol/16777220/8593855274'
[Errno 2] No such file or directory: '/.vol/16777220/8593855276'
[Errno 2] No such file or directory: '/.vol/16777220/8593855278'
[Errno 2] No such file or directory: '/.vol/16777220/8593855279'
Ожидается, что группа используемых инодов будет менее разреженной. И если это действительно так, существует ли какая-либо редкая эффективная структура данных, в которой эти файлы хранятся (например, связанный список), чтобы можно было перейти к следующему используемому идентификатору без сканирования...