Script para verificar o sistema de arquivos somente leitura

5

Como posso verificar um monte de sistemas para encontrar qualquer sistema de arquivos montado somente para leitura? Possivelmente através de um script?

    
por user11496 12.10.2011 / 09:06

8 respostas

9

awk '$4~/(^|,)ro($|,)/' /proc/mounts
    
por 12.10.2011 / 10:15
3

Eu usei o seguinte no passado

grep ' ro ' /proc/mounts

Em alguns casos, você pode querer pular quaisquer montagens remotas que possam ser RO por design

grep ' ro ' /proc/mounts | grep -v ':'

Você também pode querer pular coisas montadas via automount

grep ' ro ' /proc/mounts | egrep -v 'automount|autofs'
    
por 12.10.2011 / 19:48
3

Se você pretende encontrar sistemas de arquivos com problemas (ou seja, o status de montagem foi alterado para READ-ONLY devido a um erro no sistema de arquivos), eu faria o seguinte (assumindo ext * filesystems):

 tune2fs -e panic [raw-disk-partition-name]

EX:

 tune2fs -e panic /dev/sda1

O que isto faz é pânico com o sistema, reiniciando assim o servidor, possivelmente invocando um fsck no sistema de arquivos com problema para consertá-lo. Assim, um problema sério no sistema de arquivos é tratado por meio de um sistema que o conserte automaticamente, em vez de descartá-lo para o modo Somente Leitura, o que não achei muito útil. Além disso, eu prefiro entrar em pânico com um sistema de arquivos com problemas, consertando-o do que tentando danificá-lo, o que com o passar do tempo pode causar mais danos.

    
por 14.10.2011 / 20:04
2
cat /proc/mounts|sort|awk '{print $1 "1" toupper(substr($4,0,2))}'

Produz saída delimitada por tabulações com nome e modo de montagem.

    
por 13.11.2014 / 07:44
1

Como outras respostas sugerem, você pode analisar /proc/mounts com grep ou awk , por exemplo, você pode listar as montagens somente leitura:

$ grep "\sro[\s,]" /proc/mounts

ou

$ awk '$4~/(^|,)ro($|,)/' /proc/mounts

Uma alternativa para analisar o conteúdo de /proc/mounts que você pode tentar é

$  grep '^ro$' /proc/fs/*/<device>/options

em que <device> é o nome do nó do dispositivo do sistema de arquivos em /dev . Por exemplo

$ grep '^ro$' /proc/fs/*/sdc1/options

retornaria ro se /dev/sdc1 fosse montado como somente leitura.

Se você quiser verificar um dispositivo de bloco somente leitura (em vez de um sistema de arquivos montado), poderá usar

$ cat /sys/block/<device>/ro

que retorna 1 se o sistema de arquivos for somente leitura ou 0 se ler-escrever.

Observe que <device> acima se refere ao nó do dispositivo real. Se você quiser verificar um dispositivo de link simbólico (como aqueles criados por mapeador de dispositivo ou by-uuid ), use basename e readlink para obter o nome do nó do dispositivo. Como estes exemplos:

$ grep '^ro$' /proc/fs/*/$(basename $(readlink -f /dev/mapper/foo)/options
$ cat /sys/block/$(basename $(readlink -f /dev/mapper/foo)/ro
    
por 05.01.2017 / 13:02
0

Basta procurar a opção ro mount.

    
por 12.10.2011 / 09:45
0

Uma abordagem que funciona mesmo para sistemas de arquivos remotos (que podem ser montados rw mesmo se forem exportados ro, resultando em um sistema de arquivos somente leitura) é simplesmente criar um arquivo de teste em cada sistema de arquivos e testar o código de retorno desse comando.

Mas se isso é algo que acontece regularmente, você precisa investigar a causa em vez de tentar corrigir os sintomas.

    
por 18.04.2012 / 09:51
0

Estou um pouco atrasado, mas é assim que eu lidei com isso.

#!/bin/bash

FILE=/tmp/test.txt

# Check health of LXD host machine
touch ${FILE}

if [ -f ${FILE} ];
then
   rm ${FILE}
   echo "File System is Good!"
else
   message="File System is R/O !"
   echo ${message} >> /var/log/lxd/health.log >&2
   send_twilio "${TWILIO_ACCOUNT_SID}" "${TWILIO_ACCOUNT_TOKEN}" "${TWILIO_NUMBER}" "${to_twilio}" "${HOST}" "${message}"
    
por 21.04.2017 / 02:32