背景
小型PCの LIVA Z (N4200) を2018年2月頃に購入して8年近く使い続けてきました。
常時稼働ではなく普段はスリープ状態で、たまに必要になった時に起動して少しだけ作業して、またスリープするという感じで使ってきました。時期によっては一ヶ月以上冬眠していることもあり、8年のうちで稼働していたのは50分の1以下くらいの時間かもしれません。
約2年前に、本体とは別に買って取り付けて使っていたM.2タイプのSSDの容量が逼迫してきたので、512GBのSSDに換装しました。当時の記録はかなり紆余曲折していますが、以下の2つの記事に記載しています。
これらの記事を書いた後に、SATAタイプの512GB SSDを買って(その前に買ったPCIeは接続規格が合わなかったので...)、そこに作ったブート用パーティション(EFIシステムパーティション)とルートパーティションにデータをコピーして、ようやく以下のようにSSDを筐体に収めることができました。
写真に書かれているeMMCという32GBのストレージは、購入時に最初からあったものです。最初はここにストレージが全て格納されていたのですが、32GBでは足りなさ過ぎるので、最終的にOSも含めて全部512GBのSSDに移したわけです。なので現状、eMMCのストレージは空っぽで、OSを起動した際にもどこにもマウントされず、使われません。
eMMCは不要なので取り外せばよさそうですが、このストレージはマザーボード内に直付けされているので、残念ながら取り外せません。たとえるならば、「除去できない盲腸」みたいなものでしょうか。
動作が重い...
たまに他のPCからSSH経由でLIVA Zにログインしてコマンド操作するのですが、時折コマンドを打ってレスポンスが返ってくるのに2,30秒も掛かります。メチャクチャ重い...。スペックがショぼくてバックグラウンドで動いている何かのサービスがCPUをギリギリまで使っているのかなと思ったのですが、怪しいプロセスは見つかりません。メモリも余裕があります。
だとすると、重い原因はストレージなのでしょうか。だけど使っているディスクは2年前に買い替えたSSDで、たまにしか稼働してないからまだ寿命を迎えるには早そう。取り外せないeMMCはマウントしてないし、筐体には入っているけど何も悪さはしないはずです。
重い原因はeMMCだった
ChatGPTと対話して調べていったら、 何と操作が重くなる原因は劣化したeMMCである ことがわかりました。
以下、その根拠を備忘で書いておきます。
根拠1:eMMCがデバイスとして認識されている
以下の lsblk コマンドを実行すると、eMMC のデバイスに相当する mmcblk0 が出力されました。
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sda 8:0 0 476.9G 0 disk
├─sda1 8:1 0 511M 0 part /boot/efi
└─sda2 8:2 0 476.4G 0 part /var/lib/...
mmcblk0 179:0 0 29.1G 0 disk
├─mmcblk0p1
│ 179:1 0 25.3G 0 part
└─mmcblk0p3
179:3 0 3.8G 0 part
mmcblk0boot0
179:256 0 4M 1 disk
mmcblk0boot1
179:512 0 4M 1 disk
たとえマウントしていなくても、OSではeMMCがデバイスとして認識されているということです。
根拠2:eMMCデバイスの応答が遅い
ioping というツールをインストールします。
sudo apt install -y ioping
まずは、ルートファイルシステム / の応答を確認します。
$ sudo ioping -c 10 /
4 KiB <<< / (ext4 /dev/sda2 467.9 GiB): request=1 time=216.5 us (warmup)
4 KiB <<< / (ext4 /dev/sda2 467.9 GiB): request=2 time=903.6 us
4 KiB <<< / (ext4 /dev/sda2 467.9 GiB): request=3 time=279.7 us
4 KiB <<< / (ext4 /dev/sda2 467.9 GiB): request=4 time=937.9 us
4 KiB <<< / (ext4 /dev/sda2 467.9 GiB): request=5 time=353.6 us
4 KiB <<< / (ext4 /dev/sda2 467.9 GiB): request=6 time=930.7 us
4 KiB <<< / (ext4 /dev/sda2 467.9 GiB): request=7 time=315.6 us
4 KiB <<< / (ext4 /dev/sda2 467.9 GiB): request=8 time=836.4 us
4 KiB <<< / (ext4 /dev/sda2 467.9 GiB): request=9 time=938.8 us
4 KiB <<< / (ext4 /dev/sda2 467.9 GiB): request=10 time=878.4 us
--- / (ext4 /dev/sda2 467.9 GiB) ioping statistics ---
9 requests completed in 6.37 ms, 36 KiB read, 1.41 k iops, 5.51 MiB/s
generated 10 requests in 9.00 s, 40 KiB, 1 iops, 4.44 KiB/s
min/avg/max/mdev = 279.7 us / 708.3 us / 938.8 us / 279.4 us
平均 708.3 us の応答でした。
続いて、eMMCのデバイス /dev/mmcblk0 の応答速度を確認します。
$ sudo ioping -c 10 /dev/mmcblk0
4 KiB <<< /dev/mmcblk0 (block device 29.1 GiB): request=1 time=30.4 ms (warmup)
4 KiB <<< /dev/mmcblk0 (block device 29.1 GiB): request=2 time=34.1 ms
4 KiB <<< /dev/mmcblk0 (block device 29.1 GiB): request=3 time=30.0 ms
4 KiB <<< /dev/mmcblk0 (block device 29.1 GiB): request=4 time=30.9 ms
4 KiB <<< /dev/mmcblk0 (block device 29.1 GiB): request=5 time=30.1 ms
4 KiB <<< /dev/mmcblk0 (block device 29.1 GiB): request=6 time=30.2 ms
4 KiB <<< /dev/mmcblk0 (block device 29.1 GiB): request=7 time=29.9 ms
4 KiB <<< /dev/mmcblk0 (block device 29.1 GiB): request=8 time=34.2 ms
4 KiB <<< /dev/mmcblk0 (block device 29.1 GiB): request=9 time=29.9 ms
4 KiB <<< /dev/mmcblk0 (block device 29.1 GiB): request=10 time=30.2 ms
--- /dev/mmcblk0 (block device 29.1 GiB) ioping statistics ---
9 requests completed in 279.5 ms, 36 KiB read, 32 iops, 128.8 KiB/s
generated 10 requests in 9.03 s, 40 KiB, 1 iops, 4.43 KiB/s
min/avg/max/mdev = 29.9 ms / 31.1 ms / 34.2 ms / 1.67 ms
平均 31.1 ms で、ルートボリュームと比べたら30倍以上も遅いですね。
ChatGPTの回答ですが、「これはHDDより遅いレベルで、本来のeMMCではありえない遅さ。正常なら 0.1〜0.5ms 程度」だそうです。
根拠3:eMMCデバイスへのパーティション読み直しが何回も起きている
dmesgコマンドで、カーネルが出力するメッセージを確認します。
$ sudo dmesg | grep -i mmc
[ 0.309499] PCI: MMCONFIG for domain 0000 [bus 00-ff] at [mem 0xe0000000-0xefffffff] (base 0xe0000000)
[ 0.309499] PCI: MMCONFIG at [mem 0xe0000000-0xefffffff] reserved in E820
[ 2.835797] mmc0: SDHCI controller on PCI [0000:00:1c.0] using ADMA 64-bit
[ 3.125383] mmc0: new HS400 MMC card at address 0001
[ 3.325996] mmcblk0: mmc0:0001 DF4032 29.1 GiB
[ 3.363291] mmcblk0: p1 p3
[ 3.363766] mmcblk0boot0: mmc0:0001 DF4032 4.00 MiB
[ 3.364512] mmcblk0boot1: mmc0:0001 DF4032 4.00 MiB
[ 3.365414] mmcblk0rpmb: mmc0:0001 DF4032 4.00 MiB, chardev (242:0)
[ 95.610759] mmcblk0: p1 p3
[40405.220273] mmcblk0: p1 p3
[52286.762352] mmcblk0: p1 p3
[60144.609498] mmcblk0: p1 p3
[77737.196052] mmcblk0: p1 p3
[105041.390975] mmcblk0: p1 p3
[109582.939102] mmcblk0: p1 p3
[111559.572598] mmcblk0: p1 p3
起動後に、mmcblk0: p1 p3 というメッセージが何回も出ているのがわかります。これは、
- eMMCデバイスの リトライ / リセット / 再初期化
- 読み込みエラー → 自動で再読み込み が発生
を意味しており、eMMCが劣化し始めた時の症状のようです。
対応策:BIOS画面で、eMMCを完全に無効化する
LIVA Zをシャットダウンし、起動時にDeleteボタン連打でBIOS画面に移り、以下のように設定してくことで解決しました。
"eMMC Configurtation" で Enter
"eMMC Support" が "有効" になっている状態。
これを、無効化する。
この設定を保存して再起動すると、eMMCがデバイスとして認識されなくなり、操作が重くなることもなくなりました。



