Como posso listar os arquivos que impedem / sejam remontados para somente leitura?
A) fuserpode ser encontrado no psmiscpacote; este é um caso de uso em que acho que fuserbrilha e é mais útil que lsof.
# fuser -v -m / 2>&1 | grep '[Ff]r.e'
Isso mostrará todos os processos que têm arquivos abertos em / para leitura (f) e gravação (F). Os arquivos que impediriam / sejam remontados para somente leitura são aqueles que são abertos para gravação (F).
Mate os processos que são executáveis sendo executados com os arquivos do diretório raiz abertos para gravação .
# for fupid in $(fuser -v -m / 2>&1 | grep Fr.e | awk '{print $2}'); do kill $fupid; done
Isso está acima dos systemdcomentários com uma ressalva. Se systemdfor, initentão fusero verá e há outras considerações. Com a systemdexecução, ele pode (re) iniciar processos pelas suas costas, mesmo que apenas tenham sido identificados e eliminados fuser. systemdé muito mais avançado que o tradicional sysvinit.
B) O UPDATE na descrição indica que o sistema possui apenas ... inite gettyainda está em execução ...
Eu vejo o comentário que diz que o sistema não está usando systemd, está usando init. No trecho, systemd é init . O comentário não disse explicitamente sysvinit, portanto, suponho que o sistema em questão possa estar usando a extensão padrão systemdpara init. Ou que outras pessoas que tropeçam neste post, que usam trecho desystemd , acham essa parte útil.
De acordo com o Wiki Debian ,
O processo de inicialização do sistema é tratado pelo daemon init. No squeeze e nas versões anteriores, esse daemon é fornecido pelo pacote sysvinit e nenhuma alternativa é suportada. No wheezy , o daemon init padrão ainda está disponívelsysvinit , mas uma "visualização de tecnologia" do systemd está disponível. No jessie and stretch , o sistema init padrão ésystemd , mas a mudança para o sysvinit é suportada.
Desde Jessie, apenas o systemd é totalmente suportado; O sysvinit é suportado principalmente, mas os pacotes Debian não são necessários para fornecer scripts de início do sysvinit. O runit também é empacotado, mas não recebeu o mesmo nível de teste e suporte que os outros, e atualmente não é suportado pelo PID 1.
Com systemd execução, há algumas etapas adicionais que devem ser tomadas para liberar / para que possam ser remontadas sem problemas.
É provável que system.sliceesteja mantendo arquivos abertos para systemd-journald.serviceou systemd-udevd.service(ambos com dependências de soquete). Ou, se NetworkManagerestiver em execução ele pode reaparecer dhclientque escreve locações para / var / ... (& / var / nem sempre é seu próprio dispositivo), etc. fuserpode encontrar e você matar dhclient, mas NetworkManagercomeça-lo de volta para cima.
A moral é que muitas coisas são automatizadas que poderiam 'querer' / (e mais ainda com systemd).
Para ter certeza, se possível, o systemdequivalente ao nível de execução 1 é correspondido por rescue.target(e runlevel1.targeté um link simbólico para rescue.target).
1) Comece isolando o sistema para rescue.target
# systemctl isolate rescue.target
Deve solicitar que você digite a senha root; siga as instruções na tela.
2) No shell de resgate, descubra o que quer /.
# systemctl show -p Wants /
Normalmente, é system.slice; pare tudo o que quiser. por exemplo
# systemctl stop system.slice
3) Neste ponto, a remontagem não deve relatar mount: / is busye mount -o remount,ro / deve funcionar. Caso contrário, verifique novamente com fuser.
4) FWIW; Também vi vezes quando umountfalha quando / se outro dispositivo é montado em um subdiretório de outra montagem, ou seja, montagens aninhadas. Por exemplo, umount /falharia se / var / ou / boot / estivesse em outro dispositivo (e montado). Embora mount -o remount,ro /ainda deva funcionar neste caso.
lsblk pode ser útil para visualizar montagens aninhadas.
Por que lsof + L1 não lista mais os arquivos abertos que foram desvinculados?
Como eles não estão disponíveis (soquetes ou a maioria dos FIFOs e pipes), não são mais arquivos abertos (o processo pai fechou o descritor de arquivos) ou eles ainda têm uma contagem de links maior que 1.
man lsof (8) detalhes ...
+ | -L [l]
Esta opção ativa ('+') ou desativa ('-') a listagem das contagens de links de arquivos, onde elas estão disponíveis - por exemplo, elas não estão disponíveis para soquetes ou para a maioria dos FIFOs e tubulações.
Quando + L for especificado sem um número a seguir, todas as contagens de links serão listadas. Quando -L for especificado (o padrão), nenhuma contagem de links será listada.
Quando + L é seguido por um número, apenas os arquivos com uma contagem de links menor que esse número serão listados . (Nenhum número pode seguir -L.) Uma especificação no formato '' + L1 '' selecionará arquivos abertos que foram desvinculados. Uma especificação do formulário +aL1 <file_system>selecionará arquivos abertos não vinculados no sistema de arquivos especificado.
wouunaFDcoluna dalsofsaída, ouFna saída defuser -vm /, por exemplo. Mas não posso lhe dar uma lista exaustiva. Você também pode instalar o pacote needrestart .