Raspberry pi 4の電源問題

Raspberry Pi 3で最も多いトラブルは電源関係のトラブルみたいです。
Raspberry Pi 4ではUSB3.0ポートが使えるようになり消費電流も大きくなっているはずなのでさらに電源に気を使う必要があります。

私の場合も最初は環境の構築途中でハングアップすることが多かったので熱暴走を疑ってヒートシンクを取り付けたり色々と対策しました。

試行錯誤した後で、それは不安定な電源電圧によるものだったことに気が付きました。
上の写真で電源電圧が5.14VになっているのでOKと思っていましたがdmesgのログを見ると、Undervoltageの嵐!

Raspberry Piのコネクタに出ている5Vをテスターで測ると 4.74Vしかありませんでした。
4.7Vを切るとUnder voltageが表示されるそうなので、細かい電圧変動でたびたび4.7V以下になっているのでしょう。

最初は深く考えずに消費電流と電圧を調べるためにUSBに差し込む写真の電流電圧表示ユニットを使っていましたが、これを外してRaspberry piのコネクタで測ってみると4.94Vとなりました。

電流電圧表示ユニットの電圧降下が0.2Vあったようです。電源のところで5.15Vでしたから残りはケーブルとRaspberry pi内部のUSBコネクタから電源を取り込む部分の電圧降下でしょう。

試しにUSBケーブルを一番短くて太いものに変えると4.99Vになり、0.05V改善されました。USBケーブルの影響はあまり無いみたいです。

Amazonで買ったRaspberry Pi 専用電源なるものをテストすると、Raspberry Pi のコネクタで5.4Vとなりました。

Smraza Raspberry Pi 4 用USB-C 電源アダプター 5V 3A

ということは、USBコネクタ入力部の電圧損失を見越して5.5V以上の電圧を出していることになります。
反則のような気もしますが、内部では5.5V未満の電圧に収まっているし実際に回路で使う電圧は内部のレギュレータが作る3.3Vですからこれで良いのでしょう。

RaspberryPi 4BにSSDをインストール

RaspberryPi 4BはUSB3.0が使えるのでUSB接続のSSDで動かすと一桁以上のディスクアクセス速度の向上が見込めるそうです。

Raspberry Pi ストレージベンチマーク

Raspberry PiではまだUSBブートがサポートされていないので、SDカードをブート用のメディアだけに使ってUSB3.0に接続した外付けSSDでUbuntuを動かすことになります。
外付けSSDとの相性問題などで苦労する可能性もあるようですが、そんなに差があるのならとりあえずチャレンジしてみない訳にはいかないでしょう。

ということで、以下はラズベリーパイ4 をUSBポートにつないだSSDで使うための手順に沿って試した結果です。

参考にしたサイト: Raspberry PiをUSB(HDD)で起動させる

色々と試行錯誤しましたが、わかってしまえば手順は簡単です。

1.SSDに移したいシステムが入ったSDカードの中身をSSDにコピーする。

 参考にしたサイトではddコマンドを使っていますが、SDカードの中身をそのままSSDに移し替えることのできるツールを使えばOKです。
私はbalena etcherを使って保存したSDカードのイメージをSSDに書き込みました。

2.SSDの/etc/fstabを編集する

元のSDカードで起動しSSDドライブをUSBポートに接続してマウントし、SSDドライブの/etc/fstabをblkidコマンドで確認したSSDドライブのものに書き換える。
下は私のSSDの例です。

proc            /proc  proc    defaults          0       0
/dev/mmcblk0p1  /boot  vfat    defaults          0       2
/dev/sda2       /      ext4    defaults,noatime  0       1
/swap           swap   swap    defaults          0       0

※ procの行はなくても起動します、
 /swapの行も必要ありません、起動ログのワーニング対策で追加したものです。

3.SSDドライブのパーティションを拡張する

後からやっても良いですが、ここでSDカードのgparted(なければインストール)でやっておくと簡単です。ただし、gpartedはGUIプログラムなのでリモートデスクトップかHDMIで表示したウィンドウ上で使う必要があります。

4.fatでフォーマットしたSDカードを用意し、元のSDカードのfatにあるファイルをすべてコピーしてcmdline.txtが指定しているrootドライブをSDDに書き換える。

