最近、ZFSのrootカスタム構成では、仮想ディスクにArch Linuxをインストールしました。これは、ArchとFreeBSDのそれぞれに別々のブートプールとルートプールを持つ複数のブート構成を管理するためにいくつかのスクリプトを使用するためです。現在、ZFS プール構成は VM で FreeBSD を使用して作成されます。次に、ArchがExt4パーティションにインストールされている別の仮想マシンにArch Linuxインストールを作成します。ブート/ルートZFS構成にArchをインストールし、Grubの一部の構成を実行した後、ZFSへのArchインストールが正常に起動します。
現在ZFSプールを持つ仮想ディスクは別の仮想マシンで実行されます。現在、Arch Linuxはこのマシンの仮想ディスクにインストールされている唯一のオペレーティングシステムです。これで、適切なGrub2設定で正常に起動します。しかし、シャットダウン中にループが発生することがわかりました。
[ 1561.324253] systemd-shutdown[1]: Sending SIGKILL to remaining processes...
[ 1561.336930] systemd-shutdown[1]: Unmounting file systems.
[ 1561.341650] [563]: Remounting '/var' read-only in with options 'noxattr,noacl'.
[ 1561.783555] [564]: Unmounting '/var'.
[ 1561.790194] [565]: Remounting '/usr' read-only in with options 'noxattr,noacl'.
[ 1561.796853] [566]: Remounting '/' read-only in with options 'noxattr,noacl'.
[ 1561.803420] systemd-shutdown[1]: All filesystems unmounted.
[ 1561.809423] systemd-shutdown[1]: Deactivating swaps.
[ 1561.813672] systemd-shutdown[1]: All swaps deactivated.
[ 1561.818688] systemd-shutdown[1]: Detaching loop devices.
[ 1561.824354] systemd-shutdown[1]: All loop devices detached.
[ 1561.829085] systemd-shutdown[1]: Stopping MD devices.
[ 1561.833346] systemd-shutdown[1]: All MD devices stopped.
[ 1561.837982] systemd-shutdown[1]: Detaching DM devices.
[ 1561.842299] systemd-shutdown[1]: All DM devices detached.
[ 1561.847501] systemd-shutdown[1]: All filesystems, swaps, loop devices, MD devices and DM devices detached.
[ 1561.856852] systemd-shutdown[1]: Successfully changed into root pivot.
[ 1561.863478] systemd-shutdown[1]: Returning to initrd...
[ 1562.306958] shutdown[1]: Syncing filesystems and block devices.
[ 1562.311377] shutdown[1]: Sending SIGTERM to remaining processes...
[ 1562.316903] shutdown[1]: Sending SIGKILL to remaining processes...
[ 1562.329374] shutdown[1]: Unmounting file systems.
[ 1562.334319] sd-remou[569]: Remounting '/' read-only in with options 'noxattr,noacl'.
[ 1562.346902] sd-umoun[570]: Unmounting '/oldroot/sys/kernel/config'.
[ 1562.354595] sd-umoun[571]: Unmounting '/oldroot/sys/fs/fuse/connections'.
[ 1562.361525] sd-umoun[572]: Unmounting '/oldroot/sys/kernel/tracing'.
[ 1562.368232] sd-umoun[573]: Unmounting '/oldroot/sys/kernel/debug'.
[ 1562.373715] sd-umoun[574]: Unmounting '/oldroot/dev/mqueue'.
[ 1562.380105] sd-umoun[575]: Unmounting '/oldroot/dev/hugepages'.
[ 1562.386843] sd-umoun[576]: Unmounting '/oldroot/sys/fs/bpf'.
[ 1562.391984] sd-umoun[577]: Unmounting '/oldroot/sys/fs/pstore'.
[ 1562.397417] sd-umoun[578]: Unmounting '/oldroot/sys/fs/cgroup'.
[ 1562.404234] audit: type=1334 audit(1635363440.667:81): prog-id=8 op=UNLOAD
[ 1562.410100] sd-umoun[579]: Unmounting '/oldroot/dev/pts'.
[ 1562.414579] audit: type=1334 audit(1635363440.667:82): prog-id=6 op=UNLOAD
[ 1562.420101] sd-umoun[580]: Unmounting '/oldroot/dev/shm'.
[ 1562.426852] sd-umoun[581]: Unmounting '/oldroot/sys/kernel/security'.
[ 1562.432165] sd-umoun[582]: Unmounting '/oldroot/usr'.
[ 1562.443869] sd-remou[583]: Remounting '/oldroot/run' read-only in with options 'noxattr,noacl'.
[ 1562.456905] sd-umoun[584]: Unmounting '/oldroot/run'.
[ 1562.461323] sd-umoun[585]: Unmounting '/oldroot'.
[ 1562.466800] sd-umoun[585]: Failed to unmount /oldroot: Device or resource busy
[ 1562.473458] sd-umoun[586]: Unmounting '/oldroot/dev'.
[ 1562.478395] sd-umoun[587]: Unmounting '/oldroot/sys'.
[ 1562.483288] sd-umoun[588]: Unmounting '/oldroot/proc'.
[ 1562.488082] sd-umoun[589]: Unmounting '/oldroot'.
[ 1562.493279] shutdown[1]: All filesystems unmounted.
[ 1562.498851] shutdown[1]: Deactivating swaps.
[ 1562.502456] shutdown[1]: All swaps deactivated.
[ 1562.506839] shutdown[1]: Detaching loop devices.
[ 1562.511505] shutdown[1]: All loop devices detached.
[ 1562.515404] shutdown[1]: Stopping MD devices.
[ 1562.520083] shutdown[1]: All MD devices stopped.
[ 1562.523666] shutdown[1]: Detaching DM devices.
[ 1562.527617] shutdown[1]: All DM devices detached.
[ 1562.531822] shutdown[1]: All filesystems, swaps, loop devices, MD devices and DM devices detached.
[ 1562.540145] shutdown[1]: Successfully changed into root pivot.
[ 1562.544940] shutdown[1]: Returning to initrd...
ZFSにArch Linuxをインストールするときにのみこの問題が発生しました。異なる VM インストールで同じ systemd、mkinitcpio、linux、および zfs-linux バージョンを使用し、Arch が Ext4 パーティションにある場合、そのシステムのシャットダウン中にそのようなループは発生しません。 ZFS設定のルートによるものかもしれませんか?
このループをもうデバッグする方法がわかりません。
私の推測では、これは2013年に導入されたようなmkinticpioのいくつかのsystemd-shutdownスクリプトと関連があるかもしれません(バフラー2013)。
そのサービスの主なコードはmkinitcpio-generate-shutdown-ramfs
当時導入されたようです - 抜粋/usr/lib/systemd/system/mkinitcpio-generate-shutdown-ramfs.service
[Service]
Type=oneshot
# /tmp could be umounted at this point
# use /run as temporary directory
Environment=TMPDIR=/run
ExecStart=/usr/bin/mkinitcpio -A sd-shutdown -k none -c /dev/null -d /run/initramfs
さらに、ファイルの内容は/usr/lib/initcpio/install/sd-shutdown
#!/bin/bash
build() {
add_binary /usr/lib/systemd/systemd-shutdown /shutdown
if type -P kexec >/dev/null; then
add_binary kexec
fi
}
help() {
cat <<HELPEOF
This hook adds systemd-shutdown to the initramfs. This is only
if the image is extracted to /run/initramfs before shutdown.
HELPEOF
}
# vim: set ft=sh ts=4 sw=4 et:
これが実際に仮想マシンのシャットダウンプロセスに入るかどうかはわかりません。システムが指定された多くの前提条件を満たしていない可能性があります。
mkinitcpio-generate-shutdown-ramfs
私はsystemdでサービスをブロックし、再度実行して再起動しようとしましたが、シャットダウンmkinitcpio -P
中でもまだそのループに入ります。
仮想マシンをインストールすると、システムは少なくともシステムが無限ループを開始するシャットダウンイベントが発生するまで使用できます。理想的には、Archの外に何かを取り付ける前に、またはシステム内部のハードドライブに挿入する前に、設定でこの問題を修正できたらと思います。
このメッセージがどのような結果をもたらすかわかりませんFailed to unmount /oldroot: Device or resource busy
。これはZFSインストールのルートに関連している可能性がありますか?しかし、それは単なる推測です。
私の観点からは、systemdはプロセスを終了します。コンソール出力でわかるように、initrdで実行されていますか?私は現時点ではデバッグが簡単に見えないと思います。
VM仮想ディスクの下のZFSプール構成で、Archの横にFreeBSDをインストールした後も、Archを使用してGrub構成を最新の状態に保つことができます。ただし、この問題がArchのシャットダウンループで解決できる場合は、VMのインストールまたは最終的にPCハードドライブ上のArchインストールを実行するデスクトップシステムとして維持できることを願っています。
このループをさらにデバッグする方法がわかりませんが、まだ見つからないシャットダウン中にループへのパッチがある可能性がありますか?
修正する
見つけました。ソースコードsystemd-shutdown の場合、Arch Linux で使用されるバージョンです。私の考えにはかなり簡単なコードのようです。 「oldroot」マウントポイントまたはsystemd-shutdownでどのようにマウント解除できるかについての詳細はあまりありません。
これはロギングによるものではないようです。起動後に実行されるワンタイムシステムサービスを設定してStorage=volatile
作成しました。これで、ファイルシステムが正常にアンマウントされ、再起動後もすべてのログデータが失われることはありません。/etc/systemd/journald.conf
/usr/bin/journalctl --flush
/var/
Failed to unmount /oldroot...
ただし、シャットダウン中にsystemd-shutdownからのメッセージと共にループが発生し続けます。壊れる副作用はありますか?