busybox chmod 03755は、ディレクトリ権限が正しく設定されているとディスク書き込みI / Oを生成しますか?

busybox chmod 03755は、ディレクトリ権限が正しく設定されているとディスク書き込みI / Oを生成しますか?

組み込みLinuxインストールで実行されるデーモンの起動スクリプトを作成しています。これはchmodBusyBox v1.24.2 からインポートされたことを意味します。

フラッシュメディアに不要な書き込みサイクルが発生したくありません。

そのため、ディレクトリで(with)を実行すると、ディスクへの書き込みchmod 03755I / Oが発生するかどうか疑問に思います。umask 022

つまり、ディレクトリ権限が正しく設定されていることを確認し、権限が正しくない場合にのみchmodを実行する必要がありますか?

chmodまたは、busyboxは権限を確認しないため、ディレクトリ権限の確認は努力の無駄です。すべてのディスク書き込みI/O権限に変更が必要ない場合はいつですか?

答え1

chmod 03755ファイルを操作することを意味しますchmod("file", 03755)。その後、その操作に対する権限があることを確認し、可能であれば実行します(そうでない場合はエラーを返します)。これにより、少なくともファイルのctimeが更新されます。作成する監査記録など

busyboxが必要かどうかを確認するために苦労している場合、ctimeは更新されず、これはバグです。これはまた、バグになる可能性があるタスクの原子特性を排除します。

したがって、すぐに完了しなくても、記憶装置にいくつかの関連書込みが発生する。

だから自分で確認をしなければなりません。

statあなたのbusyboxバージョンでこのアプレットが有効になっている場合:

[ "$(stat -Lc%a file)" = 3755 ] || chmod 3755 file

答え2

現時点では理想的ではない解決策は、コマンドの前後の書き込み数を印刷することです。

まず、私はディスク書き込みキャッシュの無効化:

# hdparm -W 0 /dev/sda

次に、次の手順を繰り返して、別のプロセスからディスクへの書き込みを除外しました。カーネルディスク統計何度も命令してください。

# cat /sys/block/sda/stat | awk '{ print $5 }';chmod 03755 /opt/etc/tinydns;cat /sys/block/sda/stat | awk '{ print $5 }'
1725
1725
# cat /sys/block/sda/stat | awk '{ print $5 }';chmod 03755 /opt/etc/tinydns;cat /sys/block/sda/stat | awk '{ print $5 }'
1725
1725
# cat /sys/block/sda/stat | awk '{ print $5 }';chmod 03755 /opt/etc/tinydns;cat /sys/block/sda/stat | awk '{ print $5 }'
1725
1725

この場合、chmodディスクの出力/書き込みアクティビティは発生しないようです。

答え3

そのファイルで "strace chmod 03755"を使用してそれを見つけることができます。 busybox イメージに strace を追加した可能性があります。

関連情報