使用序列主控台來存取 GRUB 與單一使用者模式

適用於:✔️ Linux VM

注意

本文所參考的 CentOS 是一種 Linux 發行版,且將到達生命周期結束(EOL)。 請據以考慮您的使用和規劃。 如需詳細資訊,請參閱 CentOS 生命週期結束指引

GRand Unified Bootloader (GRUB) 可能是您開機虛擬機 (VM) 時看到的第一件事。 因為在操作系統啟動之前會顯示它,所以無法透過 SSH 存取 GRUB。 在 GRUB 中,您可以修改開機設定,以開機進入單一使用者模式,以及其他事項。

單一使用者模式是具有最少功能的最低環境。 它可用於調查開機問題、文件系統問題或網路問題。 在背景執行的服務較少,而且視 runlevel 而定,文件系統甚至可能不會自動掛接。

在 VM 可能設定為只接受 SSH 金鑰進行登入的情況下,單一使用者模式也很有用。 在此情況下,您可以使用單一使用者模式來建立具有密碼驗證的帳戶。

注意

序列主控台服務只允許具有 參與者 層級或更高許可權的使用者存取 VM 的序列主控台。

若要進入單一使用者模式,請在 VM 開機時輸入 GRUB,然後在 GRUB 中修改開機組態。 請參閱下一節中輸入 GRUB 的詳細指示。 一般而言,如果您的 VM 已設定為顯示 GRUB,您可以使用 VM 序列主控台內的 [重新啟動] 按鈕來重新啟動 VM 並顯示 GRUB。

工具列中顯示的 [重新啟動 VM] 按鈕螢幕快照。

一般 GRUB 存取

若要存取 GRUB,請在 [序列控制台] 窗格開啟時重新啟動您的 VM。 某些散發套件需要鍵盤輸入才能顯示 GRUB,而其他散發套件則會自動顯示 GRUB 數秒,以允許使用者鍵盤輸入取消逾時。

若要能夠存取單一使用者模式,您想要確保 VM 上已啟用 GRUB。 視您的發行版而定,可能需要執行某些設定工作,以確保已啟用 GRUB。 如需散發特定資訊,請參閱下一節。

重新啟動您的 VM 以在序列控制台中存取 GRUB

您可以在序列主控台內重新啟動 VM,方法是將滑鼠停留在 [重新啟動] 按鈕上,然後選取 [重新啟動 VM]。 有關重新啟動的通知會顯示在窗格底部。

如果 已啟用 SysRq ,您也可以執行 SysRq “b” 命令來重新啟動 VM。 若要瞭解重新啟動時 GRUB 預期的情況,請參閱下一節中的散發特定指示。

動畫 GIF 會顯示命令行介面。用戶選取工具列中的 [重新啟動 VM],然後重新啟動序列主控台內的 V M。

一般單一使用者模式存取

當您尚未設定具有密碼驗證的帳戶時,可能需要手動存取單一使用者模式。 修改 GRUB 組態以手動進入單一使用者模式。 完成此動作之後,請參閱一節以取得進一步的指示。

如果 VM 無法開機,散發套件通常會自動將您放入單一使用者模式或緊急模式。 不過,其他散發套件需要額外的設定,例如設定根密碼,才能自動將您放入單一使用者或緊急模式。

使用單一使用者模式重設或新增密碼

處於單一使用者模式之後,請執行下列動作,新增具有sudo許可權的新使用者:

  1. 執行 useradd <username> 以新增使用者。
  2. 執行 sudo usermod -a -G sudo <username> 以授與新的使用者根許可權。
  3. 使用 passwd <username> 來設定新用戶的密碼。 然後,您可以以新使用者身分登入。

Red Hat Enterprise Linux 的存取權 (RHEL)

如果 RHEL 無法正常開機,它會自動將您放入單一使用者模式。 不過,如果您尚未設定單一使用者模式的根存取權,則沒有根密碼且無法登入。 有一個因應措施(請參閱<在 RHEL 中手動輸入單一使用者模式>一節),但我們建議您一開始設定根存取。

