Isso se refere ao UFS genérico .
Pelo que entendi, quando um caminho absoluto é fornecido (por exemplo: /home/userU/file.txt
) o disco é acessado para cada diretório e o arquivo. Portanto, neste caso, o disco é acessado 4 vezes
1 para /
, 1 para home/
, 1 para /userU
, 1 parafile.txt
Minhas perguntas são
- Se for fornecido um link
/hL
físico, apontando para o inode do arquivo acima, em que ordem o disco é acessado? - Se for fornecido um soft link
/sL
, apontando para o arquivo acima, em que ordem o disco é acessado?
Suponha que nenhum inode ou qualquer outro dado seja armazenado em cache inicialmente em todos os três casos.
Fundo
Digamos que temos a seguinte configuração de diretório:
Agora vamos analisar suas 2 perguntas.
Perguntas
Com hardlinks, eles possuem a mesma referência de inode que o arquivo/diretório original para o qual estão apontando. Portanto, não há acesso HDD adicional para lê-los.
Por exemplo:
vs.
A única diferença entre esses 2 é o nome. Portanto, qualquer caminho incorrerá no mesmo número de acessos ao HDD.
No entanto, com links suaves, há um acesso adicional ao HDD. Esse acesso adicional seria contra os metadados do diretório, onde o arquivo
sL
reside. Isso retornaria detalhes informando que esse arquivo é de fato um link simbólico e está apontando para outro arquivo/diretório.Por exemplo:
Aqui podemos ver que é do tipo 'link simbólico' e está apontando para
afile.txt
. Observe também que ele tem um inode diferente (681295 vs. 667668), mais uma prova de que vai custar uma leitura adicional.Então, quais são as ordens de leitura?
Se você usar
strace
o próprio shell Bash, onde está executando comandos nesses arquivos/diretórios, poderá ter uma ideia de como as coisas funcionam.Aqui está a saída do comando
more /tmp/adir/hL
.Para
/tmp/adir/hL
:Para
/tmp/adir/sL
:Detalhes adicionais
A página da Wikipedia sobre links simbólicos também escapa a tudo isso:
Referências
Ambas as perguntas feitas são de fato a pergunta: "Como
path_resolution
funciona?", então basta olhar para todo o processo desse ponto de vista.De PATH_RESOLUTION(7) lemos:
E depois vemos que o primeiro passo é comum tanto para hardlinks quanto para links simbólicos (onde o sistema decide qual é o ponto inicial da resolução do caminho: diretório raiz
/
, diretório chroot ou diretório atual).Como não vemos diferença no ponto de partida entre links físicos e simbólicos. Mas, uma diferença aparece no próximo passo quando a caminhada começa:
Como a descrição indica, não há diferença na resolução do caminho para arquivos e links físicos - o processo é o mesmo. E os links simbólicos? Lemos mais:
Como indicado acima, a resolução de links simbólicos requer operações adicionais de acesso ao disco, respondendo às duas perguntas:
e
podemos concluir que o acesso por hardlinks não difere do acesso comum a arquivos, mas a resolução de links simbólicos requer operações adicionais de acesso ao disco, ou seja, resolução de link simbólico .
Leitura adicional: