やってみる

アウトプットすべく己を導くためのブログ。その試行錯誤すらたれ流す。

Raspbianまたしてもシステムクラッシュする\(^o^)/

 2019-02-02。

事件の概要

 2019-02-02、Chromiumを起動すべくアイコンをクリックするとフリーズした。しばらく待っても復旧しないため、やむなくマジックSysRqキーで強制終了。再起動後におなじくChromiumを起動するとシステムクラッシュ。ファイラやターミナルが一切使えなくなった。

 なお、ブートはするし、Chromium起動前ならファイラやターミナルを使える。このことからChromiumに問題があると思われる。

症状

経緯

  1. ターミナルにてdotnetコマンドからC#開発しているときにChromiumを起動した
  2. しかしハードディスクのLEDが点灯し続けたままフリーズ
  3. しばらく待ったが復旧せず
  4. やむなくAlt+SysRq+Eで強制終了する
  5. ターミナルを起動しsudo rebootして再起動

 以後、何度OSを再起動しても症状が起きる。

原因

 謎。ハードディスクの物理的な問題か? それともメモリ不足のせい?

分析

 マジックSysRqキーで強制終了によるシステムクラッシュは回避できているはず。実際、OSの起動はできる。Chromium起動さえしなければファイラも機能する。

 システムでなくChromiumがクラッシュしたのか? でもChromiumのアイコンをクリックして起動しようとしたらファイルシステムやターミナルまでフリーズするのはどういうこと?

予想

 Chromiumで何か書込中にマジックSysRqキーで強制終了したせいかも?

 じつはフリーズに見えて正常に動作していたとか。そういえばマジックSysRqキーの存在を知る前は20分くらい放置していると復旧するときがあった。このときにマジックSysRqキーで強制終了すると今回のようにクラッシュするのかも?

 フリーズと思っていたがHDDのLEDが点灯していた。これは書込中だったからかも。Chromiumに何かを書込中にマジックSysRqキーで強制終了されたものだからChromiumがクラッシュしたのか?

 でもやたら遅かったのだが……。

対策

 なし。原因不明のため。

 これは厳しい。とりあえず原因を仮定して対策を考えてみる。

  • もしメモリ不足が原因なら
    • Raspberry Piを使っているかぎり常にシステムクラッシュのリスクが高いということになる
      • ハイスペックマシンに買い換える
  • もしHDDが原因なら
    • HDD交換する(買ってからまだ三ヶ月くらいのはずだが……)
  • もしRaspbianが原因なら
    • 最新にする(むしろそれが原因でクラッシュすることもあるだろうから恐い)
  • もし強制終了が原因なら
    • HDDのLEDが点灯しているなら20分くらい待ってみる(復旧するときもある)
      • HDDのLEDが点灯しているときにマジックSysRqキーで強制終了しないこと

復旧を試みる

 fsckコマンドで。方法は以下参照。

 fsckで修復するHDDはumountする必要がある。ラズパイなら以下のようなハードウェア構成でやればいい。

[Raspberry Pi 3B+]
|  +----[USB2.0]----[起動OS用HDD]
|  +----[USB2.0]----[USB Hub]----[修復するHDD]
|                       |
[AC電源]----------------+

 USB Hubを噛ませないとフリーズする。原因は電源不足か。あるいはRaspbianシステム2つをUSB2.0に直挿しするとフリーズするのか。詳細不明。