RHEL 中的 GRUB 存取

RHEL 隨附現用的 GRUB。 若要輸入 GRUB,請執行 sudo reboot重新啟動您的 VM,然後按任何按鍵。 應該會顯示 [GRUB] 窗格。 如果不是,請確定 GRUB 檔案中有下列幾行(/etc/default/grub):

針對 RHEL 8

注意

Red Hat 建議使用 Grubby 在 RHEL 8+ 中設定核心命令行參數。 目前無法使用 grubby 更新 grub 逾時和終端機參數。 若要修改所有開機專案的GRUB_CMDLINE_LINUX自變數,請執行 grubby --update-kernel=ALL --args="console=ttyS0,115200 console=tty1 console=ttyS0 earlyprintk=ttyS0"。 您可以在這裡了解其他詳細資料。

GRUB_TIMEOUT=5
GRUB_TERMINAL="serial console"
GRUB_CMDLINE_LINUX="console=tty1 console=ttyS0 earlyprintk=ttyS0"

針對 RHEL 7

GRUB_TIMEOUT=5
GRUB_TERMINAL_OUTPUT="serial console"
GRUB_CMDLINE_LINUX="console=tty1 console=ttyS0,115200n8 earlyprintk=ttyS0,115200 net.ifnames=0"

注意

Red Hat 也提供檔來開機進入救援模式、緊急模式或偵錯模式,以及重設根密碼。 如需指示,請參閱 開機期間終端機功能表編輯。

在 RHEL 中設定單一使用者模式的根存取

預設會停用根使用者。 RHEL 中的單一使用者模式需要啟用根使用者。 如果您需要啟用單一使用者模式,請使用下列指示:

  1. 透過 SSH 登入 Red Hat 系統。
  2. 切換至 root。
  3. 執行下列動作來啟用根使用者的密碼:
    • 執行 passwd root (設定強根密碼)。
  4. 請確定根使用者只能透過ttyS0登入,方法是執行下列動作: a。 執行 vi /etc/ssh/sshd_config,並確定 PermitRootLogIn 已設定為 no。 b. 執行 vi /etc/securetty file 以只允許透過ttyS0登入。

現在,如果系統開機進入單一使用者模式,您可以使用根密碼登入。

或者,針對 RHEL 7.4+ 或 6.9+,若要在 GRUB 提示中啟用單一使用者模式,請參閱 開機進入單一使用者模式

在 RHEL 中手動輸入單一使用者模式

如果您已使用上述指示來設定 GRUB 和根存取,您可以執行下列動作來輸入單一使用者模式:

  1. 若要輸入 GRUB,請在重新啟動 VM 時按 Esc 鍵。

  2. 在 GRUB 中,按 E 來編輯您要開機的 OS。 OS 通常會列在第一行。

  3. 尋找核心行。 在 Azure 中,其開頭為 linuxlinux16

  4. 按 Ctrl+E 以移至行尾。

  5. 在行尾處,新增 systemd.unit=rescue.target

    此動作會將您開機進入單一使用者模式。 如果您想要使用緊急模式,請將 systemd.unit=emergency.target 新增至行尾(而不是 systemd.unit=rescue.target)。

  6. 按 Ctrl+X 以結束並重新啟動並套用的設定。

    系統會提示您輸入系統管理員密碼,才能進入單一使用者模式。 此密碼是您先前指示中建立的密碼。

    動畫 GIF 會顯示命令行介面。用戶選取伺服器、找出核心行結尾,然後輸入指定的文字。

在 RHEL 中輸入沒有啟用根帳戶的單一使用者模式

如果您未依照先前的指示啟用根使用者,您仍然可以執行下列動作來重設根密碼:

注意

