Remontar um disco ocupado para o modo somente leitura

19

Quero forçar uma partição de disco para o modo somente leitura e mantê-la somente leitura por mais de 30 minutos.

O que eu tentei:

  1. mount -o remount,ro (partition-identifier) (mount-point) -t (filesystem)

    Problema : isso gerou erro de ocupado do dispositivo, pois alguns processos estavam usando a partição. Não quero matar os processos usando o disco. Eu quero simular o disco repentinamente ficando somente leitura quando os processos ainda o estiverem usando.

  2. Chave mágica sysrq usada, como abaixo

    echo u > /proc/sysrq-trigger
    

    Problema : Isso tornará todas as partições de disco somente leitura (embora o dispositivo esteja ocupado). Mas depois de 20 a 30 minutos, a máquina está sendo reinicializada. Algumas máquinas são reiniciadas imediatamente após a execução deste comando. Ainda não tenho certeza do que está causando essa reinicialização. Não quero que a máquina seja reiniciada e preciso manter o disco no modo somente leitura por mais de 30 minutos.

Pergunta : Existe alguma maneira melhor de forçar uma única partição de disco para somente leitura e mantê-la nesse estado por meia hora e trazê-la de volta ao modo de leitura e gravação sem causar reinicialização no processo?

AdithyaCS
fonte
3
Você já considerou fsfreeze -f? Ele não remonta exatamente o sistema de arquivos somente leitura. Em vez disso, bloqueia todos os escritores até fsfreeze -u. Mas é semelhante ...
Celada
Obrigado Celada! é uma boa ideia! .. No momento, não tenho o fsfreeze trabalhando na minha máquina, mas vou tentar isso.
AdithyaCS
Eu tentei fsfreeze -fe, no meu caso, era mais "o congelamento". Talvez porque as gravações foram bloqueadas em vez de serem rejeitadas?
Piotr Findeisen
fsfreezetornou meu sistema inacessível e não pude digitar o comando descongelar, não consegui voltar para um terminal e tive que reiniciar minha máquina. Portanto, esteja avisado ! :)
Alex

Respostas:

16

Você normalmente não pode remontar um sistema de arquivos como somente leitura se os processos tiverem um arquivo aberto para gravação ou se ele contiver um arquivo excluído, mas ainda aberto. Da mesma forma, você não pode desmontar um sistema de arquivos que possua qualquer arquivo aberto (ou usos similares de arquivos, como um processo com o diretório atual, um executável em execução etc.).

Você pode usar umount -lpara liberar o ponto de montagem e impedir a abertura de outros arquivos, mas mantenha o sistema de arquivos montado e mantenha os processos que já possuem arquivos abertos funcionando normalmente.

Não consigo pensar em uma maneira genérica de forçar um sistema de arquivos a ser remontado somente leitura quando não deveria. No entanto, se o sistema de arquivos for suportado por um dispositivo de bloco, você poderá torná-lo somente leitura , por exemplo

echo 1 >/sys/block/dm-4/ro
echo 1 >/sys/block/sda/sda2/ro

echo u > /proc/sysrq-triggeré uma maneira bastante extrema de forçar a remontagem como somente leitura, porque afeta todos os sistemas de arquivos. Ele é um método de última instância para deixar o sistema de arquivos em um estado limpo antes da reinicialização.

Remontar um sistema de arquivos como somente leitura não causa uma reinicialização. Tudo o que está causando a reinicialização não está diretamente relacionado à remontagem da partição como somente leitura. Talvez não esteja completamente relacionado, ou talvez isso acione um bug no aplicativo que faz com que ele gire e faça com que o processador superaqueça e seu processador esteja com defeito ou com overclock e, eventualmente, reinicie. Você precisa rastrear a causa da reinicialização.

Gilles 'SO- parar de ser mau'
fonte
2
Infelizmente, esta não é uma solução portátil. Na framboesa, recebo: "Permissão negada" quando corroecho 1 | sudo tee /sys/block/mmcblk0/mmcblk0p2/ro
Piotr Findeisen
.. e echo u > /proc/sysrq-triggernão é apenas extremo, mas também pode forçá-lo a reiniciar, se desejar remontar o RW. Quando eu tentei isso e remontei (com mount..) dmesgdisse: "Não foi possível remontar o RDWR por causa da lista de inodes órfãos não processados. Por favor desmonte / remonte em vez disso"
Piotr Findeisen
@PiotrFindeisen você executou isso como root?
hanshenrik 14/09
@hanshenrik eu acho que sim
Piotr Findeisen
4

Use mounta opção force (assumindo que sua montagem tenha uma; GNU mountnão, mas BSD e macOS, por exemplo):

mount -f -o remount,ro /mount/point

Obviamente, sua milhagem pode variar dependendo do sistema de arquivos real, da versão do kernel e da situação ; portanto, essa é apenas uma opção de nível superior, tentando outros truques de nível inferior, como por exemplo, mencionados pelo @Gilles.

Piotr Findeisen
fonte
11
@psusi no. Isso me permitiu remontar minha /partição ext4 .
Piotr Findeisen
2
Acontece que eu estava pensando umount -f, mas apenas tentei remontar para ro e, enquanto o comando -f não retorna um erro, o sistema de arquivos é, de fato, não feito apenas para leitura.
Psusi
11
@psusi, sem surpresa. Eu não esperaria que uma abordagem única funcionasse em todos os casos. Isso funcionou para mim repetidamente (partição raiz ext4 em framboesa) - e refiro-me a remontar ao RO, sem ignorar erros -, então acho que funcionará para alguns casos, mas não para todos. Desculpe, isso não inclui o seu.
Piotr Findeisen
13
homem montagem diz que -fé --fake. Citação: "Faz com que tudo seja feito, exceto a chamada real do sistema; se não for óbvio, isso '' falsifica '' a montagem do sistema de arquivos. Esta opção é útil em conjunto com o sinalizador -v para determinar o que o comando mount está tentando Também pode ser usado para adicionar entradas para dispositivos que foram montados anteriormente com a opção -n.A opção -f verifica se há registro existente no / etc / mtab e falha quando o registro já existe (com montagem não falsa regular, esta verificação é feita pelo kernel) ".
Will Manley
3
BSD e, portanto, macOS mounts ' -f realmente significam "força".
terdon