Script à vérifier pour le système de files en lecture seule

Comment puis-je vérifier un set de systèmes pour find n'importe quel système de files monté en lecture seule? Peut-être via un script?

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

Si vous avez l'intention de find des filesystems avec des problèmes (c'est-à-dire que le statut de assembly a été changé en LECTURE UNIQUEMENT en raison d'une erreur de système de files), je procéderais comme suit:

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

EX:

  tune2fs -e panic /dev/sda1 

Ce qui fait paniquer le système, redémarrant ainsi le server, invoquant éventuellement un fsck sur le système de files de problème pour le réparer. Ainsi, un problème sérieux de système de files est résolu en le faisant réparer automatiquement par le système, au lieu de le décharger en mode lecture-seule, ce que je n'ai pas trouvé très utile. En outre, je préfère paniquer un système de files de problèmes, en le fixant plutôt qu'en tentant de le faire fonctionner, ce qui pourrait causer plus de dégâts si le time le permettait.

J'ai utilisé ce qui suit dans le passé

 grep ' ro ' /proc/mounts 

Dans certains cas, vous voudrez peut-être ignorer les assemblys à distance qui peuvent être RO par design

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

Vous pouvez également ignorer les éléments montés via l'automount

 grep ' ro ' /proc/mounts | egrep -v 'automount|autofs' 
 cat /proc/mounts|sort|awk '{print $1 "\011" toupper(substr($4,0,2))}' 

Produit une sortie délimitée par des tabulations avec le nom et le mode de assembly.

Il suffit de chercher l'option ro mount.

Une approche qui fonctionne même pour les filesystems distants (qui peuvent être montés rw même s'ils sont exportés, ce qui donne un système de files en lecture seule) consiste simplement à créer un file de test sur chaque système de files et à tester le code de return de cette command .

Mais si c'est quelque chose qui se produit régulièrement, vous devez examiner la cause plutôt que d'essayer de suivre les symptômes.

Comme d'autres réponses le suggèrent, vous pouvez parsingr /proc/mounts avec grep ou awk , par exemple vous pouvez listr les assemblys en lecture seule:

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

ou

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

Une alternative à l'parsing du contenu de /proc/mounts que vous pouvez essayer est

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

<device> est le nom du nœud du périphérique du système de files sous /dev . Par exemple

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

returnnerait ro si /dev/sdc1 est monté en lecture seule.

Si vous souhaitez searchr un périphérique en lecture seule (au lieu d'un système de files monté), vous pouvez utiliser

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

qui renvoie 1 si le système de files est en lecture seule ou 0 lecture-écriture.

Notez que <device> ci-dessus fait reference au nœud de périphérique réel. Si vous souhaitez vérifier un périphérique de lien symbolique (comme ceux créés par des references de périphériques ou de périphériques ), vous pouvez utiliser basename et readlink pour get le nom de noeud du périphérique. Comme ces exemples:

 $ grep '^ro$' /proc/fs/*/$(basename $(readlink -f /dev/mapper/foo)/options $ cat /sys/block/$(basename $(readlink -f /dev/mapper/foo)/ro 

Je suis un peu en retard mais c'est comme ça que je le gère.

 #!/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}"