Luciano Andress Martini
indica:
First time I have a problem in a filesystem in linux I received a message by
fsck
like "/dev/hda2 is mounted read-write". In that epoch (1999), I did not understand what that means. I am 11 y.o. The only thing that come to my mind was:umount /
, and it works (as it remounted read-only).
(Isso requer que não haja arquivos abertos para escrita. Por exemplo, ele pode funcionar quando o sistema está sendo executado no modo de usuário único. Observe que após executar o fsck, para reparar um sistema de arquivos que ainda está montado no modo somente leitura, deve sempre reiniciar por razões de segurança).
Em outras palavras, se você nem sabe que existe um comando para remontar um sistema de arquivos somente leitura, você pode tentar os mesmos comandos como se você precisasse fsck (consertar) /dev/fd0
ou seu /home
filesystem . O caso especial permite que isso funcione, mesmo que o comando fsck
esteja no sistema de arquivos que você aparentemente desmontou :-). É legal que o Linux possa ser útil assim, quando você tenta reparar um sistema corrompido.
Há outro uso deste caso especial: umount -a
, usado em scripts antigos de desligamento. Isso é definido simplesmente para desmontar todos os sistemas de arquivos na ordem inversa, terminando com o sistema de arquivos raiz. Ele garante que todos os sistemas de arquivos estejam em um estado consistente no disco, portanto, eles não exigem um fsck
na próxima inicialização. O kernel Linux não encerra qualquer sistema de arquivos automaticamente; você precisa ter algum programa de desligamento ou "sistema de inicialização" que faça isso.
Não sei porque esse caso especial está no kernel, e não no comando umount
. Uma razão pode ser que kernels antigos aceitam o nome do dispositivo montado, em vez do diretório no qual o sistema de arquivos foi montado. Talvez isso tenha parecido mais simples ou mais confiável colocar esse código no kernel.
O caso especial não está documentado nas man pages atuais de umount(2)
ou umount(8)
. Portanto, a página do manual atual indica que umount -a
sempre mostrará um erro, mas esse não é o caso. Eu suspeito que umount -a
não é muito usado hoje em dia.
Existe um comentário de código muito semelhante nas versões anteriores do Linux incluindo 0,99. 10 (1993) .
Isso não parece ser um padrão para o UNIX tradicional. O kernel do FreeBSD retorna um erro em vez . Não tenho certeza porque há uma verificação de erro específica para este caso, separada da verificação de erro geral para desmontar um sistema de arquivos que está atualmente em uso. O equivalente do FreeBSD de umount -a
está ciente deste problema e pára antes de desmontar o primeiro sistema de arquivos, ou seja, a raiz. (O código é aqui , mas você precisa entender como for
loops e índices de array funcionam em C: -).
Os scripts antigos que dependem do umount -a
contrastam com os scripts atuais do SysVinit, por exemplo, no Debian. /etc/init.d/umount_root
remonta explicitamente /
como readonly. O restante das montagens são processadas individualmente, por /etc/init.d/umountfs
e /etc/init.d/umountnfs.sh
.
umount -a
não é ideal em sistemas modernos. É mais simples deixar um sistema de arquivos /proc
montado para que /proc/mounts
ainda possa ser usado. E /dev
é geralmente um sistema de arquivos montado separado, que mostrará um erro de desmontagem porque /dev/console
ainda está aberto.
Para um exemplo de um script antigo de desligamento, consulte o script de referência etc/rc.d/rc.0
no antigo SysVinit-2.4.tar.z
/ SysVinit-2.4.tar.gz
.
#! /bin/sh
#
# brc This file is executed by init(8) when the system is being
# shutdown (i.e. set to run at level 0). It usually takes
# care of un-mounting al unneeded file systems.
#
# Version: @(#)/etc/brc 2.01 02/17/93
#
# Authors: Miquel van Smoorenburg, <[email protected]>
# Fred N. van Kempen, <[email protected]>
#
PATH=/bin:/etc:/usr/bin
echo Unmounting file systems.....
umount -a
echo Done.