pi@raspberrypi:~ $ mount
/dev/sda2 on / type ext4 (rw,noatime,data=ordered)
devtmpfs on /dev type devtmpfs (rw,relatime,size=378760k,nr_inodes=94690,mode=755)
sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,relatime)
proc on /proc type proc (rw,relatime)
tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev)
devpts on /dev/pts type devpts (rw,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000)
tmpfs on /run type tmpfs (rw,nosuid,nodev,mode=755)
tmpfs on /run/lock type tmpfs (rw,nosuid,nodev,noexec,relatime,size=5120k)
tmpfs on /sys/fs/cgroup type tmpfs (ro,nosuid,nodev,noexec,mode=755)
cgroup on /sys/fs/cgroup/systemd type cgroup (rw,nosuid,nodev,noexec,relatime,xattr,release_agent=/lib/systemd/systemd-cgroups-agent,name=systemd)
cgroup on /sys/fs/cgroup/net_cls type cgroup (rw,nosuid,nodev,noexec,relatime,net_cls)
cgroup on /sys/fs/cgroup/blkio type cgroup (rw,nosuid,nodev,noexec,relatime,blkio)
cgroup on /sys/fs/cgroup/cpu,cpuacct type cgroup (rw,nosuid,nodev,noexec,relatime,cpu,cpuacct)
cgroup on /sys/fs/cgroup/devices type cgroup (rw,nosuid,nodev,noexec,relatime,devices)
cgroup on /sys/fs/cgroup/cpuset type cgroup (rw,nosuid,nodev,noexec,relatime,cpuset)
cgroup on /sys/fs/cgroup/freezer type cgroup (rw,nosuid,nodev,noexec,relatime,freezer)
systemd-1 on /proc/sys/fs/binfmt_misc type autofs (rw,relatime,fd=35,pgrp=1,timeout=0,minproto=5,maxproto=5,direct)
mqueue on /dev/mqueue type mqueue (rw,relatime)
debugfs on /sys/kernel/debug type debugfs (rw,relatime)
sunrpc on /run/rpc_pipefs type rpc_pipefs (rw,relatime)
configfs on /sys/kernel/config type configfs (rw,relatime)
tmpfs on /tmp type tmpfs (rw,noatime,size=512000k)
tmpfs on /var/log type tmpfs (rw,noatime,size=32768k,mode=755)
tmpfs on /home/pi/.cache/chromium/Default type tmpfs (rw,noatime,size=786432k)
tmpfs on /home/pi/.cache/lxsession/LXDE-pi type tmpfs (rw,noatime,size=1024k)
tmpfs on /var/tmp type tmpfs (rw,noatime,size=16384k)
/dev/sda1 on /boot type vfat (rw,relatime,fmask=0022,dmask=0022,codepage=437,iocharset=ascii,shortname=mixed,errors=remount-ro)
tmpfs on /run/user/1000 type tmpfs (rw,nosuid,nodev,relatime,size=76672k,mode=700,uid=1000,gid=1000)
fusectl on /sys/fs/fuse/connections type fusectl (rw,relatime)
gvfsd-fuse on /run/user/1000/gvfs type fuse.gvfsd-fuse (rw,nosuid,nodev,relatime,user_id=1000,group_id=1000)
/dev/sdb2 on /media/pi/rootfs type ext4 (rw,nosuid,nodev,relatime,data=ordered,uhelper=udisks2)
/dev/sdb1 on /media/pi/boot type vfat (rw,nosuid,nodev,relatime,uid=1000,gid=1000,fmask=0022,dmask=0022,codepage=437,iocharset=ascii,shortname=mixed,showexec,utf8,flush,errors=remount-ro,uhelper=udisks2)
pi@raspberrypi:~ $ df -h
ファイルシス   サイズ  使用  残り 使用% マウント位置
/dev/root        917G  167G  713G   19% /
devtmpfs         370M     0  370M    0% /dev
tmpfs            375M   42M  333M   12% /dev/shm
tmpfs            375M   11M  365M    3% /run
tmpfs            5.0M  4.0K  5.0M    1% /run/lock
tmpfs            375M     0  375M    0% /sys/fs/cgroup
tmpfs            500M   16K  500M    1% /tmp
tmpfs             32M   32K   32M    1% /var/log
tmpfs            768M  5.1M  763M    1% /home/pi/.cache/chromium/Default
tmpfs            1.0M   16K 1008K    2% /home/pi/.cache/lxsession/LXDE-pi
tmpfs             16M     0   16M    0% /var/tmp
/dev/sda1         43M   22M   21M   52% /boot
tmpfs             75M     0   75M    0% /run/user/1000
/dev/sdb2        917G   17G  864G    2% /media/pi/rootfs
/dev/sdb1         43M   23M   21M   52% /media/pi/boot

 復旧対象ディスクをumountする。

umount /media/pi/boot
umount /media/pi/rootfs

sudo fsck -y /dev/sdb1
sudo fsck -y /dev/sdb2
$ fsck -y /dev/sdb2
fsck from util-linux 2.29.2
e2fsck 1.43.4 (31-Jan-2017)
fsck.ext2: 許可がありません while trying to open /dev/sdb2
You must have r/w access to the filesystem or be root

 sudoを付与して許可を与える。

