Ubuntu

從 LVM 快照恢復時如何避免啟動到 BusyBox?

  • May 17, 2018

我正在開發基於 Ubuntu 14.04 的本地遷移流程。步驟是:

  1. /使用 LVM的快照( /sbin/lvcreate -s -n ...)

  2. 執行遷移腳本

  3. 關於成功

    1. /sbin/lvremove -f ...使用 LVM ( )送出更改
  4. 失敗時

    1. /sbin/lvconvert --merge ...使用 LVM ( )恢復快照
    2. 重啟

由於 LVM 快照恢復不會立即執行並安排到下一次初始化,因此我在該命令之後使用了重新啟動命令。

在大型 LVM 快照差異上——(例如,在拍攝快照和還原之間,我會進行大量更改)——有時作業系統啟動流程會停止並將我放到 BusyBox shell 中,而不是正常啟動。

從 LVM 快照恢復時如何避免啟動到 BusyBox?

內容/proc/cmdline

BOOT_IMAGE=/vmlinuz-3.19.0-80-generic root=/dev/mapper/root_vg-root_lv ro nomodeset i915.modeset=0 noplymouth acpi_osi=Linux cpi_backlight=vendor rootdelay=90 rootwait=180

內容/etc/default/grub

# If you change this file, run 'update-grub' afterwards to update

GRUB_DEFAULT=0
GRUB_HIDDEN_TIMEOUT_QUIET=true
GRUB_TIMEOUT=2
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
GRUB_CMDLINE_LINUX_DEFAULT="nomodeset i915.modeset=0 noplymouth acpi_osi=Linux cpi_backlight=vendor rootdelay=90 rootwait=180"
GRUB_CMDLINE_LINUX=""
GRUB_RECORDFAIL_TIMEOUT=5

在此處輸入圖像描述

Gave up waiting for root device. Common problems:
 - Boot args (cat /proc/cmdline)
   - Check rootdelay= (did the system wait long enough?)
   - Check root= (did the system wait for the right device?)
 - Missing modules (cat /proc/modules; ls /dev)
ALERT! /dev/mapper/root_vg-root_lv does not exist. Dropping to a shell!

BusyBox v1.21.1 (Ubuntu 1:1.21.0-1ubuntu1) built-in shell (ash)
Enter 'help' for a lost of built-in commands.

(initramfs)

目前,您的 Linux 核心被指示等待 90 秒以使根設備可用。如果到那時它不可用,如果放棄並委託給busybox。您可以通過以下方式增加延遲:

  1. 編輯/etc/default/grub以將行中的rootdelay值更改GRUB_CMDLINE_LINUX_DEFAULT為更大的數字。單位是秒。
  2. update-grub通過從終端執行來更新 GRUB2 。

注意:按照上述步驟,系統必須能夠成功啟動;它不適用於 LiveCD。如果此時您的系統無法成功啟動,您可以rootdelay通過在 GRUB 中按“e”鍵來臨時修改。這將使您進入“編輯模式”並允許您更改核心參數;按 ENTER 以使用更新的參數啟動。

提示:您可能需要考慮使用 BTRFS 而不是使用 LVM(加上文件系統)進行遷移流程。以下是它的工作原理:

  1. 拍攝@(根)子卷的快照
  2. 執行遷移腳本。
  • 成功時:

    1. 什麼都不做,你就完了;這些更改已應用於實時系統。
  • 失敗時:

    1. 通過重命名子卷(使用)將@子卷交換為@的(讀寫)快照mv;假設您按名稱而不是子卷 ID 掛載 @ 子卷。
    2. 重啟; 無需延遲。
    3. 您現在可以簡單地刪除舊的 @ 子卷。

引用自:https://unix.stackexchange.com/questions/444307