AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / unix / Perguntas / 498495
Accepted
Philip Couling
Philip Couling
Asked: 2019-02-04 13:55:53 +0800 CST2019-02-04 13:55:53 +0800 CST 2019-02-04 13:55:53 +0800 CST

Como os números de inode de ls -i se relacionam com inodes no disco

  • 772

Estou tentando entender como os números de inode (como exibidos por ls -i) funcionam com partições ext4.

Estou tentando entender se eles são uma construção do kernel linux e mapeados para inodes no disco, ou se eles realmente são os mesmos números armazenados no disco.

Perguntas:

  1. Os números de inode mudam quando um computador é reinicializado?
  2. Quando duas partições são montadas, pode ls -iproduzir o mesmo número de inode para dois arquivos diferentes, desde que estejam em partições diferentes.
  3. Os números de inode podem ser reciclados sem reinicializar ou remontar partições?

Por que estou perguntando...

Eu quero criar um índice secundário em um disco rígido USB com 1,5 TB de dados e cerca de 20 milhões de arquivos (nomes de arquivos). Os arquivos variam de 10s de bytes a 100s de GB. Muitos deles são vinculados várias vezes, portanto, um único arquivo (blob no disco) pode ter até 200 nomes de arquivo.

Minha tarefa é economizar espaço em disco detectando duplicatas e substituindo a duplicação por links ainda mais rígidos.

Agora, como um único exercício, acho que posso criar um banco de dados de cada arquivo no disco, é shasum, permissões etc... Uma vez construído, detectar duplicação deve ser trivial. Pouco preciso ter certeza de que estou usando a chave exclusiva correta. Os nomes dos arquivos são inadequados devido ao grande número de links físicos existentes. Minha esperança é que eu possa usar números de inode.

O que eu gostaria de entender é se o número do inode mudará ou não na próxima reinicialização da minha máquina. Ou se eles são ainda mais voláteis (eles mudarão enquanto estou construindo meu banco de dados?)

Toda a documentação que li falsifica a distinção entre números de inodes apresentados pelo kernel e inodes no disco. Se são ou não a mesma coisa, não está claro com base nos artigos que já li.

linux filesystems
  • 2 2 respostas
  • 1839 Views

2 respostas

  • Voted
  1. Best Answer
    Sergiy Kolodyazhnyy
    2019-02-04T15:34:13+08:002019-02-04T15:34:13+08:00

    Estou tentando entender como os números de inode (como exibidos por ls -i) funcionam com partições ext4.

    Essencialmente, inode é uma referência para um sistema de arquivos (!), uma ponte entre os dados reais no disco (os bits e bytes) e o nome associado a esses dados ( /etc/passwdpor exemplo). Os nomes dos arquivos são organizados em diretórios, onde a entrada do diretório é o nome do arquivo com o inode correspondente.

    O inode então contém as informações reais - permissões, quais blocos estão ocupados no disco, proprietário, grupo, etc. Em Como as estruturas de diretório são armazenadas no sistema de arquivos UNIX , há um diagrama muito legal, que explica um pouco melhor a relação entre arquivos e inodes:

    insira a descrição da imagem aqui

    E quando você tem um arquivo em outro diretório apontando para o mesmo número de inode, você tem o que é conhecido como hard link.

    Agora, observe que enfatizei que o inode é uma referência específica para o sistema de arquivos, e aqui está o motivo para estar atento a isso:

    O número do inode de qualquer arquivo é exclusivo para o sistema de arquivos, mas não necessariamente exclusivo para todos os sistemas de arquivos montados em um determinado host. Quando você tem vários sistemas de arquivos, você verá números de inodes duplicados entre os sistemas de arquivos, isso é normal.

    Isso contrasta com os dispositivos . Você pode ter vários sistemas de arquivos no mesmo dispositivo, como /varfilesystem e /, e ainda assim eles estão na mesma unidade.

    Agora, o número do inode pode mudar? Tipo de. O sistema de arquivos é responsável pelo gerenciamento de inodes, portanto, a menos que haja problemas subjacentes com o sistema de arquivos, o número do inode não deve ser alterado. Em certos casos complicados, como o editor de texto vim ,

    renomeia o arquivo antigo e grava um novo arquivo com o nome original, se achar que pode recriar os atributos do arquivo original. Se você quiser reutilizar o inode existente (e correr o risco de perder dados ou perder mais tempo fazendo uma cópia de backup), adicione set backupcopy yes ao seu .vimrc.

    O ponto-chave a ser lembrado é que onde os dados podem ser os mesmos para o usuário, sob o capô eles realmente são gravados em um novo local no disco, daí a alteração no número do inode.

    Então, para encurtar as coisas:

    1. Os números de inode mudam quando um computador é reinicializado?

    Não, a menos que haja algo errado com o sistema de arquivos após a reinicialização

    2. Quando duas partições são montadas, ls -i pode produzir o mesmo número de inode para dois arquivos diferentes, desde que estejam em partições diferentes.

    Sim, já que duas partições diferentes terão sistemas de arquivos diferentes. Eu não sei muito sobre LVM , mas sob esse tipo de gerenciamento de armazenamento dois volumes físicos podem ser combinados em um único volume lógico, o que, no meu palpite teórico, seria o caso ls -de produzir um inode por arquivo

    1. Os números de inode podem ser reciclados sem reinicializar ou remontar partições?

    O sistema de arquivos faz isso quando um arquivo é removido (ou seja, quando todos os links para o arquivo são removidos e não há nada apontando para esse inode).


    Minha tarefa é economizar espaço em disco detectando duplicatas e substituindo a duplicação por links ainda mais rígidos.

    Bem, a detecção de duplicação pode ser feita por meio md5sumde outro comando de soma de verificação. Nesse caso, você está examinando os dados reais, que podem ou não viver em diferentes inodes no disco. Um exemplo é da resposta do heemayls :

    find . ! -empty -type f -exec md5sum {} + | sort | uniq -w32 -dD
    
    • 7
  2. Stephen Kitt
    2019-02-04T14:03:14+08:002019-02-04T14:03:14+08:00
    1. Não, os números de inode não mudam quando um computador é reinicializado, pelo menos não com sistemas de arquivos POSIX (como ext4) onde o inode é armazenado no disco.

    2. Sim, dois arquivos diferentes em partições diferentes podem ter o mesmo número de inode. Consulte Dois arquivos em dois sistemas de arquivos separados podem compartilhar o mesmo número de inode? e Por que os diretórios /home, /usr, /var, etc. têm o mesmo número de inode (2)? para detalhes. (O que é único, dentro de um determinado sistema, é o par número do dispositivo-inode.)

    3. Sim, se você excluir um arquivo, seu inode pode ser reutilizado sem reinicializar ou remontar.

    • 3