如果您使用 SELinux,當您重設根密碼時,請務必遵循 Red Hat 檔中所述的其他步驟。

  1. 若要輸入 GRUB,請在重新啟動 VM 時按 Esc 鍵。

  2. 在 GRUB 中,按 E 來編輯您要開機的 OS。 OS 通常會列在第一行。

  3. 尋找核心行。 在 Azure 中,它會從 linux16 開始。

  4. 在行尾處,將 rd.break 新增至行尾。 在核心行與 rd.break 之間保留空格。

    此動作會在控件從 initramfs 傳遞至 systemd之前中斷開機程式,如 Red Hat 檔中所述

  5. 按 Ctrl+X 以結束並重新啟動並套用的設定。

    重新啟動之後,系統會使用唯讀檔案系統進入緊急模式。

  6. 在殼層中,輸入 mount -o remount,rw /sysroot 以重新掛接具有讀取/寫入許可權的根文件系統。

  7. 開機進入單一使用者模式之後,請輸入 chroot /sysroot 以切換至 sysroot 監獄。

  8. 您現在已處於根目錄,您可以開始針對系統問題進行疑難解答。

  9. 在 RHEL 中,SELinux 強制執行模式可保護 OS 不受任何變更。 您可以在密碼變更之後,執行 touch /.autorelabel 以重新標記檔案系統。

  10. 完成之後,請輸入 reboot -f 以重新啟動。

動畫 GIF 會顯示在命令行介面中輸入單一使用者模式,而不需在 RHEL 中啟用根帳戶的程式。

注意

執行上述指示會將您放入緊急殼層,以便您也可以執行編輯 fstab等工作。 不過,我們通常建議您重設根密碼,並用它來進入單一使用者模式。

CentOS 的存取

與 Red Hat Enterprise Linux 類似,CentOS 中的單一使用者模式需要啟用 GRUB 和根使用者。

CentOS 中的 GRUB 存取

CentOS 隨附現成可用的 GRUB。 若要輸入 GRUB,請輸入 sudo reboot重新啟動您的 VM,然後按下任何按鍵。 此動作會顯示 [GRUB] 窗格。

CentOS 中的單一使用者模式

若要在 CentOS 中啟用單一使用者模式,請遵循 RHEL 的先前指示。

Ubuntu 的存取

Ubuntu 映像不需要根密碼。 如果系統開機進入單一使用者模式,您可以使用它,而不需要額外的認證。

Ubuntu 中的 GRUB 存取

若要存取 GRUB,請在 VM 開機時按住 Esc 鍵。

根據預設,Ubuntu 映射可能不會自動顯示 [GRUB] 窗格。 您可以執行下列動作來變更設定:

  1. 在文本編輯器中 ,開啟 /etc/default/grub.d/50-cloudimg-settings.cfg 檔案。

  2. GRUB_TIMEOUT 值變更為非零值。

  3. 在文本編輯器中,開啟 /etc/default/grub

  4. 將行 GRUB_HIDDEN_TIMEOUT=1 批注化。

  5. 請確定有一 GRUB_TIMEOUT_STYLE=menu 行。

  6. 執行 sudo update-grub

Ubuntu 中的單一使用者模式

如果Ubuntu無法正常開機,它會自動將您放入單一使用者模式。 若要手動輸入單一使用者模式,請執行下列動作:

  1. 在 GRUB 中,按 E 來編輯您的開機專案(Ubuntu 專案)。
  2. 尋找以 linux開頭的行,然後尋找 ro
  3. 在 ro 之後新增單一,確保單一前後有空格。
  4. 按 Ctrl+X 以使用這些設定重新啟動,並進入單一使用者模式。

使用 GRUB 在 Ubuntu 中叫用 bash

在您嘗試上述指示之後,可能會有一種情況(例如忘記的根密碼),而您仍然無法在Ubuntu VM中存取單一使用者模式。 您也可以指示核心以 init 的形式執行 /bin/bash ,而不是系統 init。 此動作會提供bash殼層,並允許系統維護。 使用下列指示:

  1. 在 GRUB 中,按 E 來編輯您的開機專案(Ubuntu 專案)。

  2. 尋找以 linux開頭的行,然後尋找 ro

  3. 將 ro 取代rw init=/bin/bash

    此動作會將文件系統掛接為讀寫,並使用 /bin/bash 作為 init 進程。

  4. 按 Ctrl+X 以使用這些設定重新啟動。

