Por que há mais arquivos / hardlinks com o mesmo iNode do que os shows contagem de referência?
-
19-09-2019 - |
Pergunta
Eu recursed uma pasta em um único volume, e recuperou uma lista de nomes de arquivos, referência contagens e números de inode, usando
NSFileManager attributesOfItemAtPath
e NSDictionary fileSystemFileNumber e objectForKey: NSFileReferenceCount
Por alguma razão eu estou recebendo resultados, como uma contagem de referência de 10, mas uma lista de muitos mais do que 10 arquivos com o mesmo número de inode.
De nota é que eu não estou incluindo links simbólicos em minha lista, eu só estou gravando um arquivo quando [Dict fileType] == NSFileTypeRegular
Todas as ideias por que isso pode ser o caso?
Edit: @ Peter Hosey, estou escrevendo o iNode e contagem de referência da seguinte forma:
CLMFileManagedObj *clmf;
clmf = (CLMFileManagedObj *)[NSEntityDescription insertNewObjectForEntityForName:@"CLMFile" inManagedObjectContext:moc];
NSUInteger fsfn = [dict fileSystemFileNumber];
[clmf setValue:[NSNumber numberWithUnsignedInteger:fsfn] forKey:@"iNodeNumber"];
[clmf setValue:(NSNumber*)[dict objectForKey:NSFileReferenceCount] forKey:@"referenceCount"];
Note que a razão iNodeNumber e referenceCount estão sendo escritas de forma ligeiramente diferente é que [Dict] ofertas a direta (NSUInteger) fileSystemFileNumber get-método, enquanto o fileReferenceCount precisa ser recuperada usando as chaves (de acordo com qualquer ajuda que eu poderia encontrar em NSDictionary )
Ambas as propriedades da entidade CLMFile são Int 64. Do que eu posso dizer, tipo de NSUInteger depende se o modo de 32 ou 64 bits em execução, mas [NSNumber numberWithUnsignedInteger] aceita NSUInteger como argumento, então eu diria que se trata com o número corretamente em qualquer modo.
Não consigo ver onde no Activity Monitor diz se é 32/64 bit. Eu diria que qualquer que seja o padrão para XCode 3.1.3 projetos são.
É possível que eu estou faltando alguma coisa aqui, como eu sou relativamente novo para Mac / Obj-C / Xcode / cacau, por isso qualquer ajuda / ponteiros seria apreciada. programador experiente, mas não neste ambiente (embora a aprender mais rápido que eu puder ....)
Solução
Você está olhando para backups Time Machine? Estão lá hardlinks diretório envolvido?
Se o diretório A contém diretórios B1 e B2 que são hardlinked, um arquivo com o mesmo inode estaria dentro ambos B1 e B2, mas a contagem de referência pode ser um.