FreeBSD - bhyve - トラブルシュート - シェルが壊れた


 クラウディア


1. 概要
2. 状況
3. ゲストのディスクをマウント
4. 編集
5. 後始末
6. 参考サイト

1. 概要

 えらいことになってしまったのです。

2. 状況

 「bhyve」上にインストールしている、「FreeBSD 14.3 RELEASE」で。  シェルが壊れてしまったのです。  なんでそうなったかが、ようわからんのですが。  「root」を含め、全ユーザのシェルを「bash」にしておったですな。  ゲストを起動して、ログインしようとすると。

/usr/local/bin/bash: No such file or directory
 となって、ログインできないのです。  通常、こういうケースでは、再起動して、再起動時に「boot」画面で、シングルユーザモードで起動して。  「passwd」ファイルをいじるということになるのですが。  「bhyve」上の「FreeBSD」では、「boot」画面が見られない。  ゲスト名が、「vm143」なのですが。

vm start vm143
 してから

vm console vm143
 しようとすると、もう、起動が途中まで進んでしまっておる。

vm start vm143 && vm console vm143
 すると、これは。

Starting vm143
  * found guest in /usr/vm/vm143
  * booting...
/usr/local/sbin/vm: ERROR: vm143 doesn't appear to be a running virtual machine
 てなことで、まだ「boot」画面になっていないようです。  「vm143.conf」に。

loader_delay="10"
 やら。

boot_args="-s"
 やら、をいれてみるという方法も試してみましたが、だめでした。  「vm143.conf」によって起動しているか 怪しいくらいです。  結局、ゲストのディスクをホストからマウントして、中身をいじることになりました。

3. ゲストのディスクをマウント

 ゲストのディスクをマウントします。  (ディレクトリやら、ディスクイメージファイルやらは、実際のものに合わせて)

mdconfig -a -t vnode -f /usr/vm/vm143/disk0.img
 この出力が。

md0
 となりました。  解析します。

gpart show md0

=>       40  335544240  md0  GPT  (160G)
         40       1024    1  freebsd-boot  (512K)
       1064        984       - free -  (492K)
       2048   50331648    2  freebsd-swap  (24G)
   50333696  285208576    3  freebsd-zfs  (136G)
  335542272       2008       - free -  (1.0M)
 「freebsd-zfs」の出力から、これが、「zfs」のボリュームであることがわかります。

zpool import -d /dev/md0p3

  pool: zroot
    id: 317115271095479979
 state: ONLINE
status: Some supported features are not enabled on the pool.
        (Note that they may be intentionally disabled if the
        'compatibility' property is set.)
action: The pool can be imported using its name or numeric identifier, though
        some features will not be available without an explicit 'zpool upgrade'.
config:

        zroot       ONLINE
          md0p3     ONLINE
 この「id」をマウントします。

zpool import -f -R /mnt -d /dev/md0p3 317115271095479979 temp_root

zfs mount temp_root/ROOT/default

4. 編集

 これで、ゲストマシンのディスクをマウントすることができました。  「sed」で、「passwd」ファイルを変更して、反映。

sed -i '' 's|/usr/local/bin/bash|/bin/sh|g' /mnt/etc/master.passwd

pwd_mkdb -d /mnt/etc /mnt/etc/master.passwd
 これで、シェルを「bash」から「sh」に変更できました。

5. 後始末

 マウントしたものをアンマウントします。

cd /

zfs umount temp_root/ROOT/default

zpool export temp_root

mdconfig -d -u 0
 もし。

/mnt
 配下に、ごみが残っていたら。

mount | grep /mnt
 で、「/mnt」をマウントしていないことを確認して。

rmdir /mnt/*
 やら。

rm /mnt/*
 やら、します。  とりあえず、これで、ゲストを起動して、ログインできるようになったので。  起動して、ゲストを修復することができるようになります。

6. 参考サイト

 本ページは、「Gemini」伍長を参考にさせていただきました。

TikTok Shop 【リピート用プログラム】
AbemaTV 無料体験
アフィリエイトのアクセストレード
ネットオークションの相場、統計、価格比較といえばオークファン