以上で、SDカードのシステムをUSB3.0に接続したSSDから起動できるようになります。
SDカードの中身をSSDに移すために、コピーツールを使えば万一失敗したときにバックアップしたSDカードのイメージでやり直せるので安心です。

 

Raspberry Pi 4の起動を速くする(続)

Raspberry Pi 4の起動を速くする で systemd-networkd-wait-online.service の待ち時間を設定してsshログインまでの時間を短縮しましたが、まだ少し引っかかっているように感じました。

$ dmesg コマンドで起動ログを見ると最後の方のメッセージ
new mount options do not match the existing superblock, will be ignored
の部分に問題があるように見えます。

    9.890837] [drm] No displays found. Consider forcing hotplug if HDMI is attached
[    9.890918] vc4-drm soc:gpu: bound fe600000.firmwarekms (ops vc4_fkms_ops [vc4])
[    9.891516] [drm] Initialized vc4 0.0.0 20140616 for soc:gpu on minor 1
[    9.891527] [drm] Supports vblank timestamp caching Rev 2 (21.10.2013).
[    9.891535] [drm] No driver support for vblank timestamp query.
[    9.891543] [drm] Setting vblank_disable_immediate to false because get_vblank_timestamp == NULL
[   10.077791] IPv6: ADDRCONF(NETDEV_UP): wlan0: link is not ready
[   10.077814] brcmfmac: power management disabled
[   14.660172] bcmgenet: Skipping UMAC reset
[   14.736631] bcmgenet fd580000.genet: configuring instance for external RGMII (no delay)
[   14.737627] IPv6: ADDRCONF(NETDEV_UP): eth0: link is not ready
[   15.477150] IPv6: ADDRCONF(NETDEV_CHANGE): wlan0: link becomes ready
[   15.744255] bcmgenet fd580000.genet eth0: Link is Down
[   35.592464] new mount options do not match the existing superblock, will be ignored
[   35.692189] fuse init (API version 7.27)
[   36.570560] squashfs: version 4.0 (2009/01/31) Phillip Lougher
[   50.370451] uart-pl011 fe201000.serial: no DMA platform data
[   51.510633] Bluetooth: Core ver 2.22
[   51.510703] NET: Registered protocol family 31
[   51.510707] Bluetooth: HCI device and connection manager initialized
[   51.510720] Bluetooth: HCI socket layer initialized
[   51.510727] Bluetooth: L2CAP socket layer initialized
[   51.510750] Bluetooth: SCO socket layer initialized
[   51.522036] Bluetooth: HCI UART driver ver 2.3
[   51.522046] Bluetooth: HCI UART protocol H4 registered
[   51.522092] Bluetooth: HCI UART protocol Three-wire (H5) registered
[   51.522233] Bluetooth: HCI UART protocol Broadcom registered
[   51.630262] Bluetooth: BNEP (Ethernet Emulation) ver 1.3
[   51.630269] Bluetooth: BNEP filters: protocol multicast
[   51.630280] Bluetooth: BNEP socket layer initialized
[   51.655868] cryptd: max_cpu_qlen set to 1000

色々と試行錯誤してみましたがこの件は解決しませんでした、&実害はないようなのでペンディングとします。

不要なサービスを止める

ログをみると使わないサービスがたくさん起動しているので、これらを止めることにします。

参考サイト : Linux-不要デーモンの停止-

現在のサービス状態一覧

