リベルさんの戯言室

ゲームの攻略とか映画のネタバレとか。そのほかヌルヌル書いてます。リンクフリーです。※当ブログはPC版表示に最適化されています。

Liber Nonsense Room

リベルさんの戯言室

Raspberry Piのログ出力先をRAMに変更すると、XRDPがつながらなくなる問題の対処



www.raspberrypi.org



ログ出力先をRAMに変更したら、XRDPがつながらなくなる問題が発生したため、原因と対処の記録です。



SDカードには書き込み制限がある

ご存知の通り、Raspberry PiはSDカードで動作しています。

SDカードはフラッシュメモリに属しますが、フラッシュメモリは実は書き込み回数に制限があるのです

フラッシュメモリ - Wikipedia

記憶素子単体の書き換え寿命は短命なもの (TLC) では数百回が限界、長くても (SLC) 数万回程度である
書き込み可能回数を超えると、ストレージとして認識することができなくなったり、正常な記録ができなくなったり、正常に記録することができたとしても記録内容を維持することができず、記録した内容が壊れたり消えてしまったりする確率が上昇する

ってなわけで、OS側から出る無駄なLogとかは制限できないかなぁ~と探していた時、こんな記事を発見しました!

azriton.github.io


ドンピシャ! 設定を行いました

Var/Logをtmpfsにマウントし再起動したらXRDPが死んだ

上記サイトの記事中段「ログ出力ディレクトリをRAMに配置する」を実施して再起動した際、突如としてそれは起きました。


…えっ!?

仕方がないのでHDMIを直結し調査しました。

  • OS:起動している
  • インターネット接続:問題なし ※=自宅のルーターまでは正常に接続できている
  • IP:変化なし

あれれー?おっかしいぞー?XRDPのサービスが死んだか?
 ってなわけで以下コマンドを実行

$ sudo systemctl restart xrdp
Job for xrdp.service failed because the control process exited with error code.
See "systemctl status xrdp.service" and "journalctl -xe" for details.

…うわぁ

$ sudo systemctl status xrdp.service
 xrdp.service - xrdp daemon
   Loaded: loaded (/lib/systemd/system/xrdp.service; disabled; vendor preset: en
   Active: failed (Result: exit-code) since Mon 2018-12-24 15:03:08 JST; 42s ago
     Docs: man:xrdp(8)
           man:xrdp.ini(5)
  Process: 1012 ExecStart=/usr/sbin/xrdp $XRDP_OPTIONS (code=exited, status=1/FA
  Process: 1003 ExecStartPre=/bin/sh /usr/share/xrdp/socksetup (code=exited, sta

12月 24 15:03:08 raspberrypi systemd[1]: Starting xrdp daemon...
12月 24 15:03:08 raspberrypi systemd[1]: xrdp.service: Control process exited, co
12月 24 15:03:08 raspberrypi systemd[1]: Failed to start xrdp daemon.
12月 24 15:03:08 raspberrypi systemd[1]: xrdp.service: Unit entered failed state.
12月 24 15:03:08 raspberrypi systemd[1]: xrdp.service: Failed with result 'exit-c
lines 1-13/13 (END)

…うわぁ(2回目

原因

どうやらXRDPは起動時、以下ファイルの存在チェックを行っているらしい

  • ファイル:/var/log/xrdp.log
  • 所有者:xrdp:adm
  • アクセス権:640

手順「ログ出力ディレクトリをRAMに配置する」の実施をしてしまうと、上記ファイルがOS起動時に存在しないためエラーとなる

対処方法

/etc/rc.localでファイルを追加しようとしたがなぜかできなかった。他のファイルはできているのになぜ…。

ってなわけでCrontabで、OS起動時にファイルの作成・所有者変更・権限付与ができるShを実行してやればOKです

  • XrdpLogCreate.sh
#!/bash/sh

sudo touch /var/log/xrdp.log
sudo chown xrdp:adm /var/log/xrdp.log
sudo chmod 640 /var/log/xrdp.log
sudo systemctl start xrdp
  • Crontab設定
$ crontab -e
@reboot         sh /home/pi/XrdpLogCreate.sh

結果

つながりました!