web-dev-qa-db-ja.com

読み取り専用ファイルシステムをチェックするスクリプト

たくさんのシステムをチェックして、読み取り専用でマウントされているファイルシステムを見つけるにはどうすればよいですか?おそらくスクリプト経由ですか?

6
user11496
awk '$4~/(^|,)ro($|,)/' /proc/mounts
11
Teddy

問題のあるファイルシステムを見つけることを意図している場合(つまり、ファイルシステムエラーのためにマウントステータスが読み取り専用に変更されている場合)、次のようにします(ext *ファイルシステムを想定)。

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

例:

 tune2fs -e panic /dev/sda1

これにより、システムがパニックになり、サーバーが再起動し、問題のあるファイルシステムでfsckが呼び出されて修正されます。したがって、深刻なファイルシステムの問題は、システムが自動的に修正することによって処理されます。これは、私があまり役に立たないと感じた読み取り専用モードにダンプするのではなく、さらに、問題のあるファイルシステムをパニックにしたいのですが、時間が経つにつれ、より多くの損傷を引き起こす可能性がある損傷した状態で実行しようとするよりも、ファイルシステムを修正します。

4
mdpc

私は過去に以下を使用しました

grep ' ro ' /proc/mounts

場合によっては、ROの仕様になっている可能性があるリモートマウントをスキップすることができます。

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

Automountでマウントされたものをスキップすることもできます

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

マウント名とモードを含むタブ区切りの出力を生成します。

2
BHG

私は少し遅れましたが、これは私がそれを処理する方法です。

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

他の回答が示唆しているように、grepまたはawkを使用して/proc/mountsを解析できます。たとえば、読み取り専用のマウントを一覧表示できます。

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

または

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

あなたが試すことができる/proc/mountsのコンテンツを解析する代わりの方法は

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

ここで、<device>/devの下のファイルシステムのデバイスノード名です。例えば

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

/dev/sdc1が読み取り専用でマウントされている場合、roを返します。

(マウントされたファイルシステムの代わりに)読み取り専用のブロックデバイスを確認したい場合は、

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

ファイルシステムが読み取り専用の場合は1を、読み取り/書き込みの場合は0を返します。

上記の<device>は実際のデバイスノードを指すことに注意してください。シンボリックリンクデバイス(device-mapperまたはby-uuid参照によって作成されたデバイスなど)を確認する場合は、basenameおよびreadlinkを使用してデバイスノード名を取得します。これらの例のように:

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

リモートファイルシステム(roにエクスポートしてもrwにマウントでき、読み取り専用のファイルシステムになる)でも機能するアプローチは、各ファイルシステムでテストファイルを作成し、そのコマンドの戻りコードをテストすることです。 。

しかし、これが定期的に発生する問題である場合は、症状を修正し続けるのではなく、原因を調査する必要があります。

0
Bram

roマウントオプションを探してください。