Raspberry Piのログ出力先をRAMに変更すると、XRDPがつながらなくなる問題の対処
ログ出力先をRAMに変更したら、XRDPがつながらなくなる問題が発生したため、原因と対処の記録です。
SDカードには書き込み制限がある
ご存知の通り、Raspberry PiはSDカードで動作しています。
SDカードはフラッシュメモリに属しますが、フラッシュメモリは実は書き込み回数に制限があるのです
記憶素子単体の書き換え寿命は短命なもの (TLC) では数百回が限界、長くても (SLC) 数万回程度である
書き込み可能回数を超えると、ストレージとして認識することができなくなったり、正常な記録ができなくなったり、正常に記録することができたとしても記録内容を維持することができず、記録した内容が壊れたり消えてしまったりする確率が上昇する
ってなわけで、OS側から出る無駄なLogとかは制限できないかなぁ~と探していた時、こんな記事を発見しました!
ドンピシャ! 設定を行いました
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