Xen 虛擬機(DomU)因忘記 root 密碼、關鍵配置檔誤改、/etc/fstab 掛載錯誤等原因無法正常啟動時,可透過 Dom0 以 xm create -c 進入單用戶模式進行修復。本文提供標準操作流程、Grub 參數編輯技巧、常見故障修復案例與自動化腳本。
xm listxm shutdown <domu_name>(若卡住可 xm destroy 強制終止)xm create -c <domu_name>single 或 1 或 init=/bin/bashmount -o remount,rw /sync; reboot -f 或 exit 讓 init 繼續| 項目 | Grub 1 (menu.lst) | Grub 2 (grub.cfg) |
|---|---|---|
| 編輯鍵 | e → 編輯 kernel 行 → Enter → b | e → 找 linux/linux16/linuxefi 行 → 尾端加參數 → Ctrl+x 或 F10 |
| 單用戶參數 | single / 1 / init=/bin/bash | 同左,或 systemd.unit=emergency.target |
| SELinux 繞過 | selinux=0 | enforcing=0 或 autorelabel=1 |
| 故障現象 | 進入單用戶後修復指令 |
|---|---|
| 忘記 root 密碼 | passwd root |
/etc/fstab 錯誤導致掛載失敗 | vi /etc/fstab 修正 → mount -a 驗證 |
| SELinux 禁止登入 | setenforce 0 臨時放行 → restorecon -Rv / 修復標籤 → 重啟 |
| 磁碟損壞/超級區錯誤 | fsck -y /dev/xvda1(視實際裝置調整) |
| 網路配置錯誤無法 SSH | vi /etc/sysconfig/network-scripts/ifcfg-eth0 / netplan 修正 |
| 鍵盤/語系亂碼 | localectl set-keymap us / localectl set-locale LANG=en_US.UTF-8 |
#!/bin/bash
# xen-rescue.sh [reset_password|fix_fstab|fsck]
set -euo pipefail
DOMU=$1
ACTION=${2:-shell}
xm shutdown "$DOMU" 2>/dev/null || xm destroy "$DOMU"
sleep 2
case "$ACTION" in
reset_password)
xm create -c "$DOMU" <<'EOF'
# 此處需人工互動,建議改用 expect 或 pygrub 自動化
EOF
;;
fix_fstab)
# 掛載 DomU 磁碟映像至 /mnt/rescue 進行離線修改
MOUNT_POINT="/mnt/rescue"
DISK_IMG=$(xenstore-read /local/domain/$(xm list "$DOMU" | awk 'NR==3{print $2}')/device/vbd/0/backend-dev)
mkdir -p "$MOUNT_POINT"
mount -o loop "$DISK_IMG" "$MOUNT_POINT"
# 修復 fstab 範例:註解掉錯誤行
sed -i 's/^\(.*\/data.*\)$/#\1/' "$MOUNT_POINT/etc/fstab"
umount "$MOUNT_POINT"
xm create "$DOMU"
;;
fsck)
DISK_IMG=$(xenstore-read /local/domain/$(xm list "$DOMU" | awk 'NR==3{print $2}')/device/vbd/0/backend-dev)
fsck -y "$DISK_IMG"
xm create "$DOMU"
;;
*)
xm create -c "$DOMU"
;;
esac
dd 備份。vfb = [ 'type=vnc,vncunused=1' ] 以 VNC 連線。init=/bin/bash 進入後需手動 mount -o remount,rw /; mount -a,systemd 不會自動掛載。journalctl -xb / /var/log/messages 確認根因,避免重複故障。熟練掌握 xm create -c 進入單用戶模式,配合 Grub 參數編輯與離線磁碟修復,即可在數分鐘內解決絕大多數 Xen DomU 無法啟動的疑難雜症。