pi4@pi:~$ systemctl list-unit-files -t service | grep enabled
accounts-daemon.service                    enabled        
anacron.service                            enabled        
apparmor.service                           enabled        
atd.service                                enabled        
autovt@.service                            enabled        
avahi-daemon.service                       enabled        
binfmt-support.service                     enabled        
blk-availability.service                   enabled        
bluetooth.service                          enabled        
cloud-config.service                       enabled        
cloud-final.service                        enabled        
cloud-init-local.service                   enabled        
cloud-init.service                         enabled        
console-setup.service                      enabled        
cron.service                               enabled        
cups-browsed.service                       enabled        
cups.service                               enabled        
dbus-fi.w1.wpa_supplicant1.service         enabled        
dbus-org.bluez.service                     enabled        
dbus-org.freedesktop.Avahi.service         enabled        
dbus-org.freedesktop.ModemManager1.service enabled        
dbus-org.freedesktop.resolve1.service      enabled        
ebtables.service                           enabled        
getty@.service                             enabled        
haveged.service                            enabled        
irqbalance.service                         enabled        
iscsi.service                              enabled        
kerneloops.service                         enabled        
keyboard-setup.service                     enabled        
lm-sensors.service                         enabled        
lvm2-monitor.service                       enabled        
lxcfs.service                              enabled        
lxd-containers.service                     enabled        
ModemManager.service                       enabled        
networkd-dispatcher.service                enabled        
networking.service                         enabled        
ondemand.service                           enabled        
open-iscsi.service                         enabled        
openvpn.service                            enabled        
pollinate.service                          enabled        
pppd-dns.service                           enabled        
rc-local.service                           enabled-runtime
rc.local.service                           enabled-runtime
rsync.service                              enabled        
rsyslog.service                            enabled        
setvtrgb.service                           enabled        
snapd.autoimport.service                   enabled        
snapd.core-fixup.service                   enabled        
snapd.seeded.service                       enabled        
snapd.service                              enabled        
snapd.system-shutdown.service              enabled        
spacenavd.service                          enabled        
spice-vdagent.service                      enabled        
spice-vdagentd.service                     enabled        
ssh.service                                enabled        
sshd.service                               enabled        
syslog.service                             enabled        
systemd-fsck-root.service                  enabled-runtime
systemd-networkd-wait-online.service       enabled        
systemd-networkd.service                   enabled        
systemd-resolved.service                   enabled        
systemd-timesyncd.service                  enabled        
udisks2.service                            enabled        
ufw.service                                enabled        
unattended-upgrades.service                enabled        
whoopsie.service                           enabled        
wpa_supplicant.service                     enabled        
xrdp-sesman.service                        enabled        
xrdp.service                               enabled     

*をつけたサービスを停止しました。
停止のしかた
$ systemctl disable xxxx.servie

pi4@pi:~$ systemctl list-unit-files -t service | grep enabled
accounts-daemon.service                    enabled        
anacron.service                            enabled        
apparmor.service                           enabled        
atd.service                                enabled        
autovt@.service                            enabled        
* avahi-daemon.service                       enabled        
binfmt-support.service                     enabled        
blk-availability.service                   enabled        
bluetooth.service                          enabled        
*cloud-config.service                       enabled        
*cloud-final.service                        enabled        
*cloud-init-local.service                   enabled        
*cloud-init.service                         enabled        
console-setup.service                      enabled        
cron.service                               enabled        
cups-browsed.service                       enabled        
*cups.service                               enabled        
dbus-fi.w1.wpa_supplicant1.service         enabled        
dbus-org.bluez.service                     enabled        
dbus-org.freedesktop.Avahi.service         enabled        
dbus-org.freedesktop.ModemManager1.service enabled        
dbus-org.freedesktop.resolve1.service      enabled        
ebtables.service                           enabled        
getty@.service                             enabled        
haveged.service                            enabled        
irqbalance.service                         enabled        
iscsi.service                              enabled        
kerneloops.service                         enabled        
keyboard-setup.service                     enabled        
lm-sensors.service                         enabled        
lvm2-monitor.service                       enabled        
lxcfs.service                              enabled        
lxd-containers.service                     enabled        
*ModemManager.service                       enabled        
networkd-dispatcher.service                enabled        
networking.service                         enabled        
ondemand.service                           enabled        
open-iscsi.service                         enabled        
openvpn.service                            enabled        
pollinate.service                          enabled        
pppd-dns.service                           enabled        
rc-local.service                           enabled-runtime
rc.local.service                           enabled-runtime
*rsync.service                              enabled        
rsyslog.service                            enabled        
setvtrgb.service                           enabled        
snapd.autoimport.service                   enabled        
snapd.core-fixup.service                   enabled        
snapd.seeded.service                       enabled        
snapd.service                              enabled        
snapd.system-shutdown.service              enabled        
spacenavd.service                          enabled        
spice-vdagent.service                      enabled        
spice-vdagentd.service                     enabled        
ssh.service                                enabled        
sshd.service                               enabled        
syslog.service                             enabled        
systemd-fsck-root.service                  enabled-runtime
systemd-networkd-wait-online.service       enabled        
systemd-networkd.service                   enabled        
systemd-resolved.service                   enabled        
systemd-timesyncd.service                  enabled        
udisks2.service                            enabled        
ufw.service                                enabled        
unattended-upgrades.service                enabled        
whoopsie.service                           enabled        
wpa_supplicant.service                     enabled        
xrdp-sesman.service                        enabled        
xrdp.service                               enabled     

