共用方式為


主動確保您可以存取 GRUB 和 sysrq,可節省許多下限時間

適用於:✔️ Linux VM

這很重要

New! 試試 VM assist 來解決主要問題。 建議您執行 適用於 Windows 的 VM 協助適用於 Linux 的 VM 協助。 這些基於腳本的診斷工具能幫助你識別影響 Azure VM 訪客代理及整體虛擬機健康狀況的常見問題。

如果你在虛擬機上遇到效能問題,請先執行這些工具,再聯絡 Microsoft 支援。

在大部分情況下,能夠存取序列控制台和 GRUB 可改善 IaaS Linux 虛擬機的復原時間。 GRUB 提供復原選項,否則需要較長的時間才能復原 VM。

執行 VM 復原的原因有許多,而且可以歸因於下列案例:

  • 損毀的文件系統/核心/MBR(主要開機記錄)
  • 核心升級失敗
  • 不正確的 GRUB 核心參數
  • 不正確的 fstab 組態
  • 防火牆組態
  • 遺失密碼
  • 管理 sshd 組態檔
  • 網路設定

這裏詳述 的許多其他案例

確認您可以在部署於 Azure 的 VM 上存取 GRUB 和序列主控台。

如果您不熟悉序列主控台,請參閱 此連結

提示

在進行變更之前,請確定您先備份檔

觀看下列影片,以瞭解一旦您能夠存取 GRUB 之後,如何快速復原 Linux VM

復原 Linux VM 影片

有許多方法可協助復原Linux VM。 在雲端環境中,此程式一直具有挑戰性。 持續進行工具與功能進度,以確保服務能快速復原。

透過 Azure 序列主控台,您可以與 Linux VM 互動,就像您位於系統的控制台一樣。

您可以操作許多組態檔,包括核心的開機方式。

較有經驗的Linux/Unix系統管理員會欣賞 可透過 Azure 序列控制台存取的單一使用者緊急模式 ,讓磁碟交換和 VM 刪除許多復原案例備援。

復原方法取決於發生的問題,例如,透過 Azure 入口網站 選項 ->Reset Password 可以重設遺失或錯位的密碼。 重 設密碼 功能稱為擴充功能,並與Linux客體代理程序通訊。

其他延伸模組 (例如自訂指令碼) 可供使用,但這些選項需要 Linux waagent 已啟動且處於狀況良好的狀態,但情況並非總是如此。

Azure 入口網站 中 [屬性] 頁面中 [代理程序狀態] 的螢幕快照。

確保您可以存取 Azure 序列控制台和 GRUB,這表示密碼變更或不正確的設定可以在幾分鐘內修正,而不是數小時。 在主要核心損毀的情況下,您甚至可以強制 VM 從替代核心開機,在磁碟上有多個核心。

GRUB 中開機選取OS畫面的螢幕快照,其中顯示可以選擇多個核心。

建議的復原方法順序

磁碟交換視訊

如果您無法存取 GRUB,請觀看 影片,並瞭解如何輕鬆地自動化磁碟交換程式以復原 VM

挑戰

並非所有 Linux Azure VM 預設都會針對 GRUB 存取進行設定,而且所有 VM 都未設定為使用 sysrq 命令中斷。 某些較舊的發行版 (例如 SLES 11) 未設定為在 Azure 序列主控台中顯示登入提示

在本文中,我們將檢閱各種Linux發行版和文件設定,瞭解如何讓 GRUB 可供使用。

如何設定Linux VM以接受 SysRq 金鑰

sysrq 索引鍵預設會在某些較新的 Linux 散發版本上啟用,不過在某些發行版上,它可能設定為只接受特定 SysRq 函式的值。 在較舊的散發版本上,可能會完全停用。

SysRq 功能有助於直接從 Azure 序列控制台重新啟動損毀或未回應的 VM,也有助於取得 GRUB 功能表的存取權,或者從另一個入口網站視窗重新啟動 VM,或 SSH 會話可能會卸除目前的控制台連線,因而過期用來顯示 GRUB 功能表的 GRUB 逾時。 VM 必須設定為接受核心參數的 1 值,以啟用 sysrq 或 128 的所有函式,以允許重新啟動/關閉電源

啟用 sysrq 影片

若要將 VM 設定為透過 Azure 入口網站 上的 SysRq 命令接受重新啟動,您必須為核心參數 kernel.sysrq 設定 1 的值

若要讓此組態保存重新啟動,請將專案新增至 sysctl.conf 檔案

sudo echo kernel.sysrq = 1 >> /etc/sysctl.conf

以動態方式設定核心參數

