共用方式為


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

適用於:✔️ Linux VM

在大部分情況下,能夠存取序列控制台和 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 檔案

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

以動態方式設定核心參數

sysctl -w kernel.sysrq=1

如果您沒有 存取權或 sudo 已中斷,就無法從殼層提示設定 sysrq。

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

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

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

如下所示:

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

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

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

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

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

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

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

Ubuntu GRUB 設定

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

選項 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

Ubuntu 12.04

Ubuntu 12.04 將允許存取序列控制台,但無法提供互動的能力。 登入 未看到提示

若要取得 登入的 12.04: 提示:

  1. 建立名為 /etc/init/ttyS0.conf 的檔案,其中包含下列文字:

    # ttyS0 - getty
    #
    # This service maintains a getty on ttyS0 from the point the system is
    # started until it is shut down again.
    start on stopped rc RUNLEVEL=[12345]
    stop on runlevel [!12345]
    
    respawn
    exec /sbin/getty -L 115200 ttyS0 vt102
    
  2. 要求啟動啟動 getty

    sudo start ttyS0
    

您可以在這裡找到 設定 Ubuntu 版本的序列主控台所需的設定

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 7.4+ GRUB 設定

這些版本的預設 /etc/default/grub 組態已適當設定

GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL="serial console"
GRUB_SERIAL_COMMAND="serial"
GRUB_CMDLINE_LINUX="console=tty1 console=ttyS0 earlyprintk=ttyS0"
GRUB_DISABLE_RECOVERY="true"

啟用 SysRq 金鑰

sysctl -w kernel.sysrq=1;echo kernel.sysrq = 1 >> /etc/sysctl.conf;sysctl -a | grep -i sysrq

Red Hat 7.2 和 7.3 GRUB 組態

要修改的檔案是 /etc/default/grub – 預設組態看起來像下列範例:

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

在 /etc/default/grub 中變更下列幾行

GRUB_TIMEOUT=1 

to

GRUB_TIMEOUT=5
GRUB_TERMINAL_OUTPUT="console"

to

GRUB_TERMINAL="serial console"

同時新增這一行:

GRUB_SERIAL_COMMAND="serial –speed=115200 –unit=0 –word=8 –parity=no –stop=1″

/etc/default/grub 現在看起來應該類似下列範例:

GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL="serial console"
GRUB_CMDLINE_LINUX="console=tty1 console=ttyS0 earlyprintk=ttyS0"
GRUB_DISABLE_RECOVERY="true"

使用 完成和更新 grub 組態

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

設定 SysRq 核心參數:

sysctl -w kernel.sysrq = 1;echo kernel.sysrq = 1 >> /etc/sysctl.conf;sysctl -a | grep -i sysrq

或者,您也可以使用殼層中的單行或透過執行命令來設定 GRUB 和 SysRq。 執行此指令之前,請先備份您的檔案:

cp /etc/default/grub /etc/default/grub.bak; sed -i 's/GRUB_TIMEOUT=1/GRUB_TIMEOUT=5/g' /etc/default/grub; sed -i 's/GRUB_TERMINAL_OUTPUT="console"/GRUB_TERMINAL="serial console"/g' /etc/default/grub; echo "GRUB_SERIAL_COMMAND=\"serial --speed=115200 --unit=0 --word=8 --parity=no --stop=1\"" >> /etc/default/grub;grub2-mkconfig -o /boot/grub2/grub.cfg;sysctl -w kernel.sysrq=1;echo kernel.sysrq = 1 /etc/sysctl.conf;sysctl -a | grep -i sysrq

Red Hat 6.x GRUB 設定

要修改的檔案是 /boot/grub/grub.conf。 值 timeout 將決定顯示 GRUB 的長度。

#boot=/dev/vda
default=0
timeout=15
splashimage=(hd0,0)/grub/splash.xpm.gz
#hiddenmenu
serial --unit=0 --speed=9600
terminal serial
terminal --timeout=5 serial console

最後一行 終端機 –-timeout=5 序列控制台 會藉由新增 5 秒的提示來進一步增加 GRUB 逾時,顯示 按下任何按鍵以繼續。

顯示具有輸出的控制台螢幕快照。

GRUB 功能表應該出現在已設定逾時=15 的螢幕上,而不需要按 Esc 鍵。請務必單擊瀏覽器中的控制台,讓功能表成為作用中,然後選取所需的核心。

顯示具有兩個Linux選項的控制台螢幕快照。

SuSE

SLES 12 sp1

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

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

GRUB_TERMINAL=serial
GRUB_TIMEOUT=5
GRUB_SERIAL_COMMAND="serial --unit=0 --speed=9600 --parity=no"

```console
Verify that ttys0 is used in the GRUB_CMDLINE_LINUX or GRUB_CMDLINE_LINUX_DEFAULT

```console
GRUB_CMDLINE_LINUX_DEFAULT="console=ttyS0,9600n"

重新建立 grub.cfg

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

SLES 11 SP4

序列主控台隨即出現並顯示開機訊息,但不會顯示 登入: 提示

開啟 SSH 工作階段到 VM,並取消批注這一行,以更新 /etc/inittab 檔案

#S0:12345:respawn:/sbin/agetty -L 9600 ttyS0 vt102

下一步執行 命令

telinit q

若要啟用 GRUB,應該對 /boot/grub/menu.lst 進行下列變更

timeout 5
serial --unit=0 --speed=9600 --parity=no
terminal --timeout=5 serial console

root (hd0,0)
kernel /boot/vmlinuz-3.0.101-108.74-default root=/dev/disk/by-uuid/ab6b62bb--
1a8c-45eb-96b1-1fbc535b9265 disk=/dev/sda  USE_BY_UUID_DEVICE_NAMES=1 earlyprinttk=ttyS0 console=ttyS0 showopts vga=0x314

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

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

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

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

強制核心至bash提示

存取 GRUB 可讓您中斷初始化程式,這項互動對許多復原程式很有用。 如果您沒有根密碼,而且單一使用者要求您有根密碼,您可以將核心開機,以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 community 支援。 您也可以向 Azure 意見反應社群提交產品意見反應。