104.3 Lição 1
Certificação: |
LPIC-1 |
---|---|
Versão: |
5.0 |
Tópico: |
104 Dispositivos, sistemas de arquivos do Linux, hierarquia padrão de sistemas de arquivos |
Objetivo: |
104.3 Controlar a montagem e desmontagem dos sistema de arquivos |
Lição: |
1 de 1 |
Introdução
Até aqui, você aprendeu a particionar discos e a criar e manter sistemas de arquivos neles. No entanto, antes que um sistema de arquivos possa ser acessado no Linux, ele precisa ser montado.
Montar significa anexar o sistema de arquivos em um ponto específico da árvore de diretórios do sistema, chamado ponto de montagem. Os sistemas de arquivos podem ser montados manual ou automaticamente e há muitas maneiras de fazê-lo. Veremos algumas delas nesta lição.
Montando e desmontando sistemas de arquivos
O comando para montar manualmente um sistema de arquivos é mount
e sua sintaxe é:
mount -t TYPE DEVICE MOUNTPOINT
Onde:
TYPE
-
O tipo de sistema de arquivos sendo montado (p. ex. ext4, btrfs, exfat, etc.).
DEVICE
-
O nome da partição que contém o sistema de arquivos (p. ex.
/dev/sdb1
) MOUNTPOINT
-
Onde o sistema de arquivos será montado. O diretório de montagem não precisa estar vazio, embora precise existir. Porém, quaisquer arquivos que ele contiver estarão inacessíveis por nome enquanto o sistema de arquivos estiver montado.
Por exemplo, para montar uma unidade flash USB contendo um sistema de arquivos exFAT localizado em /dev/sdb1
em um diretório chamado flash
em seu diretório inicial, você usaria:
# mount -t exfat /dev/sdb1 ~/flash/
Tip
|
Muitos sistemas Linux usam o shell Bash, e nesse caso o til |
Após a montagem, o conteúdo do sistema de arquivos estará acessível no diretório ~/flash
:
$ ls -lh ~/flash/ total 469M -rwxrwxrwx 1 root root 454M jul 19 09:49 lineage-16.0-20190711-MOD-quark.zip -rwxrwxrwx 1 root root 16M jul 19 09:44 twrp-3.2.3-mod_4-quark.img
Listando sistemas de arquivos montados
Se você digitar apenas mount
, obterá uma lista de todos os sistemas de arquivos atualmente montados em seu sistema. Essa lista pode ser bastante extensa, já que, além dos discos anexados ao sistema, ela também conterá diversos sistemas de arquivos de tempo de execução na memória que servem a vários propósitos. Se quiser filtrar a saída, use o parâmetro -t
para listar apenas os sistemas de arquivos do tipo correspondente, como abaixo:
# mount -t ext4 /dev/sda1 on / type ext4 (rw,noatime,errors=remount-ro)
Podemos especificar vários sistemas de arquivos de uma vez, separando-os com uma vírgula:
# mount -t ext4,fuseblk /dev/sda1 on / type ext4 (rw,noatime,errors=remount-ro) /dev/sdb1 on /home/carol/flash type fuseblk (rw,nosuid,nodev,relatime,user_id=0,group_id=0,default_permissions,allow_other,blksize=4096) [DT_8GB]
A saída nos exemplos acima pode ser descrita no formato:
SOURCE on TARGET type TYPE OPTIONS
Onde SOURCE
é a partição que contém o sistema de arquivos, TARGET
é o diretório onde ele está montado, TYPE
é o tipo do sistema de arquivos e OPTIONS
são as opções passadas para o comando mount
no momento da montagem.
Parâmetros adicionais da linha de comando
Diversos parâmetros de linha de comando podem ser usados com mount
. Alguns dos mais frequentes são:
-a
-
Monta todos os sistemas de arquivos listados no arquivo
/etc/fstab
(trataremos disso na próxima seção). -o
ou--options
-
Passa uma lista de opções de montagem separadas por vírgula para o comando de montagem, que pode mudar a forma como o sistema de arquivos será montado. Falaremos disso junto com
/etc/fstab
. -r
ou-ro
-
Monta o sistema de arquivos como somente leitura.
-w
ou-rw
-
Monta o sistema de arquivos como gravável.
Para desmontar um sistema de arquivos, use o comando umount
, seguido pelo nome do dispositivo ou ponto de montagem. Considerando o exemplo acima, os comandos abaixo são intercambiáveis:
# umount /dev/sdb1 # umount ~/flash
Alguns dos parâmetros da linha de comando para umount
são:
-a
-
Desmonta todos os sistemas de arquivos listados em
/etc/fstab
. -f
-
Força a desmontagem de um sistema de arquivos. Pode ser útil se você tiver montado um sistema de arquivos remoto que se tornou inacessível.
-r
-
Se o sistema de arquivos não puder ser desmontado, esse comando tenta torná-lo somente leitura.
Como lidar com arquivos abertos
Ao desmontar um sistema de arquivos, pode aparecer a mensagem de erro target is busy
. Isso acontece quando algum arquivo do sistema de arquivos está aberto. No entanto, nem sempre a localização de um arquivo aberto é óbvia, nem o que está acessando o sistema de arquivos.
Nesses casos, podemos usar o comando lsof
seguido do nome do dispositivo que contém o sistema de arquivos para ver uma lista de processos que o acessam e quais arquivos estão abertos. Por exemplo:
# umount /dev/sdb1 umount: /media/carol/External_Drive: target is busy. # lsof /dev/sdb1 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME evince 3135 carol 16r REG 8,17 21881768 5195 /media/carol/External_Drive/Documents/E-Books/MagPi40.pdf
COMMAND
é o nome do executável que abriu o arquivo e PID
é o número do processo. NAME
é o nome do arquivo que está aberto. No exemplo acima, o arquivo MagPi40.pdf
foi aberto pelo programa evince
(um visualizador de PDF). Se fecharmos o programa, poderemos desmontar o sistema de arquivos.
Note
|
Antes que a saída de lsof: WARNING: can't stat() fuse.gvfsd-fuse file system /run/user/1000/gvfs Output information may be incomplete. O |
Onde montar?
Você pode montar um sistema de arquivos em qualquer lugar que desejar. No entanto, existem algumas práticas recomendadas para facilitar a administração do sistema.
Tradicionalmente, /mnt
era o diretório sob o qual todos os dispositivos externos eram montados e, dentro dele, existia uma série de “pontos de ancoragem” pré-configurados para dispositivos comuns, como drives de CD-ROM (/mnt/cdrom
) e disquetes (/mnt/floppy
).
Ele foi substituído por /media
, que agora é o ponto de montagem padrão para qualquer mídia removível pelo usuário (por exemplo, discos externos, pendrives, leitores de cartão de memória, etc.) conectada ao sistema.
Na maioria das distribuições Linux e ambientes de desktop modernos, os dispositivos removíveis são montados automaticamente em /media/USER/LABEL
quando conectados ao sistema, sendo USER
o nome de usuário e LABEL
o nome do dispositivo. Por exemplo, um drive flash USB com o nome FlashDrive
conectado pelo usuário john
seria montado em /media/john/FlashDrive/
. A maneira como isso é feito varia de acordo com o ambiente de desktop.
Dito isto, sempre que você precisar montar manualmente um sistema de arquivos, é melhor fazer isso em /mnt
.
Montagem de sistemas de arquivos na inicialização
O arquivo /etc/fstab
contém descrições sobre os sistemas de arquivos que podem ser montados. Trata-se de um arquivo de texto em que cada linha descreve um sistema de arquivos a ser montado, com seis campos por linha, na seguinte ordem:
FILESYSTEM MOUNTPOINT TYPE OPTIONS DUMP PASS
Onde:
FILESYSTEM
-
O dispositivo que contém o sistema de arquivos a ser montado. Em vez do dispositivo, você pode especificar o UUID ou rótulo da partição, algo que discutiremos mais tarde.
MOUNTPOINT
-
Onde o sistema de arquivos será montado.
TYPE
-
O tipo de sistema de arquivos.
OPTIONS
-
Opções de montagem que serão passadas para
mount
. DUMP
-
Indica se qualquer sistema de arquivos ext2, ext3 ou ext4 deve ser considerado para backup pelo comando
dump
. Normalmente o valor é zero, o que significa que devem ser ignorados. PASS
-
Quando diferente de zero, define a ordem na qual os sistemas de arquivos serão checados na inicialização. Normalmente é zero.
Por exemplo, a primeira partição do primeiro disco de uma máquina pode ser descrita como:
/dev/sda1 / ext4 noatime,errors
As opções de montagem em OPTIONS
são uma lista de parâmetros separados por vírgulas, que podem ser genéricos ou específicos ao sistema de arquivos. Entre os genéricos temos:
atime
enoatime
-
Por padrão, cada vez que um arquivo é lido, a informação de data e hora de acesso é atualizada. Se essa opção for desativada (com
noatime
), a E/S do disco fica mais veloz. Não confundir com a hora de modificação, que é atualizada sempre que um arquivo é gravado. auto
enoauto
-
Se o sistema de arquivos pode (ou não) ser montado automaticamente com
mount -a
. defaults
-
Passa as opções
rw
,suid
,dev
,exec
,auto
,nouser
easync
paramount
. dev
enodev
-
Indica se os dispositivos de caractere ou de bloco no sistema de arquivos montado devem ser interpretados.
exec
enoexec
-
Permite ou nega a permissão para executar binários no sistema de arquivos.
user
enouser
-
Permite (ou não) a um usuário comum montar o sistema de arquivos.
group
-
Permite a um usuário montar o sistema de arquivos se o usuário pertencer ao mesmo grupo que possui o dispositivo que o contém.
owner
-
Permite a um usuário montar um sistema de arquivos se ele for proprietário do dispositivo que o contém.
suid
enosuid
-
Permite ou não que os bits SETUID e SETGID tenham efeito.
ro
erw
-
Montam um sistema de arquivos como somente leitura ou gravável.
remount
-
Tenta remontar um sistema de arquivos já montado. Não é usado em
/etc/fstab
, mas como um parâmetro paramount -o
. Por exemplo, para remontar a partição já montada/dev/sdb1
como somente leitura, você pode usar o comandomount -o remount,ro /dev/sdb1
. Ao remontar, não é necessário especificar o tipo de sistema de arquivos, apenas o nome do dispositivo ou o ponto de montagem. sync
easync
-
Definem se todas as operações de E/S devem ser realizadas no sistema de arquivos de forma síncrona ou assíncrona.
async
geralmente é o padrão. A página de manual demount
avisa que usarsync
em mídias com um número limitado de ciclos de gravação (como drives flash ou cartões de memória) pode encurtar a vida útil do dispositivo.
Usando UUIDs e rótulos
Podem ocorrer problemas ao se especificar o nome do dispositivo que contém o sistema de arquivos a ser montado. Às vezes, o mesmo nome pode ser atribuído a outro dispositivo, dependendo de quando ou onde ele foi conectado ao sistema. Por exemplo, um pendrive em /dev/sdb1
pode ser atribuído a /dev/sdc1
se conectado em outra porta ou após outro pendrive.
Uma maneira de evitar isso é especificar o rótulo ou UUID (Universally Unique Identifier) do volume. Ambos são especificados quando o sistema de arquivos é criado e não serão alterados, a menos que o sistema de arquivos seja destruído ou atribuído manualmente a um novo rótulo ou UUID.
O comando lsblk
serve para consultar informações sobre um sistema de arquivos e descobrir o rótulo e o UUID associados a ele. Para isso, use o parâmetro -f
, seguido pelo nome do dispositivo:
$ lsblk -f /dev/sda1 NAME FSTYPE LABEL UUID FSAVAIL FSUSE% MOUNTPOINT sda1 ext4 6e2c12e3-472d-4bac-a257-c49ac07f3761 64,9G 33% /
Este é o significado de cada coluna:
NAME
-
Nome do dispositivo que contém o sistema de arquivos.
FSTYPE
-
Tipo de sistema de arquivos.
LABEL
-
Rótulo do sistema de arquivos.
UUID
-
Identificador Universal Único (UUID) atribuído ao sistema de arquivos.
FSAVAIL
-
Espaço disponível no sistema de arquivos.
FSUSE%
-
Porcentagem de uso do sistema de arquivos.
MOUNTPOINT
-
Onde o sistema de arquivos é montado.
Em /etc/fstab
, um dispositivo pode ser especificado por seu UUID com a opção UUID=
seguida pelo UUID, ou com LABEL=
, seguida pelo rótulo. Assim, em vez de:
/dev/sda1 / ext4 noatime,errors
Usaríamos:
UUID=6e2c12e3-472d-4bac-a257-c49ac07f3761 / ext4 noatime,errors
Ou, se tivermos um disco rotulado como homedisk
:
LABEL=homedisk /home ext4 defaults
A mesma sintaxe pode ser usada com o comando mount
. Em vez do nome do dispositivo, passe o UUID ou rótulo. Por exemplo, para montar um disco NTFS externo com o UUID 56C11DCC5D2E1334
em /mnt/external
, o comando seria:
$ mount -t ntfs UUID=56C11DCC5D2E1334 /mnt/external
Montando discos com Systemd
Systemd é o processo init, o primeiro processo a ser executado em muitas distribuições Linux. Ele é responsável por gerar outros processos, iniciar serviços e inicializar o sistema. Entre muitas outras tarefas, o systemd também pode ser usado para gerenciar a montagem (e a montagem automática) de sistemas de arquivos.
Para usar este recurso do systemd, você precisa criar um arquivo de configuração chamado unidade de montagem. Cada volume a ser montado tem sua própria unidade de montagem e elas devem ser postas em /etc/systemd/system/
.
As unidades de montagem são arquivos de texto simples com a extensão .mount
. O formato básico é mostrado abaixo:
[Unit] Description= [Mount] What= Where= Type= Options= [Install] WantedBy=
Description=
-
Descrição curta da unidade de montagem, algo como
Mounts the backup disk
. What=
-
O que deve ser montado. O volume tem de ser especificado como
/dev/disk/by-uuid/VOL_UUID
, ondeVOL_UUID
é o UUID do volume. Where=
-
Deve ser o caminho completo para o local em que o volume será montado.
Type=
-
O tipo de sistema de arquivos.
Options=
-
Opções de montagem que podem ser desejáveis; são as mesmas usadas com o comando
mount
ou em/etc/fstab
. WantedBy=
-
Usado para o gerenciamento de dependências. Neste caso, usaremos
multi-user.target
, que indica que sempre que o sistema inicializar em um ambiente multiusuário (uma inicialização normal) a unidade será montada.
Nosso exemplo anterior do disco externo poderia ser escrito como:
[Unit] Description=External data disk [Mount] What=/dev/disk/by-uuid/56C11DCC5D2E1334 Where=/mnt/external Type=ntfs Options=defaults [Install] WantedBy=multi-user.target
Mas ainda não acabamos. Para funcionar corretamente, a unidade de montagem deve ter o mesmo nome do ponto de montagem. Neste caso, o ponto de montagem é /mnt/external
, de forma que o nome do arquivo precisa ser mnt-external.mount
.
Depois disso, precisamos reiniciar o daemon do systemd com o comando systemctl
e iniciar a unidade:
# systemctl daemon-reload # systemctl start mnt-external.mount
Agora o conteúdo do disco externo deve estar disponível em /mnt/external
. Para verificar o status da montagem, use o comando systemctl status mnt-external.mount
, como mostrado abaixo:
# systemctl status mnt-external.mount ● mnt-external.mount - External data disk Loaded: loaded (/etc/systemd/system/mnt-external.mount; disabled; vendor pres Active: active (mounted) since Mon 2019-08-19 22:27:02 -03; 14s ago Where: /mnt/external What: /dev/sdb1 Tasks: 0 (limit: 4915) Memory: 128.0K CGroup: /system.slice/mnt-external.mount ago 19 22:27:02 pop-os systemd[1]: Mounting External data disk... ago 19 22:27:02 pop-os systemd[1]: Mounted External data disk.
O comando systemctl start mnt-external.mount
só habilita a unidade para a sessão atual. Se quiser habilitá-la em todas as inicializações, substitua start
por enable
:
# systemctl enable mnt-external.mount
Montagem automática de uma unidade de montagem
As unidades de montagem podem ser montadas automaticamente sempre que o ponto de montagem for acessado. Para isso, precisamos de um arquivo .automount
, junto com o arquivo .mount
descrevendo a unidade. O formato básico é:
[Unit] Description= [Automount] Where= [Install] WantedBy=multi-user.target
Como anteriormente, Description=
é uma breve descrição do arquivo e Where=
é o ponto de montagem. Por exemplo, um arquivo .automount
em nosso exemplo anterior ficaria assim:
[Unit] Description=Automount for the external data disk [Automount] Where=/mnt/external [Install] WantedBy=multi-user.target
Salve o arquivo com o mesmo nome do ponto de montagem (neste caso, mnt-external.automount
), recarregue o systemd e inicie a unidade:
# systemctl daemon-reload # systemctl start mnt-external.automount
Agora, sempre que o diretório /mnt/external
for acessado, o disco será montado. Como anteriormente, para habilitar a montagem automática em cada inicialização usaríamos:
# systemctl enable mnt-external.automount
Exercícios Guiados
-
Usando
mount
, como você montaria um sistema de arquivosext4
em/dev/sdc1
para/mnt/external
como somente leitura, usando as opçõesnoatime
easync
? -
Ao desmontar um sistema de arquivos em
/dev/sdd2
, aparece a mensagem de errotarget is busy
. Como descobrir quais arquivos do sistema de arquivos estão abertos e quais processos os abriram? -
Considere a seguinte entrada em
/etc/fstab
:/dev/sdb1 /data ext4 noatime,noauto,async
. Esse sistema de arquivos será montado se o comandomount -a
for emitido? Por quê? -
Como descobrir o UUID de um sistema de arquivos sob
/dev/sdb1
? -
Como usar
mount
para remontar como somente leitura um sistema de arquivos exFAT com o UUID6e2c12e3-472d-4bac-a257-c49ac07f3761
, montado em/mnt/data
? -
Como obter uma lista de todos os sistemas de arquivos
ext3
entfs
atualmente montados em um sistema?
Exercícios Exploratórios
-
Considere a entrada a seguir em
/etc/fstab
:/dev/sdc1 /backup ext4 noatime,nouser,async
. Seria possível um usuário montar esse sistema de arquivos com o comandomount /backup
? Por quê? -
Considere um sistema de arquivos remoto montado em
/mnt/server
que se tornou inacessível devido à perda de conectividade de rede. Como poderíamos forçar a desmontagem, ou montá-lo como somente leitura se isso não for possível? -
Escreva uma entrada de
/etc/fstab
para montar um volume btrfs com o rótuloBackup
em/mnt/backup
, com opções padrão e sem permitir a execução de binários por ele. -
Considere a seguinte unidade de montagem do systemd:
[Unit] Description=External data disk [Mount] What=/dev/disk/by-uuid/56C11DCC5D2E1334 Where=/mnt/external Type=ntfs Options=defaults [Install] WantedBy=multi-user.target
-
Qual seria uma entrada equivalente a
/etc/fstab
neste sistema de arquivos?
-
-
Qual deve ser o nome de arquivo da unidade acima, para que ela possa ser usada pelo systemd? Onde ela deve ser posta?
Resumo
Nesta lição, você aprendeu a montar e desmontar sistemas de arquivos, manual ou automaticamente. Alguns dos comandos e conceitos explicados foram:
-
mount
(monta um dispositivo em um local) -
umount
(desmonta um dispositivo) -
lsof
(lista os processos que acessam um sistema de arquivos) -
Diretórios
/mnt
e/media
-
/etc/fstab
-
lsblk
(lista o tipo e o UUID de um sistema de arquivos) -
Como montar um sistema de arquivos usando seu UUID ou rótulo.
-
Como montar um sistema de arquivos usando unidades de montagem do systemd.
-
Como montar automaticamente um sistema de arquivos usando unidades de montagem do systemd.
Respostas aos Exercícios Guiados
-
Usando
mount
, como você montaria um sistema de arquivosext4
em/dev/sdc1
para/mnt/external
como somente leitura, usando as opçõesnoatime
easync
?# mount -t ext4 -o noatime,async,ro /dev/sdc1 /mnt/external
-
Ao desmontar um sistema de arquivos em
/dev/sdd2
, aparece a mensagem de errotarget is busy
. Como descobrir quais arquivos do sistema de arquivos estão abertos e quais processos os abriram?Use
lsof
seguido pelo nome do dispositivo:$ lsof /dev/sdd2
-
Considere a seguinte entrada em
/etc/fstab
:/dev/sdb1 /data ext4 noatime,noauto,async
. Esse sistema de arquivos será montado se o comandomount -a
for emitido? Por quê?Ele não será montado. A chave é o parâmetro
noauto
, que indica que esta entrada será ignorada pormount -a
. -
Como descobrir o UUID de um sistema de arquivos sob
/dev/sdb1
?Use
lsblk -f
, seguido pelo nome do sistema de arquivos:$ lsblk -f /dev/sdb1
-
Como usar
mount
para remontar como somente leitura um sistema de arquivos exFAT com o UUID6e2c12e3-472d-4bac-a257-c49ac07f3761
, montado em/mnt/data
?Visto que o sistema de arquivos está montado, você não precisa se preocupar com o tipo de sistema de arquivos ou o ID, basta usar a opção
remount
com o parâmetroro
(somente leitura) e o ponto de montagem:# mount -o remount,ro /mnt/data
-
Como obter uma lista de todos os sistemas de arquivos
ext3
entfs
atualmente montados em um sistema?Use
mount -t
, seguido por uma lista separada por vírgula dos sistemas de arquivos:# mount -t ext3,ntfs
Respostas aos Exercícios Exploratórios
-
Considere a entrada a seguir em
/etc/fstab
:/dev/sdc1 /backup ext4 noatime,nouser,async
. Seria possível um usuário montar esse sistema de arquivos com o comandomount /backup
? Por quê?Não, o parâmetro
nouser
impede que usuários comuns montem este sistema de arquivos. -
Considere um sistema de arquivos remoto montado em
/mnt/server
que se tornou inacessível devido à perda de conectividade de rede. Como poderíamos forçar a desmontagem, ou montá-lo como somente leitura se isso não for possível?Passe os parâmetros
-f
e-r
para unmount. O comando seriaumount -f -r /mnt/server
. Lembre-se de que podemos agrupar parâmetros, entãoumount -fr /mnt/server
também funcionaria. -
Escreva uma entrada de
/etc/fstab
para montar um volume btrfs com o rótuloBackup
em/mnt/backup
, com opções padrão e sem permitir a execução de binários por ele.A linha seria
LABEL=Backup /mnt/backup btrfs defaults,noexec
-
Considere a seguinte unidade de montagem do systemd:
[Unit] Description=External data disk [Mount] What=/dev/disk/by-uuid/56C11DCC5D2E1334 Where=/mnt/external Type=ntfs Options=defaults [Install] WantedBy=multi-user.target
-
Qual seria uma entrada equivalente a
/etc/fstab
neste sistema de arquivos??A entrada seria:
UUID=56C11DCC5D2E1334 /mnt/external ntfs defaults
-
-
Qual deve ser o nome de arquivo da unidade acima, para que ela possa ser usada pelo systemd? Onde ela deve ser posta?
O nome de arquivo deve ser idêntico ao do ponto de montagem, no caso
mnt-external.mount
, posto em/etc/systemd/system
.