sudo sysctl -w kernel.sysrq=1

如果您沒有 root 訪問權限或 sudo 已損壞,則無法從 shell 提示符配置 sysrq。

您可以使用 Azure 入口網站,在此案例中啟用 sysrq。 如果 sudoers.d/waagent 檔案已中斷或已刪除,這個方法可能會很有説明。

使用 Azure 入口網站 作業 - 執行命令 ->> RunShellScript 功能,需要 waagent 進程狀況良好,然後您可以插入此命令以啟用 sysrq

sudo sysctl -w kernel.sysrq=1 ; sudo echo kernel.sysrq = 1 >> /etc/sysctl.conf

如下所示:

當您插入命令時,RunShellScript 視窗的螢幕快照。

完成後,您可以嘗試存取 sysrq ,並應該會看到可能重新啟動。

按鈕列中鍵盤圖示下 [傳送 SysRq 命令] 選項的螢幕快照。

選取 [重新啟動 ] 並 傳送 SysRq 命令

[傳送 SysRq 命令至來賓] 對話框中 [重新啟動] 選項的螢幕快照。

系統應該記錄如下的重設訊息

命令行介面中重設訊息記錄的螢幕快照。

Ubuntu GRUB 設定

根據預設,您應該能夠在 VM 開機期間按住 Esc 鍵來存取 GRUB,如果未顯示 GRUB 功能表,您可以使用其中一個選項,強制並將 GRUB 功能表保留在 Azure 序列主控台的螢幕上。

選項 1 - 強制在畫面上顯示 GRUB

更新 /etc/default/grub.d/50-cloudimg-settings.cfg 檔案,以在指定的 TIMEOUT 畫面上保留 GRUB 功能表。 您不需要按 Esc ,因為 GRUB 會立即顯示。

GRUB_TIMEOUT=5
GRUB_TIMEOUT_STYLE=menu

選項 2 - 允許 在開機前按下 Esc

對檔案 /etc/default/grub 進行變更,並觀察達到 Esc 的 3 秒逾時,即可體驗類似的行為

將這兩行批注化:

#GRUB_HIDDEN_TIMEOUT=0
#GRUB_HIDDEN_TIMEOUT_QUIET=true

並新增這一行:

GRUB_TIMEOUT_STYLE=countdown

請確定已啟用 serial-getty@ttyS0.service,以便 systemd 在該控制台上提供登入提示。

sudo systemctl enable serial-getty@ttyS0.service
sudo systemctl start serial-getty@ttyS0.service

Ubuntu 復原模式

其他復原和清除選項可透過 GRUB 供 Ubuntu 使用,但只有在您據以設定核心參數時,才能存取這些設定。 無法設定此核心開機參數會強制將 [復原] 功能表傳送至 Azure 診斷,而不是傳送至 Azure 序列控制台。 您可以遵循下列步驟來取得 Ubuntu 複原選單的存取權:

中斷 BOOT 進程並存取 GRUB 功能表

選取 [Ubuntu 的進階選項],然後按 Enter 鍵

此螢幕快照顯示已選取 [Ubuntu 的進階選項] 序列主控台。

選擇顯示的 (恢復模式) 行時,不要按 Enter 鍵,而是按 "e" 鍵。

此螢幕快照顯示已選取復原模式版本的序列主控台。

找出將載入核心並將最後一個參數 nomodeset 取代為 console=ttyS0 的行

linux /boot/vmlinuz-4.15.0-1023-azure root=UUID=21b294f1-25bd-4265-9c4e-d6e4aeb57e97 ro recovery nomodeset

change to

linux /boot/vmlinuz-4.15.0-1023-azure root=UUID=21b294f1-25bd-4265-9c4e-d6e4aeb57e97 ro recovery console=ttyS0

此螢幕快照顯示具有已變更值的序列主控台。

Ctrl-x 以啟動並載入核心。 如果一切順利,您會看到這些額外的選項,這有助於執行其他復原選項

此螢幕快照顯示 [復原] 功能表的 [序列] 主控台,其提供其他復原選項。

Red Hat GRUB 設定

Red Hat 8.6+ GRUB 組態

這些版本上的預設 /etc/default/grub 組態已充分設定。

GRUB_TIMEOUT=10
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT="console"
GRUB_CMDLINE_LINUX="crashkernel=auto console=tty1 console=ttyS0 earlyprintk=ttyS0 rootdelay=300"
GRUB_DISABLE_RECOVERY="true"
GRUB_ENABLE_BLSCFG=true

