Compreensão detalhada dos Inodes Linux com Exemplo
Linux e outros sistemas operacionais Unix-like mantêm consistência ao tratar tudo como um arquivo (mesmo os dispositivos de hardware). O teclado, mouse, impressoras, monitor, disco rígido, processos, até mesmo os diretórios são tratados como arquivos em Linux. Os arquivos regulares contêm dados como texto (arquivos de texto), música, vídeos (arquivos multimídia), etc.
para além dos dados regulares, existem outros dados sobre estes ficheiros, tais como o seu tamanho, propriedade, permissões, datas, etc. Este metadado sobre um arquivo é gerenciado com uma estrutura de dados conhecida como inode (nó de índice).
o que é um inode no Linux?
cada ficheiro ou directório Linux (do ponto de vista técnico, não há diferença real entre eles) tem um inode, e este inode contém todos os meta-dados do ficheiro (ou seja, todos os dados administrativos necessários para ler um ficheiro são armazenados no seu inode).
Por exemplo, o inode contém uma lista de todos os blocos em que um arquivo é armazenado, a informação do proprietário para esse arquivo, permissões e todos os outros atributos que são definidos para o arquivo.
inode limits is per filesystem and is decided at filesystem creation time. O tamanho máximo de diretório dependente do sistema de arquivos e, portanto, o limite exato difere.
para um melhor desempenho, torne as suas pastas menores, ordenando ficheiros em sub-pastas, em vez de ter uma pasta grande.
o que é um número inode?
Inode number is also known as index number. Um inode é um número único atribuído a arquivos e diretórios enquanto ele é criado. O número inode será único em todo o sistema de arquivos.
um inode é uma estrutura de dados em um sistema de arquivos tradicional Unix, como ext3 ou ext4. armazenar as propriedades de um arquivo e diretórios.
Linux extended filesystems such as ext3 or ext4 maintain an array of these inodes called the inode table. Esta tabela contém a lista de todos os arquivos no sistema de arquivos. O inodes individual na tabela inode tem um número único (único para esse sistema de arquivos) chamado de número inode.
a seguinte informação é armazenada no inode:
- tipo de ficheiro: ficheiro regular, directório, pipe, etc.permissões
- para esse ficheiro: ler, gravar, executar
- Link count: O número de ligação rígida em relação a um inode
- ID do Usuário: o proprietário do arquivo
- o ID do Grupo: grupo proprietário
- Tamanho do arquivo: ou maior/menor número, no caso de alguns arquivos especiais
- carimbo de Tempo: tempo de acesso, de modificação do tempo e (inode) mudanças de horário de
- Atributos: imutável”, por exemplo
- lista de controle de Acesso: permissões especiais para os usuários/grupos
- Link para o local do arquivo
- Outros metadados sobre o arquivo
Note que o inode não armazena o nome do arquivo, mas o seu conteúdo informativo.
Como verificar inode no Linux
Se você deseja ter um olhar para inodes, em qualquer extensão de arquivo de sistema você pode usar comandos abaixo para verificar as propriedades do sistema de arquivos e os arquivos que são utilizados na mesma.
A. Display file data information
você pode mostrar os dados inode em um arquivo ou diretório usando o comando stat.
tem de indicar o nome do ficheiro da seguinte forma::
a saída de Estado diz-lhe os vários selos de tempo do ficheiro, a sua propriedade e permissões, e onde é armazenado. Os dados do arquivo são mantidos no bloco de disco, que é mostrado na saída de comando do inode.
Você pode optar por listar apenas o número de inode de um arquivo com o --format
opção como abaixo:
# stat --format=%i hello530461
b. Impressão de número de índice de arquivos
O comando ls é usado para listar arquivos e diretórios da informação. A opção -i
com ls mostra o número inode de cada ficheiro. Podemos combiná-lo com -l
opção para listar informações em detalhe
a primeira coluna dá o número inode. Poderá mostrar o inodo de um ficheiro em particular como se segue:
# ls -i continue.sh 519450 continue.sh
C. mostrar a informação do sistema de ficheiros Noode espaço
por omissão, o comando df resume o espaço em disco disponível e usado. Em vez disso, pode receber um relatório sobre os inodes disponíveis e usados, passando a opção -i
ou --inodes
.
Esta informação pode ser útil se uma partição tem muitos arquivos pequenos, que podem esgotar inodes disponíveis mais cedo do que eles empobrecem o espaço em disco disponível.
D. liste o conteúdo do superblock do sistema de ficheiros
pode usar tune2fs -l
para mostrar toda a informação relacionada com o inode.
E. Manipule o sistema de ficheiros meta-dados
pode ver o conteúdo de um inode como existe num sistema de ficheiros Ext4 com comando de depuração. Você precisa usar o comando stat que está disponível no depurador do sistema de arquivos para mostrar o conteúdo do inode. Quando terminar, use o exit para fechar o ambiente de depuração.
certifique-se de que os arquivos no sistema de arquivos não podem ser acessados durante o trabalho em debugfs. Você deve considerar a remontagem do sistema de arquivos usando mount -o remount /yourfilesystem
Você pode usar o debugfs para desfazer a exclusão de um arquivo usando seu inode e indicando um arquivo
Inode estrutura para o diretório
Como dito acima, a diretórios no Linux também são tratados como arquivos. Diretório é um arquivo especial que mapeia um nome de arquivo para o seu número inode (este mapeamento é chamado de entrada de diretório ou dentry). Então, quando dizemos que um diretório contém arquivos e outros diretórios, queremos dizer que este diretório está mapeando esses arquivos e diretórios (diretórios são Arquivos especiais, então eles também precisam mapear para seus números inode) para seus números inode.
Esta é a razão pela qual um diretório não pode conter dois arquivos com o mesmo nome, porque ele não pode mapear um nome com dois números inode diferentes.
# ls -ld test/drwxr-xr-x 3 root root 4096 Apr 13 01:43 test/
Como um ficheiro é mapeado para seu inode por seu diretório pai, então, como é o mais alto do diretório (por exemplo, / directory
) mapeado para seu inode? O número inode de /
diretório é fixo, e é sempre 2.
ligações e número de índice no Linux
na saída de ls -l
, a coluna que segue as permissões e antes do dono é a contagem de ligações. A contagem de Link é o número de links duros para um arquivo. Para entender ligações duras, começamos com ligações. Um link é um ponteiro para outro arquivo.
No mundo Linux, existem dois tipos de ligações:
A. ligações simbólicas (ou ligações moles)
a ligação simbólica é um ficheiro separado cujo conteúdo aponta para o ficheiro ligado-a. Para criar uma ligação simbólica, use o comando ln com a opção -s
. Ao usar o comando ln, certifique-se de que você primeiro se refere ao nome do arquivo original e, em seguida, ao nome do link que você deseja criar.
# ln -s /home/bobbin/sync.sh filesync
Aqui ‘filesync’ é uma ligação simbólica para ‘sync.sh pense nisso como um atalho. Editar ‘filesync’ é como editar diretamente o arquivo original, mas é realmente o que acontece. Se apagarmos ou movermos o ficheiro original, a ligação será quebrada e o nosso ficheiro ‘filesync’ não estará mais disponível.
o comando ls -l
mostra que o ficheiro resultante é uma ligação simbólica. Isto é indicado pela letra l na primeira posição dols -l
saída e também pela seta no final da listagem, que indica o arquivo a que o nome se refere.
# ls -l filesync lrwxrwxrwx 1 root root 20 Apr 7 06:08 filesync -> /home/bobbin/sync.sh
o conteúdo de uma ligação simbólica são apenas o nome do ficheiro alvo. Você pode ver que as permissões no link simbólico estão completamente abertas. Isto porque as permissões não são geridas por
ao comparar a ligação simbólica com o ficheiro original, irá notar uma diferença clara entre elas.
o ficheiro original é apenas um nome que está ligado directamente ao inode, e a ligação simbólica refere-se ao nome. O tamanho do link simbólico é o número de bytes no nome do arquivo a que se refere, porque nenhuma outra informação está disponível no link simbólico.
B. ligações duras
para ter uma ideia do que é uma ligação dura, é importante compreender que a identidade de um ficheiro é o seu número inode, não o seu nome. Um link duro é um nome que faz referência a um inode. Significa que se’ file1 ‘tem um link chamado’ file2′, então ambos os arquivos se referem ao mesmo inode. Então, quando você cria um link rígido para um arquivo, tudo que você realmente faz é adicionar um novo nome a um inode.
para fazer isto, use o comando ln sem opção.
# ls -l /home/bobbin/sync.sh -rw-r----- 1 root root 5 Apr 7 06:09 /home/bobbin/sync.sh
# ln /home/bobbin/sync.sh synchro
Agora, vamos comparar os dois arquivos
A coisa interessante sobre links de disco rígido é de que não existe diferença entre o arquivo original e o link: eles são apenas dois nomes ligados para o mesmo inode.
Como você deve ter notado, ao contrário de links suaves, links duros não são Arquivos especiais. Agora, a contagem de link é o número que um arquivo foi ligado. Assim, uma contagem de links aumenta depois de criar um link duro como você pode ver na figura acima. Estas ligações duras têm duas limitações:
- as pastas não podem ser ligadas de forma dura. O Linux não permite que isso mantenha a estrutura acíclico de árvore de diretórios.
- uma ligação dura não pode ser criada através dos sistemas de ficheiros. Ambos os arquivos devem estar no mesmo sistema de arquivos, porque diferentes sistemas de arquivos têm diferentes tabelas inode independentes (dois arquivos em diferentes sistemas de arquivos, mas com o mesmo número inode será diferente).
Como encontrar uma ligação dura no Linux
você pode obter todos os nomes de ficheiros que apontam para um número inode. Isso significa que você pode recuperar links duros porque é o único tipo de link onde podemos ter alguns nomes de arquivos que apontam para o mesmo conteúdo (inode). Você pode fazer isso com o -inum
opção de localizar o comando conforme abaixo
# find / -inum 517333/home/bobbin/sync.sh/root/synchro
Com isso, você pode saber quais nomes de arquivos ponto a informações, dados assim, recuperar todos os link de disco rígido em relação a um determinado número de inode
Linux operações com arquivos e sua relação com os inodes
a Maioria das operações (tais como copiar) realizada em soft links afetará o real arquivo vinculado (com exceção da rm ou mv comandos, o que remover (ou mover) soft link próprio)
Aqui estão algumas operações de arquivo em que inodes desempenhar o seu papel vital:
um. copiar arquivos
quando copiamos um arquivo, um novo arquivo com um novo inode é criado.
# cp myfile ..
# ls -li myfile ../myfile2501 -rw------- 1 raghu raghu 36 Jun 25 20:12 myfile3746 -rw------- 1 raghu raghu 36 Jan 11 12:05 ../myfile
B. mover os ficheiros
ao atravessar os sistemas de Ficheiros, o comando mv prossegue como comando cp acima, com a excepção de que o ficheiro original é removido da sua localização. Mas quando se move dentro de um sistema de arquivos, o inode não muda, apenas o mapeamento de diretório do inode é alterado, os dados reais no disco rígido (conteúdo do arquivo) não se move.
# ls -li samplefile.txt2497 -rw------- 1 raghu raghu 22 Jun 25 20:12 samplefile.txt
Agora, vamos mover o arquivo e verifique o resultado
# mv samplefile.txt ..
# ls -li ../samplefile.txt2497 -rw------- 1 raghu raghu 22 Jun 25 20:12 ../samplefile.txt
c. remover ficheiros
Quando o comando rm é emitido, primeiro, ele verifica a contagem de link do arquivo. Se a contagem de ligações for maior que 1
, então remove essa entrada de directório e diminui a contagem de ligações. Ainda assim, os dados estão presentes, nem o inode é afetado. E quando a contagem de links é 1
, o inode é excluído da tabela inode, o número inode torna-se livre, e os blocos de dados que este arquivo estava ocupando são adicionados à lista de blocos de dados livres.
# ls -li myfile myfile.hardlink2501 -rw------- 2 raghu raghu 36 Jun 25 2012 myfile2501 -rw------- 2 raghu raghu 36 Jun 25 2012 myfile.hardlink
let’s delete the file and check the result
# rm myfile.hardlink
# ls -li myfile2501 -rw------- 1 raghu raghu 36 Jun 25 2012 myfile
pode ver que o número de inode está diminuído.conclusão