“mount: / is busy” ao tentar montar como somente leitura para que eu possa executar o zerofree

27

Estou tentando executar o zerofree no Ubuntu 11.04 para que eu possa compactar a imagem do VirtualBox vdi usando:

VBoxManage modifyhd Ubuntu.vdi --compact

Para executar zerofree , a imagem do disco foi montada como somente leitura. Eu estou seguindo estas instruções que dizem para usar isso para remontar como somente leitura do modo de recuperação (Drop to prompt do shell de root):

mount -n -o remount,ro -t ext2 /dev/sda1 /

Mas quando faço isso, recebo o erro:

mount: / is busy

Alguma idéia de como fazer isso?

Acompanhamento : seguindo a resposta de Jari e este post executando esses comandos resolve o problema.

service rsyslog stop
service network-manager stop
killall dhclient
    
por Wavy Crab 30.06.2012 / 20:42

12 respostas

19

Alguns processos mantêm arquivos abertos para gravação. Esses podem ser, por exemplo, programas que gravam logs, como rsyslogd , ferramentas de rede, como dhclient ou outra coisa. Desligá-los um a um e tentar a remontagem pode funcionar.

Você pode encontrar processos que usam determinados arquivos usando o programa fuser . Por exemplo, fuser -v -m / retornará uma lista de processos. No entanto, não tenho certeza se é um desses que mantém o sistema de arquivos ocupado.

    
por 30.06.2012 / 21:04
20

Você só pode remontar o sistema de arquivos somente leitura se não houver nenhum processo que tenha um arquivo aberto para gravação. Execute lsof / para ver quais processos têm arquivos abertos no sistema de arquivos raiz. Os arquivos abertos para gravação serão indicados na coluna FD . Você pode filtrar estes com

lsof / | awk '$4 ~ /[0-9].*w/'

Para filtrar os IDs do processo automaticamente, analise a saída de lsof -F pa :

lsof -F pa /home | awk '/^p/ {pid = substr($0, 2)} /^a.*w/ {print pid}'
    
por 02.07.2012 / 01:36
8

Melhorando a resposta de Peter:

Eu não consegui matar processos que usam meu ponto de montagem. Então, fiz isso:

  • Edite o /etc/fstab para iniciar em somente leitura na próxima inicialização. Ex: /dev/sda1 / ext2 ro 0 1
  • Reinicialize e abra um shell (Chave do host + F2, por exemplo)
  • Executar zerofree

Para "recuperar" seu sistema:

  • Monte com opção de leitura / gravação: $ mount -o remount,rw /dev/sda1
  • Edite /etc/fstab novamente, restaurando seu valor original

Extra: se necessário, abra modo de recuperação em qualquer etapa:

  • Reinicializar
  • Mantenha a tecla Shift enquanto a VM está carregando
  • Opções avançadas > Opção de kernel com modo de recuperação > Ir para o prompt do shell raiz
por 17.09.2016 / 06:51
6

Às vezes, há tantos processos que mantêm a montagem ocupada, que pode ser mais fácil simplesmente reinicializar com a montagem somente leitura.

Altere a entrada para o sistema de arquivos raiz em /etc/fstab , por exemplo:

/dev/sda1 / ext2 relatime,rw,errors=remount-ro 0 1

torna-se:

/dev/sda1 / ext2 noatime,ro 0 1

Na reinicialização, o sistema de arquivos será montado como somente leitura, para que você possa executar zerofree nele.

Quando terminar, remonte novamente o sistema de arquivos de leitura / gravação ( mount -o remount,rw / ) e desfaça as alterações em /etc/fstab .

Inspirado por link

    
por 02.11.2015 / 17:15
3

Se você usar o systemd, as gravações do disco serão interrompidas parando o systemd-journald.

# systemctl stop systemd-journald.socket
# systemctl stop systemd-journald.service
# mount -o ro,remount /
    
por 13.10.2015 / 16:21
1

Para qualquer outra pessoa que esteja apenas procurando uma solução rápida para colar em seu terminal ...

(Antes de seguir os comandos abaixo, certifique-se de ter completado as outras etapas como telinit 1 .)

Encontrado isto :

fuser -mv /dev/sda1 > /tmp/sda1.pids
kill 'cat /tmp/sda1.pids'

Os comandos podem matar sua sessão, mas depois que você voltar, sua partição estará pronta para ser remontada.

    
por 02.09.2016 / 19:50
1

Se você ainda não conseguir desmontar ou remontar o dispositivo depois de interromper todos os serviços e processos com arquivos abertos, pode haver um arquivo de troca ou uma partição de troca mantendo o dispositivo ocupado. Isso não será exibido com fuser ou lsof . Desativar a troca com:

sudo swapoff -a

Você pode verificar de antemão e mostrar um resumo de quaisquer partições de troca ou trocar arquivos com:

swapon -s

ou:

cat /proc/swaps

Como alternativa ao uso do comando sudo swapoff -a , você também pode desativar a troca parando um serviço ou uma unidade systemd . Por exemplo:

