Os arquivos do dispositivo não são arquivos per se. Eles são uma interface de E / S para usar os dispositivos em sistemas operacionais semelhantes ao Unix. Eles não usam espaço no disco, no entanto, ainda usam um inode, conforme relatado pelo stat
comando:
$ stat /dev/sda
File: /dev/sda
Size: 0 Blocks: 0 IO Block: 4096 block special file
Device: 6h/6d Inode: 14628 Links: 1 Device type: 8,0
Os arquivos do dispositivo usam inodes físicos no sistema de arquivos e por que eles precisam?
filesystems
devices
inode
stat
péssimos
fonte
fonte
Respostas:
A resposta curta é que isso ocorre somente se você tiver um sistema de arquivos físico
/dev
(e se você estiver usando uma distribuição Linux moderna, provavelmente não).A resposta longa é a seguinte:
Tudo isso remonta à filosofia original do UNIX de que tudo é um arquivo. Essa filosofia faz parte do que tornou o UNIX tão versátil, porque você pode interagir diretamente com os dispositivos do espaço do usuário sem precisar ter um código especial em seu aplicativo para conversar diretamente com o hardware físico.
Originalmente,
/dev
era apenas outro diretório com um nome conhecido onde você colocava os arquivos do dispositivo. Alguns sistemas UNIX ainda adotam essa abordagem (acredito que o OpenBSD ainda o faça), e você geralmente pode dizer se um sistema é assim, porque ele possui muitos arquivos de dispositivos para dispositivos que o sistema não possui (por exemplo, arquivos para todos os sistemas). partição possível em todos os discos possíveis). Isso economiza espaço na memória e tempo de inicialização, com o custo de usar um pouco mais de espaço em disco, o que foi uma boa opção para os sistemas antigos, porque eles geralmente eram muito limitados à memória e não muito rápidos. Isso geralmente é referido como tendo uma estática/dev
.Nos sistemas Linux modernos (e eu acredito também no FreeBSD e, possivelmente, nas versões recentes do Solaris),
/dev
existe um sistema de arquivos temporário na memória preenchido pelo kernel (ou udev, se você usa o Systemd, porque eles não confiam no kernel para fazer quase qualquer coisa) . Isso economiza espaço em disco ao preço de alguma memória (geralmente menos de alguns MB) e uma sobrecarga de processamento muito pequena. Ele também tem várias outras vantagens, sendo uma das maiores a facilidade de detectar o hardware conectado a quente. Isso geralmente é chamado de dinâmico/dev
.Nos dois casos, porém, os nós dos dispositivos são acessados através da camada VFS comum, o que, por definição, significa que eles precisam ter um inode (mesmo que seja virtual, existindo apenas para que coisas como
stat()
funcionem como deveria). De uma perspectiva prática, isso tem impacto nulo nos sistemas que usam uma dinâmica,/dev
porque eles armazenam os inodes na memória ou os geram conforme necessário, e quase nula quando/dev
estático, porque os inodes ocupam quase zero espaço no disco e a maioria dos sistemas de arquivos não tem limite superior. eles ou provisionam muito mais do que qualquer um provavelmente precisará.fonte
Os arquivos do dispositivo também têm permissões e são armazenados em um inode.
fonte
Os diretórios são simplesmente um mapeamento de nomes de arquivos para inodes; portanto, tudo sobre o que o nome se refere (um arquivo, um link simbólico, um dispositivo, um FIFO, um soquete) precisa estar no inode, não há outro lugar para colocá-lo.
As informações sobre o dispositivo são armazenadas no inode. Os números de dispositivos principais e secundários estão lá, assim como permissões, registros de data e hora, etc. O campo de tipo que diz que é um dispositivo de bloco ou caractere em vez de um arquivo comum é armazenado lá.
O inode para dispositivos simplesmente não utiliza os campos que contêm o mapa de blocos do arquivo.
fonte
Sem um inode, você teria apenas o nome do arquivo para armazenar todas as informações sobre o dispositivo em questão. Isso significa que nomes de dispositivos "agradáveis"
/dev/sda
não estariam em questão: você precisaria de um nome que pudesse estar associado a um driver específico, como/dev/ohci/sda
.Ainda mais importante, todas as ferramentas que dependem de inodes (como
stat
,ls
e assim por diante) teria que ser modificado para caminhos tratar sob/dev
de uma maneira especial. Seria uma quantidade proibitivamente grande de trabalho sem benefício aparente em comparação com o estado atual das coisas.fonte