ioctl()
e FIBMAP
podem ser usados para determinar os blocos físicos ocupados por um arquivo, dados os blocos lógicos obtidos via stat()
; no entanto, o acesso root é necessário. Por que o acesso root é necessário para a verificação da localização do disco de um arquivo, e existem mecanismos que não requerem raiz para obter as mesmas informações? Para o caso de uso que motiva essa questão, os arquivos são pequenos (cerca de 1 bloco em média), portanto, o conhecimento da localização física do primeiro bloco seria suficiente (blocos indiretos certamente são desnecessários). Na ordem de 100.000 esses arquivos devem ser acessados em curto prazo (o mais rápido possível), e eu gostaria de pré-classificar com base na localização do disco antes da entrega na fila do agendador de E / S. A classificação por inode
é uma possibilidade que não requer privilégios de root, mas o grau de correspondência entre o número de inode e a localização do disco é probabilístico, implicando variação de desempenho com a força dessa correspondência.
Tags c io filesystems