relate perguntas

  • du/df e ls relatando diferentes usos de disco

  • Necessidade de algumas chamadas de sistema

  • astyle não altera a formatação do arquivo de origem

  • Como os desenvolvedores do kernel Linux lidam com seu trabalho com milhões de linhas de código? É um método? [fechado]

  • Passe o sistema de arquivos raiz por rótulo para o kernel do Linux

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Possível firmware ausente /lib/firmware/i915/* para o módulo i915

    • 3 respostas
  • Marko Smith

    Falha ao buscar o repositório de backports jessie

    • 4 respostas
  • Marko Smith

    Como exportar uma chave privada GPG e uma chave pública para um arquivo

    • 4 respostas
  • Marko Smith

    Como podemos executar um comando armazenado em uma variável?

    • 5 respostas
  • Marko Smith

    Como configurar o systemd-resolved e o systemd-networkd para usar o servidor DNS local para resolver domínios locais e o servidor DNS remoto para domínios remotos?

    • 3 respostas
  • Marko Smith

    apt-get update error no Kali Linux após a atualização do dist [duplicado]

    • 2 respostas
  • Marko Smith

    Como ver as últimas linhas x do log de serviço systemctl

    • 5 respostas
  • Marko Smith

    Nano - pule para o final do arquivo

    • 8 respostas
  • Marko Smith

    erro grub: você precisa carregar o kernel primeiro

    • 4 respostas
  • Marko Smith

    Como baixar o pacote não instalá-lo com o comando apt-get?

    • 7 respostas
  • Martin Hope
    user12345 Falha ao buscar o repositório de backports jessie 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl Por que a maioria dos exemplos do systemd contém WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky Como exportar uma chave privada GPG e uma chave pública para um arquivo 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll status systemctl mostra: "Estado: degradado" 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim Como podemos executar um comando armazenado em uma variável? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S Por que /dev/null é um arquivo? Por que sua função não é implementada como um programa simples? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 Como ver as últimas linhas x do log de serviço systemctl 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - pule para o final do arquivo 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla Por que verdadeiro e falso são tão grandes? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis Substitua a string em um arquivo de texto enorme (70 GB), uma linha 2017-12-30 06:58:33 +0800 CST

Hot tag

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve