O que acontece quando uma unidade é montada?

0

Quando uma unidade flash / disco rígido está conectada a um sistema, ela deve ser montada. O que exatamente acontece durante o processo de montagem? Como o sistema / kernel monitora o conteúdo que está presente na unidade flash?

    
por Vijayanand Thangavelu 20.06.2018 / 11:09

3 respostas

0

Primeiro, a menos que você tenha um software em execução para fazer isso, ele não será montado automaticamente. Esse comportamento é inteiramente tratado no userspace, não no kernel, o que é bastante importante, pois montar automaticamente é um pesadelo para a segurança (é possível travar ou pelo menos DoS na maioria dos sistemas com uma imagem de sistema de arquivos cuidadosamente criada).

Agora, sobre o que realmente está acontecendo, her'es a seqüência geral no Linux usando a combinação padrão do udev e udisks para acionar o automount:

  1. O dispositivo está fisicamente conectado e é enumerado pelo kernel. O kernel reconhece-o como um dispositivo de bloco de algum tipo, configura os drivers apropriados para expor essa interface ao userspace e, em seguida, dispara um uevent para informar o que estiver escutando no espaço do usuário que o novo hardware foi conectado.
  2. O kernel verifica o dispositivo em busca de partições.
  3. O Udev vê esse evento e configura os vários nós de dispositivos e links em /dev para o dispositivo. Em seguida, ele verifica o dispositivo e suas partições para ver quais sistemas de arquivos estão presentes e onde e armazena esses dados onde outros programas podem consultá-los.
  4. O udisks vê o uevent do kernel, verifica se o udev conclui a configuração e verifica se a varredura feita pelo udev na etapa 3 encontrou algum sistema de arquivos. Em caso afirmativo, e os udisks estão configurados para montar automaticamente sistemas de arquivos recém-conectados, ele emite uma solicitação de montagem para o kernel para cada sistema de arquivos.
  5. O kernel monta o sistema de arquivos fazendo o seguinte internamente (muito simplificado):
    • Primeiro, ele verifica se possui um driver apropriado para o tipo de sistema de arquivos e, se não, tenta carregar um.
    • O driver do sistema de arquivos analisa quaisquer metadados exigidos do superbloco do sistema de arquivos (é onde todos os metadados sobre o sistema de arquivos são armazenados).
    • Uma cópia na memória do super bloco é criada e preenchida com os dados fornecidos pelo driver do sistema de arquivos e pelo comando mount. Esta estrutura de dados é o que o kernel usa para se referir ao sistema de arquivos internamente. Quaisquer outras referências internas ao sistema de arquivos dentro do kernel apontam para isso.
    • O kernel então atualiza sua tabela de montagem interna com uma referência a este super bloco na memória.

Agora, quanto ao modo como o kernel "acompanha o conteúdo", isso é muito mais complicado de explicar adequadamente. Em suma, porém, isso não acontece. Sempre que você vai tentar acessar um arquivo no dispositivo, o kernel procura pela raiz do sistema de arquivos. Há um cache envolvido para acelerar isso, mas não é realmente crítico para nada além de desempenho.

    
por 20.06.2018 / 21:33
0

Ele acompanha o conteúdo do pen drive armazenando-o no pen drive.

Também possui uma tabela de montagem (no kernel). Ele sabe que /dev/disk/by-label/home (um link para um dispositivo real) está montado em /home . Ele sabe que o flash USB está montado em /media/my-flash Quando você altera o dir para esses diretórios, ele passa para o outro dispositivo.

Use mount e df -h para visualizar o estado de montagem atual.

    
por 20.06.2018 / 11:15
0

Interfaces gráficas modernas do Linux, como o GNOME, montam sistemas de arquivos enviando solicitações para o processo de background udisks ("service"). Eles tendem a fazer isso automaticamente quando você conecta uma unidade. Pode ser difícil descobrir como pará-los, para permitir que você teste o efeito de comandos como mount para você mesmo. Uma maneira simples de evitá-lo é fazer login em um console de texto. (Para obter mais informações sobre como efetuar login em um console de texto, consulte aqui )

Há também um comando que você pode usar para enviar solicitações para udisks . A versão atual deste comando é chamada udisksctl .

Quando você conecta uma unidade flash USB, (geralmente) o driver de armazenamento usb "liga" a ele e cria um dispositivo de bloco . [*] No Linux: veja lsblk (list dispositivos de bloco).

Da mesma forma, quando você mount do dispositivo de bloco, você está ligando algum software do sistema de arquivos a ele. Existem diferentes softwares para diferentes formatos de sistemas de arquivos. Por exemplo. o sistema de arquivos FAT32 é freqüentemente usado em drives flash; O Linux chama esse tipo de sistema de arquivos vfat . Ao executar mount , você deve incluir dois parâmetros: o dispositivo e o nome de um diretório para montar o sistema de arquivos. Quando você acessar esse nome de diretório (por exemplo, ls /mnt ), verá o sistema de arquivos montado no lugar do diretório original.

Se você executar mount sem parâmetros, ele listará seus sistemas de arquivos montados. No Linux, no entanto, man mount dirá que é melhor usar findmnt para listar sistemas de arquivos. findmnt tem boa saída que ajuda a organizar os muitos sistemas de arquivos virtuais que você montou no Linux (embora não os classifique em ordem alfabética como ls ).

O

df -h também possui um bom resultado, já que exclui muitos dos sistemas de arquivos virtuais que o Linux possui, e mostra o espaço disponível em cada sistema de arquivos. (Estritamente falando, algumas configurações complexas do sistema de arquivos Linux podem ter um tratamento mais complexo do espaço disponível do que o mostrado, por exemplo, elas podem exigir menos espaço para os dados do arquivo, comprimindo-as).

Todos os arquivos que você pode acessar são armazenados em algum sistema de arquivos montado. Observe que / aparece na lista de sistemas de arquivos montados. / é o diretório "root". / é a primeira parte do "caminho" completo (local) de qualquer arquivo. (Nota: o caminho completo de um arquivo é descrito como o caminho "absoluto").

Há uma coisa especial sobre o sistema de arquivos raiz: umount (un-mount) não pode trabalhar nele. O sistema de arquivos raiz é sempre considerado em uso.

A seqüência de desligamento do sistema irá montar novamente o sistema de arquivos raiz como somente leitura ( mount / -o remount,ro ). A remontagem de um sistema de arquivos somente leitura é uma maneira de solicitar que ele grave os arquivos alterados, por exemplo, para o dispositivo de bloco que é seu disco rígido e prepare-se para um desligamento limpo. Nesse sentido, serve ao mesmo propósito que desmontar.

Algum software Linux de baixo nível pode trocar o sistema de arquivos raiz por outro sistema de arquivos montado; isso é chamado pivot_root . Em seguida, o sistema de arquivos raiz antigo pode ser desmontado. Fazer isso requer um número de condições específicas que não tentarei explicar aqui. O recurso foi criado para atender ao processo de inicialização de distribuições Linux de uso geral, nas quais um sistema de arquivos inicial baseado em RAM (initramfs) é montado e, em seguida, é pivotado no sistema de arquivos raiz real. Há uma explicação para por que eles fazem isso, aqui .

[*] No Linux, o primeiro dispositivo que usa o driver sd recebe o nome sda e assim por diante.

dispositivos de armazenamento usb aceitam alguma forma de SCSI. Portanto, o driver de armazenamento usb fornece um dispositivo scsi; o driver sd (disco SCSI) é vinculado ao dispositivo scsi e fornece um dispositivo de bloco.

sd é usado para muitos tipos de dispositivos de bloco. Que não são necessariamente discos físicos, e também o hardware pode usar comandos diferentes que devem ser traduzidos do SCSI. Computadores são estranhos; a razão para tais padrões pode depender de muitos detalhes históricos que não são necessariamente relevantes .

    
por 21.06.2018 / 00:48

Tags