TOC
使い分けの方針転換
このblogではこれまで散々Orange PiやRaspberry Piを筆頭としたSBC(シングルボードコンピューター)を使って日常を豊かにする方策をとってきましたが、色々なことがありSBC一辺倒はやめることにしました。
SBCを使い続ける上で具体的なひっかかりポイント
RAMの増減を買った後にできない
Apple Silicon以降のMacや最近のノートPCにも同じ傾向はありますが、SBCはRAMはDIMMスロットではなくボードに実装済みなので、後から使い方に合わせて増やしたり減らしたりすることができません。
RAMの値段が上がってしまった上にここ2年くらいに発売されたSBCを見ると32GBのものは物凄く高価になってしまったので、ここが引っかかります。
ミニPCだと最大RAMが64GBのものがあり、それを選ぶことで数年間のRAMの不足は避けられるというのがSBC離れの要因の一つです。
RAMの種類は要確認(最重要)
ミニPCの場合、RAMをDIMMスロットで増設できると書いたところですが、見境なくあまりに古いものを選んだり、新しいものを選んだ場合に手持ちのRAMをつかいまわせないといったばあいがあります。DDR3/DDR4/DDR5のSO-DIMMの世代を確認しましょう。
Ubuntuのサポートがやっぱり不安定(ボードごと)
SBCを使い続けていく上で、ネックになるのがOSのサポートです。Raspberry Piの場合数年単位でのサポートが期待できますが、それ以外のARMボードは今後もサポートが期待できなさそうというところです。例外はQualcommのボードです。ARMにこだわらなければRISC-Vのボードもサポートされていましたが、Ubuntu26.04からはRVA23アーキテクチャがサポートされることになりました。執筆時点ではRVA23アーキテクチャのSoCが搭載されたコンシューマー製品はありません。
Install Ubuntu on Qualcomm IoT Platforms | Ubuntu
ミニPCの場合、アーキテクチャは枯れ枯れのamd64、Ubuntuのサポートも数年は終わらないでしょう。
Linux上の一般的なソフトウェアのサポートも、macOSがメインのソフトウェアの場合はドロップしていく可能性がありますが、それ以外では今の所アーキテクチャごと外されるリスクは最も少ないと考えられます。
ちゃんと使おうとするとケースが存在しない場合がほとんど
SBCを家でサーバーとして使う場合、ファンをSoCの上に付けてエアフローを確保、ストレージはSSDを乗せることになるでしょう(UFSモジュールを使うとかならその限りではありませんが)。電源はPoEボードから引っ張ってきたりするかもしれません。
問題はそうした構成をとった場合に、市販のケースが使えない率が高まることです。MicroSD起動の低速な状態で運用をする時代は終わっていると思うので、このジレンマが発生しました。贅沢な悩みですね。
でもSBCっていいよな・・・と思うところもあり
消費電力が低い
元々ARMを積んだCPU自体が消費電力は少なく、RK3588の最低動作クロックは408MHzです。
USB-PDから電源を取れる場合が多い
でかいACアダプターが必要ないというのは専有場所を考える上でメリットがあり、経年劣化等で故障しても共通規格なので代替品を用意しやすいというメリットも大きい。
なので、5V5Aという非常識なPower Ruleを採用したRaspberry Pi 5は全然良くないですね。
おうちサーバー候補足り得るミニPC
HP EliteDesk DMシリーズ
CPU世代と対応メモリは確認しましょう。この世代最初のHP EliteDesk 800 G1 DMは4世代CoreでDDR3です。
また、このシリーズは伝統的に映像出力がDisplayPortです。
私は今回これ(Core i3-8100T)を買いました。DDR4 SODIMMでRAMの上限は32GB(16GBx2)です。法人販売されたものはHDDオプションが多いみたいでHDDマウンタがあるみたいですが私が買ったものにはなく、代わりにM.2スロットが見えています。RAMは元から8GB1枚刺さっていたところに8GB追加して16GBです。
HP EliteDesk 800 G4 DM 製品詳細・スペック - デスクトップ・PC通販 | 日本HP
Lenovo ThinkCentre M Tinyシリーズ
全て見たわけではありませんが、映像出力はHDMIみたいなので汎用性は高いかもしれません。最大RAM容量は古いものは少ないかも。
電源はUSB Type-Aみたいな見た目のアレなので、トリガーケーブルを使えばUSB-PDから引っ張れそうなのがポイント高いです。
Mac Mini(2018以前)
2018年(と2020Early)はRAM上限が64GBで入手できるなら十分な価値があります。おそらく他のミニPCと比べても出回っている台数は多いので、入手性も問題ありません。
難点は2018モデルはSSDを交換できないので、寿命を延命したい場合は外付けSSD運用になるかも。SSDを内蔵可能なドッキングステーションを使えばスッキリおさまります。
2014モデルはRAMがDDR3です。RAM上限は16GB。
Ubuntu 26.04 LTS Serverで環境構築をする
というわけで早速Ubuntuをインストールして使えるようにするんですが、Ubuntu Serverを使うのが初めてで、USBメモリに焼いてディスプレイに接続、キーボードに接続してインストールしました。マウスは不要です。
新アーキテクチャamd64v3
Ubuntu 25.10で追加されたamd64v3というアーキテクチャがあります。日本語の情報はびっくりするくらい少ないですが、amd64+追加命令対応のCPU向けのアーキテクチャで、具体的な対応CPUは4世代Coreと2015年以降発売のRyzenです。
LTSでこれが有効になるのは初めてなのでこれに後から切り替えました。ISOイメージは提供されないみたいなので、一番影響が少ないのはamd64のクリーンインストール直後の切り替えだと思います。
26.04のlive serverでインストールしようとしたらインストールが始まらなかったので24.04.4でインストール
ISOを焼いたUSBから起動して、インストール先のパーティションを選んでファイルコピーが始まるはずのところで止まってしまったので、24.04.4のISOをUSBに焼き直してインストールして事なきを得ました。
インストール後に26.04に変更
# do-release-upgrade -d
Ubuntu 26.04 LTS Serverになってからやったこと
CPUがamd64v3対応であることを確認
$ /lib64/ld-linux-x86-64.so.2 --help
Usage: /lib64/ld-linux-x86-64.so.2 [OPTION]... EXECUTABLE-FILE [ARGS-FOR-PROGRAM...]
You have invoked 'ld.so', the program interpreter for dynamically-linked
ELF programs. Usually, the program interpreter is invoked automatically
when a dynamically-linked executable is started.
You may invoke the program interpreter program directly from the command
line to load and run an ELF executable file; this is like executing that
file itself, but always uses the program interpreter you invoked,
instead of the program interpreter specified in the executable file you
run. Invoking the program interpreter directly provides access to
additional diagnostics, and changing the dynamic linker behavior without
setting environment variables (which would be inherited by subprocesses).
--list list all dependencies and how they are resolved
--verify verify that given object really is a dynamically linked
object we can handle
--inhibit-cache Do not use /etc/ld.so.cache
--library-path PATH use given PATH instead of content of the environment
variable LD_LIBRARY_PATH
--glibc-hwcaps-prepend LIST
search glibc-hwcaps subdirectories in LIST
--glibc-hwcaps-mask LIST
only search built-in subdirectories if in LIST
--inhibit-rpath LIST ignore RUNPATH and RPATH information in object names
in LIST
--audit LIST use objects named in LIST as auditors
--preload LIST preload objects named in LIST
--argv0 STRING set argv[0] to STRING before running
--list-tunables list all tunables with minimum and maximum values
--list-diagnostics list diagnostics information
--help display this help and exit
--version output version information and exit
This program interpreter self-identifies as: /lib64/ld-linux-x86-64.so.2
Shared library search path:
(libraries located via /etc/ld.so.cache)
/lib/x86_64-linux-gnu (system search path)
/usr/lib/x86_64-linux-gnu (system search path)
/lib (system search path)
/usr/lib (system search path)
Subdirectories of glibc-hwcaps directories, in priority order:
x86-64-v4
x86-64-v3 (supported, searched)
x86-64-v2 (supported, searched)
最後に「x86-64-v3」があれば対象です。
インストールするパッケージがamd64v3になるようにする
echo 'APT::Architecture-Variants "amd64v3";' | sudo tee /etc/apt/apt.conf.d/99amd64v3
# apt-get update
# apt-get upgrade
省電力設定
基本的に常時稼動で運用するので、消費電力は抑えます。性能はそこまで必要としないので、削れるなら削ります。
govenerをondemandかuserspaceにする
LinuxのCPUの省電力はCPU govenerにおまかせです。ondemandかuserspaceを使います。
$ cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_governors
performance powersave
$ cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor
powersave
powersave
powersave
powersave
はいクソー。なんでこんなことになっているのか洗いざらい調べることに。
# apt-get install cpufrequtils
# cpufreq-info
cpufrequtils 008: cpufreq-info (C) Dominik Brodowski 2004-2009
Report errors and bugs to cpufreq@vger.kernel.org, please.
analyzing CPU 0:
driver: intel_pstate
CPUs which run at the same hardware frequency: 0
CPUs which need to have their frequency coordinated by software: 0
maximum transition latency: 4294.55 ms.
hardware limits: 800 MHz - 3.10 GHz
available cpufreq governors: performance, powersave
current policy: frequency should be within 800 MHz and 3.10 GHz.
The governor "powersave" may decide which speed to use
within this range.
current CPU frequency is 1.10 GHz.
CPU 周波数スケーリング - ArchWikiよりintel_pstateの説明。
このドライバは、Intel Core プロセッサ (Sandy Bridge 及びそれより新しい CPU) 向けの内部ガバナーのあるスケーリングドライバを実装します。対象のプロセッサにおいては下記の古いドライバの代わりにこれが自動的に使用されます。このドライバは他のドライバよりも優先度が高く、モジュールではなくビルトインとなっています。
intel_pstateは、古い CPU においてintel_cpufreq経由で “passive mode” で実行される場合があります。このドライバを使用していて問題が発生する場合は、intel_pstate=disableをカーネルラインに追加してacpi_cpufreqドライバに戻してください。
performanceとpowersaveしか使えないintel_pstateなぞお呼びでないので、お亡くなりになってもらいます。
How do I force my CPU’s scaling governor to performance immediately at boot? : r/linuxquestions
/etc/default/grubを変更
@@ -7,7 +7,7 @@
GRUB_TIMEOUT_STYLE=hidden
GRUB_TIMEOUT=0
GRUB_DISTRIBUTOR=`( . /etc/os-release && echo ${NAME} )`
-GRUB_CMDLINE_LINUX_DEFAULT=""
+GRUB_CMDLINE_LINUX_DEFAULT="intel_pstate=disable"
GRUB_CMDLINE_LINUX=""
# If your computer has multiple operating systems installed, then you
# update-grub
Sourcing file `/etc/default/grub'
Sourcing file `/etc/default/grub.d/kdump-tools.cfg'
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-7.0.0-10-generic
Found initrd image: /boot/initrd.img-7.0.0-10-generic
Found linux image: /boot/vmlinuz-6.8.0-106-generic
Found initrd image: /boot/initrd.img-6.8.0-106-generic
Warning: os-prober will not be executed to detect other bootable partitions.
Systems on them will not be added to the GRUB boot configuration.
Check GRUB_DISABLE_OS_PROBER documentation entry.
Adding boot menu entry for UEFI Firmware Settings ...
done
再起動した後に
$ cpupower frequency-info
analyzing CPU 0:
driver: acpi-cpufreq
CPUs which run at the same hardware frequency: 0
CPUs which need to have their frequency coordinated by software: 0
maximum transition latency: 10.0 us
hardware limits: 800 MHz - 3.00 GHz
available frequency steps: 3.00 GHz, 3.00 GHz, 2.90 GHz, 2.80 GHz, 2.60 GHz, 2.40 GHz, 2.30 GHz, 2.10 GHz, 1.90 GHz, 1.80 GHz, 1.60 GHz, 1.50 GHz, 1.30 GHz, 1.10 GHz, 1000 MHz, 800 MHz
available cpufreq governors: conservative ondemand userspace powersave performance schedutil
current policy: frequency should be within 800 MHz and 3.00 GHz.
The governor "ondemand" may decide which speed to use
within this range.
current CPU frequency: Unable to call hardware
current CPU frequency: 3.10 GHz (asserted by call to kernel)
boost state support:
Supported: no
Active: no
という訳でgovenerがondemandになりました。めでたしめでたし。
TurboBoostを無効(書き残し)
黙認オーバークロックというIntelの不要機能であるTurboBoostですが、省電力運用では出番がないので無効になってもらいました。
実際には捨て去ったintel_pstateが提供する機能なので、govenerを変えた時に無効になったのですが作業順序的には先にやってしまったことと実際に無効になったことは確認したので、書き残します。
$ cat /sys/devices/system/cpu/intel_pstate/no_turbo
0
/sys/devices/system/cpu/intel_pstate/no_turboに1を書き込んでTurboBoostを無効にします。
この「起動時に特定のファイルに値を書き込む」という昔からあるけど実際にどうやるかマチマチな手順(/sysは起動時にsysfsをマウントしないとディレクトリが存在しないので反映できないやつ)、最新ではsystemd-tmpfilesを使うそうです。udevでもできるけど将来的にどうかわからんとCopilotが言っていました。
/etc/tmpfiles.d/disable-turboboost.confを以下の内容で作成します。
w /sys/devices/system/cpu/intel_pstate/no_turbo - - - - 1
再起動で反映されることを確認。
ちなみに、intel_pstateを無効にすると/sys/devices/system/cpu/intel_pstate/ディレクトリは生成されなくなります。
ディスプレイケーブルを抜くとSSHが頻繁に切断される
これが結構困りました。ディスプレイを繋いでいると問題ないんですが、なぜかディスプレイを抜くとしばらくしてリモートから接続しているSSHが止まる。Copilotに解決してもらいました。
dmesgに以下のログが残っており、i915のポーリングが暴走した結果NICのIRQが処理されずTCPがタイムアウトしているそうです。
workqueue: output_poll_execute hogged CPU for >10000us 4 times
workqueue: i915_hpd_poll_init_work [i915] hogged CPU for >10000us 4 times
[drm] Cannot find any crtc or sizes
i915モジュールの読み込みをさせないようにします。
/etc/modprobe.d/blacklist-i915.conf を以下の内容で作成。
blacklist i915
sudo update-initramfs -u
再起動で反映されます。
で、i915を読み込まなくする副作用はディスプレイケーブルを繋いだ場合の描画がVESAになるそうで、低解像度になるようです。仕方ないですね。
また、Copilotからは別のインパクトの少なそうな対応方法としてi915のHPDを無効化というのを提案されていました。結果的に使えなかったんですがKernelのバージョンによっては使えるらしいので書き残しておきます。
/etc/modprobe.d/disablehotplugdetect.confを以下の内容で作成します。
options i915 enable_hpd=0
この後update-initramfs -uと再起動は同じ手順です。
仮に/sys/module/i915/parameters/enable_hpdというファイルがある場合はこの方法が効くそうです。このファイルの設定値は
| 出力 | 意味 | |
|---|---|---|
| 0 | HPD 無効化されている(設定が反映されている) | |
| 1 | HPD が有効のまま(設定が効いていない) | |
| Y / N | カーネルバージョンによっては Y/N で表示される |
で、以下のコマンドを実行した場合に表示されるそうです。
$ modinfo i915 | grep hpd
私の環境では何も表示されませんでした。
システム日時の設定
# timedatectl set-timezone Asia/Tokyo
$ timedatectl
Local time: Wed 2026-04-01 19:12:41 JST
Universal time: Wed 2026-04-01 10:12:41 UTC
RTC time: Wed 2026-04-01 10:12:41
Time zone: Asia/Tokyo (JST, +0900)
System clock synchronized: yes
NTP service: active
RTC in local TZ: no
スポンサーリンク
comments powered by Disqus