結果、起動が少し速くなりました
new mount options do not match the existing superblock, will be ignoredの件は起動の邪魔をしていなかったみたいです。

[    8.583358] bcm2835-codec bcm2835-codec: Loaded V4L2 isp
[    8.984497] cfg80211: Loading compiled-in X.509 certificates for regulatory database
[    9.037305] [drm] Initialized v3d 1.0.0 20180419 for fec00000.v3d on minor 0
[    9.049137] cfg80211: Loaded X.509 cert 'sforshee: 00b28ddf47aef9cea7'
[    9.116611] sd 0:0:0:0: Attached scsi generic sg0 type 0
[    9.142182] random: crng init done
[    9.142194] random: 7 urandom warning(s) missed due to ratelimiting
[    9.160326] brcmfmac: F1 signature read @0x18000000=0x15264345
[    9.169534] brcmfmac: brcmf_fw_alloc_request: using brcm/brcmfmac43455-sdio for chip BCM4345/6
[    9.375735] snd_bcm2835: module is from the staging directory, the quality is unknown, you have been warned.
[    9.389633] usbcore: registered new interface driver brcmfmac
[    9.392982] brcmfmac: brcmf_fw_alloc_request: using brcm/brcmfmac43455-sdio for chip BCM4345/6
[    9.406436] brcmfmac: brcmf_c_preinit_dcmds: Firmware: BCM4345/6 wl0: Feb 27 2018 03:15:32 version 7.45.154 (r684107 CY) FWID 01-4fbe0b04
[    9.432268] bcm2835_audio soc:audio: card created with 8 channels
[    9.609735] [drm] No displays found. Consider forcing hotplug if HDMI is attached
[    9.609821] vc4-drm soc:gpu: bound fe600000.firmwarekms (ops vc4_fkms_ops [vc4])
[    9.610929] [drm] Initialized vc4 0.0.0 20140616 for soc:gpu on minor 1
[    9.610941] [drm] Supports vblank timestamp caching Rev 2 (21.10.2013).
[    9.610950] [drm] No driver support for vblank timestamp query.
[    9.610958] [drm] Setting vblank_disable_immediate to false because get_vblank_timestamp == NULL
[    9.751937] Adding 8388604k swap on /swap.  Priority:-2 extents:9 across:8929280k FS
[    9.809645] IPv6: ADDRCONF(NETDEV_UP): wlan0: link is not ready
[    9.809727] brcmfmac: power management disabled
[   10.490937] bcmgenet: Skipping UMAC reset
[   10.564792] bcmgenet fd580000.genet: configuring instance for external RGMII (no delay)
[   10.565811] IPv6: ADDRCONF(NETDEV_UP): eth0: link is not ready
[   10.738161] new mount options do not match the existing superblock, will be ignored
[   10.799728] fuse init (API version 7.27)
[   11.584242] bcmgenet fd580000.genet eth0: Link is Down
[   12.186645] squashfs: version 4.0 (2009/01/31) Phillip Lougher
[   15.256928] IPv6: ADDRCONF(NETDEV_CHANGE): wlan0: link becomes ready
[   25.619461] uart-pl011 fe201000.serial: no DMA platform data
[   26.754836] Bluetooth: Core ver 2.22
[   26.754887] NET: Registered protocol family 31
[   26.754891] Bluetooth: HCI device and connection manager initialized
[   26.754909] Bluetooth: HCI socket layer initialized
[   26.754916] Bluetooth: L2CAP socket layer initialized
[   26.754936] Bluetooth: SCO socket layer initialized
[   26.764134] Bluetooth: HCI UART driver ver 2.3
[   26.764151] Bluetooth: HCI UART protocol H4 registered
[   26.764232] Bluetooth: HCI UART protocol Three-wire (H5) registered
[   26.764385] Bluetooth: HCI UART protocol Broadcom registered