$ sudo fsck -y /dev/sdb1
fsck from util-linux 2.29.2
fsck.fat 4.1 (2017-01-24)
/dev/sdb1: 176 files, 45081/87078 clusters
$ sudo fsck -y /dev/sdb2
fsck from util-linux 2.29.2
e2fsck 1.43.4 (31-Jan-2017)
rootfs: clean, 307994/60331392 files, 8077018/244178358 blocks

 念の為fフラグを付与してもう一度やる。

$ sudo fsck -fy /dev/sdb1 
fsck from util-linux 2.29.2
fsck.fat 4.1 (2017-01-24)
/dev/sdb1: 176 files, 45081/87078 clusters

$ sudo fsck -fy /dev/sdb1 fsck from util-linux 2.29.2 fsck.fat 4.1 (2017-01-24) /dev/sdb1: 176 files, 45081/87078 clusters




$ sudo fsck -fy /dev/sdb2 fsck from util-linux 2.29.2 e2fsck 1.43.4 (31-Jan-2017) Pass 1: Checking inodes, blocks, and sizes Inodes that were part of a corrupted orphan linked list found. Fix? yes

Inode 15842 was part of the orphaned inode list. FIXED. Inode 16006 was part of the orphaned inode list. FIXED. Inode 16007 was part of the orphaned inode list. FIXED. Inode 17338 was part of the orphaned inode list. FIXED. Inode 17339 was part of the orphaned inode list. FIXED. Inode 17341 was part of the orphaned inode list. FIXED. Inode 17342 was part of the orphaned inode list. FIXED. Inode 17343 was part of the orphaned inode list. FIXED. Inode 17346 was part of the orphaned inode list. FIXED. Inode 17347 was part of the orphaned inode list. FIXED. Inode 17348 was part of the orphaned inode list. FIXED. Inode 17349 was part of the orphaned inode list. FIXED. Inode 17351 was part of the orphaned inode list. FIXED. Inode 17352 was part of the orphaned inode list. FIXED. Inode 17354 was part of the orphaned inode list. FIXED. Inode 17355 was part of the orphaned inode list. FIXED. Inode 27163 was part of the orphaned inode list. FIXED. Inode 27164 was part of the orphaned inode list. FIXED. Inode 27167 was part of the orphaned inode list. FIXED. Inode 28083 was part of the orphaned inode list. FIXED. Inode 28113 was part of the orphaned inode list. FIXED. Inode 28115 was part of the orphaned inode list. FIXED. Inode 1685269 was part of the orphaned inode list. FIXED. Inode 1685270 was part of the orphaned inode list. FIXED. Pass 2: Checking directory structure Pass 3: Checking directory connectivity Pass 4: Checking reference counts Pass 5: Checking group summary information

rootfs: FILE SYSTEM WAS MODIFIED rootfs: 307994/60331392 files (0.4% non-contiguous), 8077018/244178358 blocks

 再び起動HDDとして接続し直しOS起動してChromiumを起動するも同様の症状。復旧せず。

 やはりOS再インストールしかないか。

# データ救出

* `/home/pi`をすべてコピー
    * 8.7GBもあるため断念

# 過去のクラッシュ歴

* [Raspbian強制終了でクラッシュ! fsckコマンドで修復を試みるもダメだった](http://ytyaru.hatenablog.com/entry/2019/02/02/000000)
* [ラズパイ延命措置のSSDが死んだ\(^o^)/](http://ytyaru.hatenablog.com/entry/2019/04/22/000000)
* [LinuxMintが壊れた\(^o^)/](http://ytyaru.hatenablog.com/entry/2017/05/27/000000)

# 対象環境

* Raspbierry pi 3 Model B+
* Raspbian stretch(9.0) 2018-06-27
* [Mono 5.16.0](http://ytyaru.hatenablog.com/entry/2020/01/17/000000)
* [MonoDevelop 7.6 build 711](http://ytyaru.hatenablog.com/entry/2020/01/19/000000)
* Eto.Forms 2.4.1 [拡張機能](http://ytyaru.hatenablog.com/entry/2020/01/23/000000), [NuGetパッケージ](http://ytyaru.hatenablog.com/entry/2020/01/21/000000)
* [.NET Core 2.2](http://ytyaru.hatenablog.com/entry/2020/02/08/000000), [MonoDevelop参照方法](http://ytyaru.hatenablog.com/entry/2020/02/09/000000)