GRUB_TIMEOUT_STYLE=countdown
GRUB_TERMINAL="serial console"
GRUB_SERIAL_COMMAND="serial --speed=115200 --unit=0 --word=8 --parity=no --stop=1"

請確定已啟用 serial-getty@ttyS0.service,以便 systemd 在該控制台上提供登入提示。

sudo systemctl enable serial-getty@ttyS0.service
sudo systemctl start serial-getty@ttyS0.service

SuSE

SLES 15 sp5

這些版本上的預設 /etc/default/grub 組態已充分設定。

GRUB_DEFAULT=0
GRUB_HIDDEN_TIMEOUT=0
GRUB_HIDDEN_TIMEOUT_QUIET=true
GRUB_TIMEOUT=1
GRUB_CMDLINE_LINUX_DEFAULT="console=ttyS0 net.ifnames=0 dis_ucode_ldr earlyprintk=ttyS0 multipath=off nvme_core.io_timeout=240 rootdelay=300 scsi_mod.use_blk_mq=1 USE_BY_UUID_DEVICE_NAMES=1 systemd.unified_cgroup_hierarchy=1"
GRUB_CMDLINE_LINUX=""


GRUB_DISTRIBUTOR="SLES15-SP5"
GRUB_GFXMODE=auto
GRUB_TERMINAL_INPUT="serial"
GRUB_TERMINAL_OUTPUT="serial"
GRUB_TIMEOUT_STYLE=countdow

請確定已啟用 serial-getty@ttyS0.service,以便 systemd 在該控制台上提供登入提示。

sudo systemctl enable serial-getty@ttyS0.service
sudo systemctl start serial-getty@ttyS0.service

SLES 12 sp1

根據官方 檔,使用 YaST 開機載入器

或將 /etc/default/grub 新增/變更為下列參數:

GRUB_CMDLINE_LINUX_DEFAULT="console=ttyS0 net.ifnames=0 dis_ucode_ldr earlyprintk=ttyS0 multipath=off nvme_core.io_timeout=240 rootdelay=300 scsi_mod.use_blk_mq=1 USE_BY_UUID_DEVICE_NAMES=1 systemd.unified_cgroup_hierarchy=1"
GRUB_TERMINAL_INPUT="serial"
GRUB_TERMINAL_OUTPUT="serial"
GRUB_TIMEOUT=10
GRUB_TIMEOUT_STYLE=countdown

重新建立 grub.cfg

grub2-mkconfig -o /boot/grub2/grub.cfg

請確定已啟用 serial-getty@ttyS0.service,以便 systemd 在該控制台上提供登入提示。

sudo systemctl enable serial-getty@ttyS0.service
sudo systemctl start serial-getty@ttyS0.service

此設定可讓訊息 按下任何按鍵繼續 出現在主控台 5 秒

然後,它會再顯示 GRUB 功能表 5 秒 - 按下向下箭號即可中斷計數器,然後選取您要開機的核心,針對需要設定根密碼的單一使用者模式附加關鍵詞 單一

附加命令 init=/bin/bash 將會載入核心,但可確保 init 程式已由 bash 殼層取代。

您將不需要輸入密碼即可存取殼層。 然後,您可以繼續更新 Linux 帳戶的密碼,或進行其他組態變更。

強制核心至bash提示

存取 GRUB 可讓您中斷初始化程式,這項互動對許多復原程式很有用。 如果您沒有 root 密碼,而單一使用者要求您擁有 root 密碼,您可以啟動核心,以 bash 提示符取代 init 程式 – 此中斷可以透過將 init=/bin/bash 附加到核心啟動行來實現

顯示主控台的螢幕快照,其中包含更新的開機線路。

使用 命令重新掛接 /(root) 檔案系統 RW

mount -o remount,rw /

此螢幕快照顯示具有重新掛接動作的控制台。

現在您可以執行根密碼變更或其他許多 Linux 組態變更

此螢幕快照顯示您可以變更根密碼和其他設定的主控台。

使用 重新啟動 VM

/sbin/reboot -f

單一使用者模式

或者,您可能需要以單一使用者或緊急模式存取 VM。 選取您想要使用箭頭鍵開機或中斷的核心。 將 關鍵詞 單一1 附加至核心開機行,以進入所需的模式。 在 RHEL 系統上,您也可以附加 rd.break

如需如何存取單一使用者模式的詳細資訊,請參閱 此檔

開機中 [GRUB] 中所選OS畫面中 *Ubuntu 項目的螢幕快照。

下一步

深入瞭解 Azure 序列控制台

與我們連絡,以取得說明

如果您有疑問,可以詢問 Azure 社群支援。 您也可以向 Azure 意見反應社群提交產品意見反應。