sudo systemctl stop dphys-swapfile

ou:

sudo systemctl stop var-swap.swap

No meu caso, desligar o swap era necessário, além de interromper quaisquer serviços e processos com arquivos abertos para gravação, para que eu pudesse remontar minha partição raiz como somente leitura para executar fsck em minha partição raiz sem reinicialização. Isso foi necessário em um Raspberry Pi executando Raspbian Jessie.

    
por 21.09.2017 / 21:24
1

Ok, tem o que eu fiz

Primeiro, meu objetivo era reduzir minha partição / ( ROOT ) para adicionar outra no meu disco.

  • A partir da sessão de execução, uma vez tudo limpo e backup:

    init 1
    

    Meu desktop desaparece e estou agora no console Linux ...

    ...
    Give root password for maintenance or press CTRL+D to continue
    TheRootPassword_SomethingLike1234
    
  • Agora, tentando montar / no modo somente leitura :

    mount -o remount,ro /
    mount: / is busy
    
  • Ok, a partir de agora, eu estou no modo de usuário único, , mas ps ax mostra muito outro processo !!

    Matar todos eles não é realmente possível, ou perigoso ... ( kill 1 é proibido ... Eu não tenho tempo para jogar psdoom : -)

    A única coisa que posso fazer é System Request , por isso, eu sei de duas maneiras: (veja o arquivo Documentation/sysrq.txt nos documentos do kernel):

    1. primeiro usando o magic SysRq key trap do kernel do teclado:

      • mantenha pressionado AltGr e mantenha pressionado;
      • pressione PrtScn apenas uma vez, mas não libere AltGr ,
      • pressione s apenas uma vez, isso enviará Emergency sync pedido ao kernel e
      • pressione u , isso enviará Umount all pedido, isso irá remontar todos os sistemas de arquivos montados como somente leitura,
      • solte então AltGr
    2. Ou pela linha de comando:

      echo s >/proc/sysrq-trigger
      echo u >/proc/sysrq-trigger
      
  • Então agora eu pude

    fsck -fC0 /dev/mapper/MyDisk-ROOT
    

    ....

...

    
por 05.01.2018 / 20:09
1

Anexe o arquivo vdi como volume adicional e não do sistema a outro VirtualBox. Lá você pode (re) montá-lo conforme necessário e executar o zerofree.

Digamos que você queira compactar o disco VDI de VM1 (Virtual Machine 1). Então você precisa de uma segunda VM2 . Ou seja:

  • Verifique se nem VM1 nem VM2 estão em execução;
  • Do Gerenciador do VirtualBox:

    • Selecione VM2,
    • "Configurações" - > "Armazenamento" - > "Adicionar disco rígido": "Selecione como disco adicional" ,

    • selecione o arquivo vdi da VM1, que você deseja compactar. Dica: Certifique-se de que o disco rígido recém-adicionado à VM2 fique em segundo na ordem de inicialização após o disco original da VM2.

    • inicie a VM2: agora você pode (re) montar o volume da VM1 como disco adicional para a VM2, porque nenhum processo a está usando na VM2. Dica: primeiro, abra o volume com o seguidor do Linux, que monta automaticamente o volume. Em seguida, use mount -l para ver qual é o _Device_ no comando sudo mount -o remount,ro _Device_ . No meu caso, isso era / dev / sdb1 . Então o comando foi (1) sudo mount -o ro,remount /dev/sdb1 e então (2) sudo zerofree /dev/sdb1 .

Em vez de VM2, um deve ser capaz de inicializar a partir de um disco de instalação como e .iso image e atingir o mesmo, MAS eu não tentei.

    
por 25.03.2018 / 14:18
0

Suponho que você tente executar o comando mount na VM. De qualquer forma, você provavelmente tem uma partição raiz diferente do autor do fórum.

Tente:

mount -o ro,remount /

O que não depende da opção fs ou mount. Se isso não funcionar, você também pode tentar determinar sua raiz fs com grep " / " /proc/mounts ou cat /proc/cmdline . Se o seu sistema de arquivos raiz é, por exemplo, / dev / mapper / system-rootfs, você pode usar:

mount -o ro,remount /dev/mapper/system-rootfs /
    
por 30.06.2012 / 21:40
0

Eu tive esse problema que me impediu de colocar minha máquina no modo somente leitura. Resolver o problema demorou mais do que eu gostaria de admitir ... Acredito que o problema foi que deixei o Apache-Zeppelin em execução e esqueci disso. Certifique-se de que você não está fazendo o mesmo com outro serviço de tipo de hospedagem. Para resolver o problema usei fuser -kill / para finalizar todos os processos que poderiam estar causando o problema e isso me permitiu voltar ao modo ro.

    
por 16.06.2017 / 16:49
0

A solução para mim foi reiniciar o sistema operacional convidado e escolher o "modo de recuperação" no menu de inicialização do GRUB. No "modo de recuperação", havia menos processos em execução e a remontagem somente leitura foi imediatamente bem-sucedida.

    
por 30.09.2018 / 19:08