systemdコマンドを実行した際に、「System has not been booted with systemd as init system (PID 1). Can't operate.(システムがsystemdをinitシステムとして起動していません。操作できません)」と表示されることがあります。MiniTool Partition Wizardのこの記事では、問題の原因とその解決策をご紹介します。

システムがsystemdをinitシステムとして起動していない

「System has not been booted with systemd as init system (PID 1)」というエラーが表示されたと訴える人は多いです。ほとんどの場合、このエラーはLinuxシステムでsystemdコマンドを実行したときに発生します。

システムがsystemdをinitシステムとして起動していません

このエラーの原因は、Linuxシステムがinitシステムとしてsystemdを使用していないことにあります。ご存じの通り、Linuxシステムは以下のプロセスで起動します。

  • PCを起動すると、BIOSがアクティブになります。
  • BIOSはMBRを読み込んで、ブートローダーを見つけます。
  • ブートローダーはシステムカーネルをロードし、コンピューターのハードウェアリソースを管理し、ソフトウェアとハードウェアの間のインターフェースとして機能します。
  • カーネルはその後、システムの最初のプロセスであるinitプロセス(プロセスIDが1)をアクティブにします。これは、他のすべてのユーザープロセスの生成を担うものです。initは他のプロセスができないタスクを完了する、独特のプロセスです。
関連記事:Windows 11とLinuxをデュアルブートする方法

さて、initシステムとは何でしょうか?initシステムは、initプロセスの動作を定義・管理・制御します。コンピューターシステムが、ユーザーによって設定された動作モードにスムーズに入ることができるように、多数の独立した、あるいは関連する初期化タスクを整理し、実行する役割を担っています。

LinuxシステムにはSystem III、System V、Upstartなど、多くの初期化システムがありますが、2015年以降はほとんどのLinuxディストリビューションが従来の初期化システムに代わり、systemdを採用しています。systemdは、System Vとの下位互換性を持っています。

ただし、次の2つのケースでは、systemdはデフォルトで有効になりません。

  1. WSL(Windows Subsystem for Linux)でLinuxシステムを使用している
  2. initプロセス (/sbin/init) がスキップされている

関連記事:Windows 10にWindows Subsystem for Linux(WSL)をインストールする方法

解決策

「System has not been booted with systemd as init system」エラーを解決する方法を3つまとめました。同じ問題にお悩みの方は、これらを1つずつ試してみて下さい。

方法1: 同等のSysvinitコマンドを使用する

LinuxシステムをWSL経由で実行する場合、Linuxシステムはsystemdの代わりにSystem V initシステムを使用します。systemdコマンドを実行することはできませんが、同等のSysvinitコマンドを実行できます。

提示:
コマンド「ps -p 1 -o comm=」を使用すると、使用しているinitシステムが分かります。

この表が参考になるでしょう。

SystemdコマンドSysvinitコマンド
systemctl start service_nameservice service_name start
systemctl stop service_nameservice service_name stop
systemctl restart service_nameservice service_name restart
systemctl status service_nameservice service_name status
systemctl enable service_namechkconfig service_name on
systemctl disable service_namechkconfig service_name off

関連記事:試す価値のあるWindowsエクスプローラー代替ツール5選

方法2: コマンドに/sbin/initを追加する

最近のLinuxシステムでは、ユーザーはinitプロセスをスキップすることができます。例えば、ブートローダー環境でコマンド init=/bin/bash を実行すると、システムはシングルユーザーのルートシェル環境を起動します。ユーザーパスワードは必要ありません。

この環境では、すべてのコマンドがデフォルトのパス「 /bin/bash 」で実行されます。この場合は、 /bin/bash の代わりに /sbin/init を使用して下さい。

方法3: スクリプトでSystemDを有効にする

WSL2でsystemdを常に有効にするには、diddledaniのスクリプトを適用します。こちらのリンクから、その作業の手順をご覧いただけます。一部のユーザーは、この方法でうまくいったと報告しています。

関連記事:GRUBの読み込みエラーを修正する方法
  • reddit