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

 

Raspberry Pi 4の起動を速くする

ubuntu18.04をインストールしたRaspberry pi 4にsshでログイン出来るまでに2分あまりかかるのでその対策をした時のメモです。

状況:有線LANは外してwifiからログインしたいが、起動してからIPアドレスが認識できるまで2分間かかる。

dmesgコマンドでは原因がわからない

dmesgコマンドを使って起動時のログを表示してみましたが、それらしい原因をつかむことは出来ませんでした。

systemd-analyzeコマンドを見つけた

systemd-analyzeコマンドを使ってみると次の内容が表示されNetworkManager-wait-online.serviceが足を引っ張っているようです。
最後にsystemd-networkd-wait-online.serviceも起動しているので上のサービスを止めてみることにしました。

pi4@pi:~$ systemd-analyze blame
     2min 3.219s apt-daily.service
      2min 205ms systemd-networkd-wait-online.service
          7.348s cloud-init-local.service
          5.265s cloud-init.service
          2.928s lvm2-monitor.service
          2.884s dev-sda2.device
          2.445s cloud-config.service
          2.056s cloud-final.service
          1.473s udisks2.service
          1.205s networkd-dispatcher.service
          1.196s xrdp.service
          1.148s rc-local.service
           864ms ModemManager.service
           816ms snapd.service
           783ms NetworkManager.service
           682ms accounts-daemon.service
           650ms lxd-containers.service
           639ms alsa-restore.service
           600ms systemd-journal-flush.service
           593ms avahi-daemon.service
           567ms apport-autoreport.service
           564ms lm-sensors.service
           563ms systemd-udevd.service
           549ms systemd-timesyncd.service
           522ms systemd-logind.service
           520ms NetworkManager-wait-online.service
           456ms pppd-dns.service
           417ms rsyslog.service
           415ms systemd-remount-fs.service
           413ms keyboard-setup.service
           404ms systemd-udev-trigger.service
           271ms systemd-resolved.service
           268ms systemd-journald.service
           267ms lightdm.service
           260ms loadcpufreq.service
           241ms systemd-fsck@dev-disk-by\x2dlabel-system\x2dboot.service
           209ms networking.service
           186ms colord.service
           173ms ebtables.service
           172ms apport.service
           164ms ssh.service
           153ms polkit.service
           145ms snapd.seeded.service

Linux-不要デーモンの停止を参考にして

$sudo systemctl disable NetworkManager-wait-online.service

このサービスを止めてみた結果、wifi経由のIPアドレスは10秒以内に認識できるようになったもののsshでログイン出来るまでに、やっぱり2分間かかります。

となると、

2min 205ms systemd-networkd-wait-online.service

最後に表示されるこれが、待ち時間がタイムアウトしてsshが使えるようになったということなのでしょう。
検索してみるとこのサービスのタイムアウトはデフォルトで2minだそうなので、この推測があたっているようです。

ということで、systemd-networkd-wait-online.serviceのタイムアウト設定を変更する方法を探した結果、

/etc/systemd/system/network-online.target.wants/systemd-networkd-wait-online.service

で設定できそうなので、このファイルにTimeoutSec=15(最初はなかった)を追加してみました。

#  SPDX-License-Identifier: LGPL-2.1+
#
#  This file is part of systemd.
#
#  systemd is free software; you can redistribute it and/or modify it
#  under the terms of the GNU Lesser General Public License as published by
#  the Free Software Foundation; either version 2.1 of the License, or
#  (at your option) any later version.

[Unit]
Description=Wait for Network to be Configured
Documentation=man:systemd-networkd-wait-online.service(8)
DefaultDependencies=no
Conflicts=shutdown.target
Requires=systemd-networkd.service
After=systemd-networkd.service
Before=network-online.target shutdown.target

[Service]
Type=oneshot
TimeoutSec=15
ExecStart=/lib/systemd/systemd-networkd-wait-online
RemainAfterExit=yes

[Install]
WantedBy=network-online.targetさい

再起動してみた結果、15秒でsystemd-networkd-wait-online.serviceがタイムアウトするようになりました。

15.157s systemd-networkd-wait-online.service
 6.350s cloud-init-local.service
 5.293s cloud-init.service
 2.464s dev-sda2.device
 2.444s cloud-config.service
 2.422s lvm2-monitor.service
 2.104s cloud-final.service
 1.306s networkd-dispatcher.service
 1.204s xrdp.service
 1.191s rc-local.service
 1.165s snapd.service
 1.143s udisks2.service
  933ms ModemManager.service
  785ms apport-autoreport.service
  673ms lxd-containers.service
  537ms accounts-daemon.service
  431ms systemd-udev-trigger.service
  424ms lm-sensors.service
  417ms keyboard-setup.service
  352ms systemd-remount-fs.service
  332ms systemd-logind.service
  322ms systemd-journal-flush.service
  279ms loadcpufreq.service
  268ms polkit.service
  265ms lightdm.service
  265ms systemd-journald.service
  245ms wpa_supplicant.service
  243ms systemd-resolved.service
  243ms systemd-udevd.service
  210ms networking.service
  209ms systemd-timesyncd.service
  198ms rsyslog.service
  196ms systemd-fsck@dev-disk-by\x2dlabel-system\x2dboot.service
  191ms avahi-daemon.service
  172ms ebtables.service
  170ms apport.service
  167ms alsa-restore.service
  157ms colord.service
  155ms ssh.service
  133ms xrdp-sesman.service
  126ms user@1001.service
  122ms systemd-tmpfiles-setup.service
  112ms sddm.service

一件落着(^^)/