Não é possível remontar / voltar para somente leitura após o upgrade do pacote

14

Estou usando o Debian Stretch. Minha partição raiz está montada read-only . Somente quando eu instalar ou atualizar pacotes, é / remontado para read-write (usando o apt hook), e então remontado de volta para ro .

Às vezes, após a atualização do pacote, não consigo remontar / de volta para somente leitura:

mount -o remount,ro /
mount: / is busy

Em versões antigas do Debian (Wheezy), eu poderia listar arquivos abertos que foram desvinculados com lsof :

 lsof +L1

ou, mais especificamente, arquivos que impedem que / seja remontado de volta para ro:

{ lsof +L1 ; lsof|sed -n '/SYSV/d; /DEL|(path /p;' ; } | grep -Ev '/(dev|home|tmp|var)'

No entanto, no Debian Stretch, lsof +L1 não lista nenhum arquivo.

Não vejo nenhuma alteração em +|-L in man lsof que explicaria por que parou de funcionar.

Por que o lsof + L1 não lista mais os arquivos abertos que foram desvinculados?

Como posso listar esses arquivos que impedem / são remontados para somente leitura?

UPDATE

Parei todos os processos que podem ser interrompidos e só tenho init e getty em execução. mas ainda assim não consigo remontar / a ro .

    
por Martin Vegter 12.10.2017 / 13:20

2 respostas

0

Você tem /proc montado?

Sempre sendo alguém que cuida de ter / montado somente para leitura na maioria das vezes, imagino que você também tenha optado por não montar o procfs. Mas procfs é necessário para lsof encontrar arquivos abertos.

Arquivos mantidos abertos por processos são expostos pelo kernel através de links simbólicos em procfs. Os diretórios /proc/<pid>/fd contêm um symlink para cada arquivo mantido aberto. O nome dos links simbólicos são os números dos descritores de arquivos, e o caminho referenciado pelo symlink é o caminho do arquivo.

Os links simbólicos pendentes ainda permanecem em /proc para arquivos abertos que já foram excluídos. E o caminho referenciado do arquivo é renomeado para terminar com "(deletado)".

O que o lsof +L1 faz não é essencialmente diferente de um simples "one-liner" como:

stat -c%N /proc/[0-9]*/fd/* | grep deleted

Assim, você pode usar um one-liner similar para listar todos arquivos abertos que podem impedir que o sistema de arquivos raiz seja remontado (desde que funcione /proc ).

No entanto, se você teve /proc montado, as únicas outras causas que posso imaginar são bugs ... Enfim, FYI, no meu sistema Debian Stretch atual. lsof +L1 funciona como esperado.

bash# lsb_release -d
Description:    Debian GNU/Linux 9.5 (stretch)

bash# uname -a
Linux bwp-249-8 4.9.0-8-amd64 #1 SMP Debian 4.9.110-3+deb9u4 (2018-08-21) x86_64 GNU/Linux

bash# lsof -v
lsof version information:
    revision: 4.89
    [...]
    
por 19.09.2018 / 15:30
0

Eu consegui reproduzir esse problema apenas uma vez e resolvi usando apenas mount com a opção -n .

Citando man mount :

-n, --no-mtab
      Mount without writing in /etc/mtab.  This is necessary for example when /etc is on a read-only filesystem.

O programa mount abrindo o (s) arquivo (s) para escrever no sistema de arquivos raiz soou como uma explicação plausível para mim. Especificamente mount escreve /etc/mtab afinal e /etc geralmente faz parte do sistema de arquivos raiz. No entanto, eu não consegui reproduzi-lo novamente na mesma máquina depois que fiz isso uma vez ...

Isso poderia resolver seu problema?

    
por 10.12.2018 / 16:39