Estou tentando rodar zerofree
no Ubuntu 11.04 para compactar a imagem do VirtualBox vdi usando:
VBoxManage modifyhd Ubuntu.vdi --compact
Para executar, zerofree
a imagem do disco foi montada como somente leitura. Estou seguindo estas instruções, que dizem usar isso para remontar como somente leitura no modo de recuperação (prompt do shell Drop to root):
mount -n -o remount,ro -t ext2 /dev/sda1 /
Mas quando faço isso, recebo o erro:
mount: / is busy
Algumas ideias em como fazer isso?
Acompanhamento : Seguir a resposta da Jari e esta postagem executando esses comandos resolve o problema.
service rsyslog stop
service network-manager stop
killall dhclient
ubuntu
mount
virtualbox
Caranguejo ondulado
fonte
fonte
telinit 1
e isso resolveu o problema para mim.Respostas:
Alguns processos estão mantendo os arquivos abertos para gravação. Podem ser, por exemplo, programas que gravam logs, como
rsyslogd
ferramentas de rede, comodhclient
ou qualquer outra coisa. Desligá-los um por 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 deles que mantém o sistema de arquivos ocupado.fonte
F
nos sinalizadores de acesso nafuser
saída.Você só pode remontar o sistema de arquivos somente leitura se não houver um 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 naFD
coluna. Você pode filtrá-los comPara filtrar os IDs do processo automaticamente, analise a saída de
lsof -F pa
:fonte
u
) e ele ainda diz ocupado.Melhorando a resposta de Pedro:
Não pude matar processos que usam meu ponto de montagem. Então, eu fiz isso:
/etc/fstab
para iniciar em somente leitura na próxima inicialização. Ex:/dev/sda1 / ext2 ro 0 1
Para "recuperar" seu sistema:
$ mount -o remount,rw /dev/sda1
/etc/fstab
novamente, restaurando seu valor originalExtra: se necessário, abra o modo de recuperação em qualquer etapa:
fonte
/dev/sda1 / ext2 ro 0 1
entrada estava no topo da lista. Quando o coloquei como a última entrada, eu ainda tinha o erro de ponto de montagem ocupado.Às vezes, existem tantos processos mantendo a montagem ocupada, que pode ser mais fácil simplesmente reiniciar com a montagem somente leitura.
Altere a entrada para o sistema de arquivos raiz em
/etc/fstab
, por exemplo:torna-se:
Na reinicialização, o sistema de arquivos será montado como somente leitura, para que você possa executá
zerofree
-lo.Quando terminar, remonte o sistema de arquivos para leitura / gravação novamente (
mount -o remount,rw /
) e desfaça suas alterações em/etc/fstab
.Inspirado por https://wiki.debian.org/ReadonlyRoot#Enable_readonly_root
fonte
/dev/sda1 / ext2 ro 0 1
e consegui inicializar no modo somente leitura.Se você ainda não conseguir desmontar ou remontar o dispositivo após interromper todos os serviços e processos com arquivos abertos, poderá haver um arquivo de troca ou partição de troca mantendo o dispositivo ocupado. Isso não aparecerá com
fuser
oulsof
. Desative a troca com:Você pode verificar previamente e mostrar um resumo de quaisquer partições de troca ou arquivos de troca com:
ou:
Como alternativa ao uso do comando
sudo swapoff -a
, você também pode desativar a troca interrompendo um serviço ou unidade systemd . Por exemplo:ou:
No meu caso, era necessário desativar a troca, 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, a fim de executar
fsck
na minha partição raiz sem reiniciar. Isso foi necessário em um Raspberry Pi executando Raspbian Jessie.fonte
Se você usar o systemd, as gravações em disco serão interrompidas parando o systemd-journald.
fonte
Ok, tem o que eu fiz
Primeiro, meu objetivo era reduzir minha partição
/
(ROOT
) para adicionar outra no meu disco.Da execução da sessão, uma vez que tudo foi limpo e feito backup:
Minha área de trabalho desaparece e agora estou no console Linux ...
Agora, tentando montar
/
no modo somente leitura :Ok, a partir de agora, estou no modo teoricamente de usuário único , mas
ps ax
mostro muitos outros processos !!Matá-los todos não é realmente possível ou perigoso ... (
kill 1
é proibido ... não tenho tempo para jogar psdoom :-)A única coisa que posso fazer é
System Request
, por isso, conhecer duas maneiras: (veja oDocumentation/sysrq.txt
arquivo nos documentos do kernel):primeiro usando a
magic SysRq key
armadilha do kernel do teclado:Emergency sync
solicitação ao kernel eUmount all
solicitação, remontará todos os sistemas de arquivos montados somente leitura,Ou por linha de comando:
Então agora eu poderia
....
...
fonte
fsck
foi feito com êxito, eu inicializei um Live USB para poder executarresize2fs
... Esse recurso ainda não está implementado ...fsck
não sabe-f
; o que isso faria, zero blocos não referenciados?ext2
afsck
opção:-f
force a verificação mesmo se o sistema de arquivos parecer limpo.Para qualquer pessoa que esteja apenas procurando uma solução rápida para colar no seu terminal ...
(Antes de seguir os comandos abaixo, verifique se você completou as outras etapas, como
telinit 1
.)Encontrou isto :
Os comandos podem matar sua sessão, mas depois que você volta, sua partição está pronta para ser remontada.
fonte
Anexe o arquivo vdi como volume adicional e não pertencente ao sistema a outro VirtualBox. Lá você pode (re) montá-lo conforme necessário e executar o zerofree.
Digamos que você deseja compactar o disco VDI da VM1 (Máquina Virtual 1). Então você precisa de uma segunda VM2 . Isso é, :
No VirtualBox Manager:
"Configurações" -> "Armazenamento" -> "Adicionar disco rígido": ,
selecione o arquivo vdi da VM1, que você deseja compactar. Dica: verifique se o disco rígido adicionado à VM2 fica em segundo na ordem de inicialização após o disco original da VM2.
mount -l
para ver qual é_Device_
o comandosudo mount -o remount,ro _Device_
. No meu caso, era / dev / sdb1 . Então o comando foi (1)sudo mount -o ro,remount /dev/sdb1
e depois (2)sudo zerofree /dev/sdb1
.Em vez de VM2, deve-se conseguir inicializar e instalar discos como imagem .iso e obter o mesmo, mas ainda não tentei.
fonte
Presumo que você tente executar o
mount
comando na VM. De qualquer forma, você provavelmente tem uma partição raiz diferente da do autor da publicação no fórum.Experimentar:
O que não depende da opção fs ou mount. Se isso não funcionar, você também pode tentar determinar seus fs raiz com
grep " / " /proc/mounts
oucat /proc/cmdline
. Se o seu sistema de arquivos raiz for, por exemplo, / dev / mapper / system-rootfs, você poderá usar:fonte
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 meu problema foi que deixei o Apache-Zeppelin em execução e esqueci. Verifique se você não está fazendo o mesmo com outro serviço do tipo hospedagem. Para resolver o problema, eu costumava
fuser -kill /
encerrar todos os processos que poderiam estar causando o problema e isso me permitiu voltar ao modo ro.fonte
A solução para mim foi reiniciar o sistema operacional e escolher "modo de recuperação" no menu de inicialização do GRUB. No "modo de recuperação", há menos processos em execução e a remontagem somente leitura funciona bem.
Se o sistema tiver um arquivo de troca no sistema de arquivos raiz (em vez de uma partição de troca), também será necessário desativar temporariamente o arquivo de troca com
swapoff -a
.fonte