Gerenciando Dispositivos do Sistema com o Gerenciador de Dispositivos udev
Visão geral de como o gerenciador de dispositivos udev descobre hardware, gerencia nós de dispositivos e se integra ao systemd no Oracle Linux.
O gerenciador de dispositivos udev é executado como um serviço systemd para ajudar a fornecer ao software acesso previsível e gerenciado a dispositivos do sistema expostos pelo kernel. Normalmente, o udev gerencia as permissões dos nós do dispositivo, cria links simbólicos no diretório /dev/ para tornar os nomes dos dispositivos mais previsíveis e fáceis de identificar ou renomeia as interfaces de rede.
O gerenciador de dispositivos udev cria ou remove dinamicamente os arquivos de nó do dispositivo no momento da inicialização. Ao criar um nó de dispositivo, o udev lê o diretório /sys do dispositivo para atributos como label, número de série e número de dispositivo de barramento.
O udev pode usar nomes de dispositivos persistentes para garantir a nomeação consistente de dispositivos nas reinicializações, independentemente da ordem de descoberta. Nomes de dispositivos persistentes são especialmente importantes ao usar dispositivos de armazenamento externo.
O udev também lida com eventos de driver de dispositivo que são acionados pelo kernel e usa as regras definidas em sua configuração para acionar ações específicas. Por exemplo, se um dispositivo de armazenamento USB estiver conectado ao sistema, o kernel notificará o udev e o udev notificará o manipulador apropriado para que o dispositivo possa ser montado. Além disso, se um cabo de rede estiver conectado a uma placa de interface de rede, o kernel notificará o udev da alteração de estado e o udev notificará o NetworkManager para que a ação apropriada possa ocorrer para se conectar à rede.
O arquivo de configuração para udev é /etc/udev/udev.conf, no qual você pode definir a prioridade de log udev_log, que pode ser definida como err, info e debug. O valor-padrão é err. Outras configurações de regras usadas pelo udev são tratadas em arquivos de regras individuais no /etc/udev/rules.d/.
Para obter mais informações, consulte a página do manual udev(7).
udev é um componente do systemd. Para obter mais informações, consulte os guias systemd específicos da versão.
Para obter mais informações sobre conceitos systemd usados pelo udev nas releases do Oracle Linux, consulte Gerenciando o Sistema com systemd.
Para obter mais informações sobre os sistemas de arquivos virtuais do kernel e os módulos de driver do dispositivo, use os seguintes recursos específicos da versão.
Para obter mais informações sobre os sistemas de arquivos virtuais do kernel e os módulos de driver de dispositivo nas versões do Oracle Linux, consulte Managing Kernels and System Boot on Oracle Linux.
Sobre arquivos do dispositivo
Explica como o Oracle Linux representa hardware como arquivos de dispositivo, incluindo dispositivos de bloco, caractere e pseudo.
O diretório /dev contém arquivos de dispositivo ou nós de dispositivo que fornecem acesso a dispositivos periféricos como discos rígidos, a recursos em dispositivos periféricos como partições de disco e pseudo dispositivos como um gerador de números aleatórios.
O diretório /dev tem várias hierarquias de subdiretório, cada uma das quais contém arquivos de dispositivo que se relacionam a um determinado tipo de dispositivo. No entanto, o conteúdo desses subdiretórios é implementado como links simbólicos para os arquivos correspondentes no /dev. Assim, os arquivos podem ser acessados por meio do arquivo vinculado em /dev ou do arquivo correspondente no subdiretório.
O uso do comando ls -l /dev lista arquivos, alguns dos quais são marcados como sendo do tipo b (para bloco) ou do tipo c (para caractere). Esses dispositivos possuem um par de números associados que identificam o dispositivo no sistema.
ls -l /dev
total 0
crw-r--r--. 1 root root 10, 235 Aug 20 08:36 autofs
drwxr-xr-x. 2 root root 240 Sep 20 07:37 block
drwxr-xr-x. 2 root root 100 Aug 20 08:36 bsg
drwxr-xr-x. 3 root root 60 Nov 4 2019 bus
lrwxrwxrwx. 1 root root 3 Aug 20 08:36 cdrom -> sr0
drwxr-xr-x. 2 root root 2720 Sep 20 07:37 char
crw-------. 1 root root 5, 1 Aug 20 08:36 console
lrwxrwxrwx. 1 root root 11 Aug 20 08:36 core -> /proc/kcore
drwxr-xr-x. 3 root root 60 Nov 4 2019 cpu
crw-------. 1 root root 10, 62 Aug 20 08:36 cpu_dma_latency
drwxr-xr-x. 7 root root 140 Aug 20 08:36 disk
brw-rw----. 1 root disk 253, 0 Aug 20 08:36 dm-0
brw-rw----. 1 root disk 253, 1 Aug 20 08:36 dm-1
brw-rw----. 1 root disk 253, 2 Aug 20 08:36 dm-2
lrwxrwxrwx. 1 root root 13 Aug 20 08:36 fd -> /proc/self/fd
crw-rw-rw-. 1 root root 1, 7 Aug 20 08:36 full
crw-rw-rw-. 1 root root 10, 229 Aug 20 08:36 fuse
crw-------. 1 root root 10, 228 Aug 20 08:36 hpet
drwxr-xr-x. 2 root root 0 Aug 20 08:36 hugepages
crw-------. 1 root root 10, 183 Aug 20 08:36 hwrng
lrwxrwxrwx. 1 root root 12 Aug 20 08:36 initctl -> /run/initctl
drwxr-xr-x. 3 root root 220 Aug 20 08:36 input
crw-r--r--. 1 root root 1, 11 Aug 20 08:36 kmsg
lrwxrwxrwx. 1 root root 28 Aug 20 08:36 log -> /run/systemd/journal/dev-log
brw-rw----. 1 root disk 7, 0 Sep 23 01:28 loop0
crw-rw----. 1 root disk 10, 237 Sep 20 07:37 loop-control
drwxr-xr-x. 2 root root 120 Aug 20 08:36 mapper
crw-------. 1 root root 10, 227 Aug 20 08:36 mcelog
crw-r-----. 1 root kmem 1, 1 Aug 20 08:36 mem
crw-------. 1 root root 10, 59 Aug 20 08:36 memory_bandwidth
drwxrwxrwt. 2 root root 40 Nov 4 2019 mqueue
drwxr-xr-x. 2 root root 60 Aug 20 08:36 net
crw-------. 1 root root 10, 61 Aug 20 08:36 network_latency
crw-------. 1 root root 10, 60 Aug 20 08:36 network_throughput
crw-rw-rw-. 1 root root 1, 3 Aug 20 08:36 null
crw-------. 1 root root 10, 144 Aug 20 08:36 nvram
drwxr-xr-x. 2 root root 100 Aug 20 08:36 ol_ca-virtdoc-oltest1
crw-r-----. 1 root kmem 1, 4 Aug 20 08:36 port
crw-------. 1 root root 108, 0 Aug 20 08:36 ppp
crw-rw-rw-. 1 root tty 5, 2 Oct 7 08:10 ptmx
drwxr-xr-x. 2 root root 0 Aug 20 08:36 pts
crw-rw-rw-. 1 root root 1, 8 Aug 20 08:36 random
drwxr-xr-x. 2 root root 60 Nov 4 2019 raw
lrwxrwxrwx. 1 root root 4 Aug 20 08:36 rtc -> rtc0
crw-------. 1 root root 251, 0 Aug 20 08:36 rtc0
brw-rw----. 1 root disk 8, 0 Aug 20 08:36 sda
brw-rw----. 1 root disk 8, 1 Aug 20 08:36 sda1
brw-rw----. 1 root disk 8, 2 Aug 20 08:36 sda2
brw-rw----. 1 root disk 8, 16 Aug 20 08:36 sdb
brw-rw----. 1 root disk 8, 17 Aug 20 08:36 sdb1
crw-rw----. 1 root cdrom 21, 0 Aug 20 08:36 sg0
Dispositivos do Bloco
Os dispositivos de bloco permitem acesso aleatório a dados, buscando mídia para dados e geralmente armazenam dados em buffer enquanto os dados estão sendo gravados ou lidos. Exemplos de dispositivos de bloco incluem discos rígidos, unidades de CD-ROM, memória flash e outros dispositivos de memória endereçável.
Dispositivos de Caracteres
Os dispositivos de caracteres permitem o streaming de dados de ou para um dispositivo. Os dados geralmente não são armazenados em buffer nem o acesso aleatório é concedido aos dados em um dispositivo. O kernel grava dados ou lê dados de um dispositivo de caracteres de 1 byte por vez. Exemplos de dispositivos de caractere incluem teclados, mouses, terminais, pseudo-terminais e unidades de fita. tty0 e tty1 são arquivos de dispositivos de caracteres que correspondem a dispositivos de terminal para que os usuários possam fazer login de terminais seriais ou emuladores de terminais.
Dispositivos de caracteres pseudo-terminais
Dispositivos secundários pseudo-terminais emulam dispositivos terminais reais para que possam interagir com o software. Por exemplo, um usuário pode fazer log-in em um dispositivo de terminal, como /dev/tty1, que usa o dispositivo primário pseudoterminal, /dev/pts/ptmx, para interagir com um dispositivo pseudoterminal subjacente. Os arquivos de dispositivo de caracteres para dispositivos secundários e primários pseudoterminais estão no diretório /dev/pts, conforme mostrado no seguinte exemplo:
ls -l /dev/pts
total 0
crw--w----. 1 guest tty 136, 0 Mar 17 10:11 0
crw--w----. 1 guest tty 136, 1 Mar 17 10:53 1
crw--w----. 1 guest tty 136, 2 Mar 17 10:11 2
c---------. 1 root root 5, 2 Mar 17 08:16 ptmx
Algumas entradas de dispositivo, como stdin para a entrada padrão, são simbolicamente vinculadas por meio do subdiretório self do sistema de arquivos proc. O arquivo de dispositivo pseudoterminal para o qual eles apontam depende do contexto do processo.
ls -l /proc/self/fd/[012]
lrwx------. 1 root root 64 Oct 7 08:23 /proc/self/fd/0 -> /dev/pts/0
lrwx------. 1 root root 64 Oct 7 08:23 /proc/self/fd/1 -> /dev/pts/0
lrwx------. 1 root root 64 Oct 7 08:23 /proc/self/fd/2 -> /dev/pts/0
dispositivos de caracteres nulos, aleatórios, urandom e zero
Dispositivos de caractere, como null, random, urandom e zero são exemplos de pseudo dispositivos que fornecem acesso à funcionalidade virtual implementada em software, em vez de em hardware físico.
/dev/null é um coletor de dados. Os dados que você grava em /dev/null desaparecem efetivamente, mas a operação de gravação é bem-sucedida. A leitura de /dev/null retorna EOF (fim do arquivo).
/dev/zero é uma origem de dados de um número ilimitado de bytes de 0 valor.
/dev/random e /dev/urandom são origens de dados de streams de bytes pseudoaleatórios. Para manter a saída de alta entropia, /dev/random bloqueia se seu pool de entropia não contiver bits de ruído suficientes. /dev/urandom não bloqueia e, portanto, a entropia de sua saída pode não ser tão consistentemente alta quanto a de /dev/random. No entanto, nem /dev/random nem /dev/urandom são considerados aleatórios o suficiente para fins de criptografia segura, como criptografia de nível militar.
Você pode descobrir o tamanho do pool de entropias e o valor de entropia para /dev/random em arquivos virtuais em /proc/sys/kernel/random:
cat /proc/sys/kernel/random/poolsize
4096
cat /proc/sys/kernel/random/entropy_avail
3467
Para obter mais informações, consulte as páginas do manual null(4), pts(4) e random(4).