Raspberry Piでの読み取り/書き込み操作の削減

はじめに



そのため、インターネット上では、フラッシュドライブが2〜3か月間ラズベリーで「ライブ」になり、その後使用できなくなる記事を見つけることができます。 提案されたソリューションは、標準のmicroSDカードをUSB HDDに置き換えることです。 ソリューションはシンプルで信頼性が高く、さらに読み取り/書き込み速度が向上します。 しかし、なぜフラッシュドライブはこんなに早く死ぬのでしょうか? 同じ要因がハードドライブに害を及ぼすことはありますか? それでは始めましょう!



マテリエル
フラッシュドライブの書き込みサイクルは限られています。 そのため、Linuxが常に何かを書き込むと、失敗する可能性があります。 ハードドライブは異なる原理で動作します。 しかし、それらの場合、小さな読み取り/書き込み操作も特に有用ではありません。 ハードディスクドライブのヘッドは、一定期間使用されない場合に駐車できます。システムはこれを行うことができ、グランドに埋め込むこともできます。 小さな読み取り/書き込み操作の場合、ハードドライブは常にヘッドを停止(クリティカルではない)したり、ヘッドを停止したりすることができず、すぐに何かの読み取り/書き込みを開始します(これはすでに悪化しています)。



情報はページに書き込まれます。 通常のページサイズは4 kBです。 したがって、1バイトを書き込みたい場合は、バッファに収まるか、4 kBが書き込まれます。 バッファーがいっぱいになると、ページが書き込まれ、さらに記録が行われ、次のページがRAMに配置されます。



ファイルシステムをジャーナリングするとき(たとえば、電源を切るなどの障害時に情報を失わないようにする)、ログ機能(さまざまなシステムイベントまたはプログラムイベントに関する情報を保存する)に、小さな情報の記録が使用されます。 raspberryでは、ロギングはrsyslogによって行われます[ 1 ]



Raspbianには、ルートストレージメディアの負荷を軽減するために無効にできる2つのデーモンがあります。 それらを無効にすることで、記録操作に勝つことができますが、信頼性と復元の可能性が失われます。 これらは、ファイルシステムロギングデーモンとrsyslogです。 したがって、ルートドライブに保存される貴重なデータがある場合は、ログサービスを無効にしないことをお勧めします。 raspberryをおもちゃとして使用したり、メインディスクをすばやく交換したりできる場合は、ファイルシステムのジャーナリングを無効にすることができます。 ロギングについても同様です。なぜそれが必要なのかわからない場合は、何かがうまくいかない場合は、最初にログで不具合を探す必要があると言えば十分です。 フォーラムの誰かに質問したい場合、ログを削除するように求められるでしょう。 したがって、すべてが正常に機能する場合、または何が「落ちた」かを理解するよりもシステムを再インストールする方が簡単な場合は、ログを安全にオフにできます。



iotopユーティリティを使用して、ドライブアクセスを表示できます。 これを行うには、パラメーターを指定して実行します。



sudo iotop -o -a
      
      





Iotopのインストール
 sudo apt-get install iotop
      
      





ロギングをオフにする



ロギングを無効にするには、次を開きます。



 sudo nano /etc/rsyslog.conf
      
      





MODULESセクションの2行でコメントします。



 $ModLoad imuxsock # provides support for local system logging $ModLoad imklog # provides kernel logging support
      
      





次のようになります。
 # /etc/rsyslog.conf Configuration file for rsyslog. # # For more information see # /usr/share/doc/rsyslog-doc/html/rsyslog_conf.html ################# #### MODULES #### ################# #$ModLoad imuxsock # provides support for local system logging #$ModLoad imklog # provides kernel logging support #$ModLoad immark # provides --MARK-- message capability # provides UDP syslog reception #$ModLoad imudp #$UDPServerRun 514 # provides TCP syslog reception #$ModLoad imtcp #$InputTCPServerRun 514 ########################### #### GLOBAL DIRECTIVES #### ########################### # # Use traditional timestamp format. # To enable high precision timestamps, comment out the following line. # $ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat # # Set the default permissions for all log files. # $FileOwner root $FileGroup adm $FileCreateMode 0640 $DirCreateMode 0755 $Umask 0022 # # Where to place spool and state files # $WorkDirectory /var/spool/rsyslog # # Include all config files in /etc/rsyslog.d/ # $IncludeConfig /etc/rsyslog.d/*.conf ############### #### RULES #### ############### # # First some standard log files. Log by facility. # auth,authpriv.* /var/log/auth.log *.*;auth,authpriv.none -/var/log/syslog #cron.* /var/log/cron.log daemon.* -/var/log/daemon.log kern.* -/var/log/kern.log lpr.* -/var/log/lpr.log mail.* -/var/log/mail.log user.* -/var/log/user.log # # Logging for the mail system. Split it up so that # it is easy to write scripts to parse these files. # mail.info -/var/log/mail.info mail.warn -/var/log/mail.warn mail.err /var/log/mail.err # # Logging for INN news system. # news.crit /var/log/news/news.crit news.err /var/log/news/news.err news.notice -/var/log/news/news.notice # # Some "catch-all" log files. # *.=debug;\ auth,authpriv.none;\ news.none;mail.none -/var/log/debug *.=info;*.=notice;*.=warn;\ auth,authpriv.none;\ cron,daemon.none;\ mail,news.none -/var/log/messages # # Emergencies are sent to everybody logged in. # *.emerg :omusrmsg:* # # I like to have messages displayed on the console, but only on a virtual # console I usually leave idle. # #daemon,mail.*;\ # news.=crit;news.=err;news.=notice;\ # *.=debug;*.=info;\ # *.=notice;*.=warn /dev/tty8 # The named pipe /dev/xconsole is for the `xconsole' utility. To use it, # you must invoke `xconsole' with the `-file' option: # # $ xconsole -file /dev/xconsole [...] # # NOTE: adjust the list below, or you'll go crazy if you have a reasonably # busy site.. # daemon.*;mail.*;\ news.err;\ *.=debug;*.=info;\ *.=notice;*.=warn |/dev/xconsole
      
      







再起動後、システムはロギングを停止します。 私たちはチェックします:



 sudo iotop -o -a
      
      





出力はrsyslogではなくなりました。



ロギングを無効にする



少し複雑です-パーティションをアンマウントする必要があります。 これを行うには、次を使用できます。





microSDカードがある場合-システムが存在するセクションはmmcblk0p2として定義されます。



ここで、mmcblk0はカード自体であり、p2はその2番目のパーティションです(最初のパーティションはデフォルトでブートです)。 USBドライブを使用している場合、パーティションはsda2として定義されます。 別のコンピューターからブートする場合、ほとんどの場合、sdb2として定義されます。



次に行うこと:



 sudo umount /dev/sdb2 sudo tune2fs -O ^has_journal /dev/sdb2 sudo e2fsck -f /dev/sdb2
      
      





その後、次のことを確認します。



 dmesg | grep EXT4
      
      





以下を生成します。



 [ 5890.967580] EXT4-fs (sdb2): mounted filesystem without journal. Opts: (null)
      
      





ドライブから起動し、次を入力します。



 sudo iotop -o -a
      
      





そして、LXDEはたまにしかハードドライブにアクセスしないことがわかります。 これらの呼び出しは体系的ではないため(5〜10分観察します)、ドライブの負荷はほぼゼロに減少したと言えます。



All Articles