CoreOS 的存取

CoreOS 中的單一使用者模式需要啟用 GRUB。

CoreOS 中的 GRUB 存取

若要存取 GRUB,請在 VM 開機時按下任何按鍵。

CoreOS 中的單一使用者模式

如果 CoreOS 無法正常開機,它會自動將您放入單一使用者模式。 若要手動輸入單一使用者模式,請執行下列動作:

  1. 在 GRUB 中,按 E 來編輯您的開機專案。

  2. 尋找以 linux$開頭的行。 這一行應該有兩個 實例,每個實例都封裝在不同的 if...else 子句。

  3. 將 coreos.autologin=ttyS0 附加至每個 linux$ 行的結尾。

  4. 按 Ctrl+X 以使用這些設定重新啟動,並進入單一使用者模式。

SUSE SLES 的存取權

如果系統開機進入緊急模式,SLES 12 SP3+ 的較新映像允許透過序列控制台進行存取。

SUSE SLES 中的 GRUB 存取

SLES 中的 GRUB 存取需要透過 YaST 的開機載入器設定。 若要建立組態,請執行下列動作:

  1. 使用 SSH 登入您的 SLES VM,然後執行 sudo yast bootloader。 按 Tab 鍵,按 Enter 鍵,然後使用箭頭鍵瀏覽功能表。

  2. 移至 [核心參數],然後選取 [使用序列控制台] 複選框。

  3. 將 新增 serial --unit=0 --speed=9600 --parity=no主控台 自變數。

  4. 按 F10 儲存您的設定並結束。

  5. 若要輸入 GRUB,請重新啟動您的 VM,並在開機順序期間按下任何按鍵,讓 GRUB 窗格保持顯示。

    GRUB 的預設逾時為 1 秒。 您可以藉由變更 /etc/default/grub 檔案中的變數來修改GRUB_TIMEOUT此設定。

動畫 GIF 會顯示透過 YaST 建立開機載入器組態的程式。

SUSE SLES 中的單一使用者模式

如果 SLES 無法正常開機,則會自動放入緊急殼層。 若要手動輸入緊急殼層,請執行下列動作:

  1. 在 GRUB 中,按 E 來編輯您的開機專案(SLES 專案)。

  2. 尋找以 linux開頭的核心行。

  3. 將 systemd.unit=emergency.target 附加至核心行結尾。

  4. 按 Ctrl+X 以使用這些設定重新啟動,並輸入緊急殼層。

    注意

    此動作會將您放入具有唯讀檔案系統的緊急殼層。 若要編輯任何檔案,請使用讀寫許可權重新掛接文件系統。 若要這樣做,請在殼層中輸入 mount -o remount,rw /

Oracle Linux 的存取權

與 Red Hat Enterprise Linux 類似,Oracle Linux 中的單一使用者模式需要啟用 GRUB 和根使用者。

Oracle Linux 中的 GRUB 存取

Oracle Linux 隨附現裝的 GRUB。 若要輸入 GRUB,請執行 sudo reboot重新啟動您的 VM,然後按 Esc 鍵。此動作會顯示 [GRUB] 窗格。 如果未顯示 GRUB 窗格,請確定該行的值GRUB_TERMINAL包含序列主控台(也就是 GRUB_TERMINAL="serial console")。 使用 grub2-mkconfig -o /boot/grub/grub.cfg重建 GRUB。

Oracle Linux 中的單一使用者模式

若要在 Oracle Linux 中啟用單一使用者模式,請遵循 RHEL 的先前指示。

下一步

若要深入瞭解序列主控台,請參閱:

與我們連絡,以取得說明

如果您有問題或需要相關協助,請建立支援要求,或詢問 Azure community 支援。 您也可以向 Azure 意見反應社群提交產品意見反應。