从 LVM 快照恢复时如何避免启动进入 BusyBox?

从 LVM 快照恢复时如何避免启动进入 BusyBox?

我正在开发基于 Ubuntu 14.04 的本地迁移流程。步骤是:

  1. /使用 LVM拍摄快照( /sbin/lvcreate -s -n ...)
  2. 执行迁移脚本
    1. 论成功
      1. 使用 LVM 提交更改 ( /sbin/lvremove -f ...)
    2. 失败时
      1. 恢复使用 LVM 进行快照 ( /sbin/lvconvert --merge ...)
      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)

答案1

目前,您的 Linux 内核被指示等待 90 秒,以便根设备变得可用。如果到时候不可用,则放弃并委托给 busybox。您可以通过以下方式增加延迟:

  1. 编辑以将行中的值/etc/default/grub更改为更大的数字。单位是秒。rootdelayGRUB_CMDLINE_LINUX_DEFAULT
  2. update-grub通过从终端运行来更新 GRUB2 。

注意:按照上述步骤,系统必须能够成功启动;它无法通过 LiveCD 运行。如果此时您的系统无法成功启动,您可以rootdelay通过按 GRUB 中的“e”键临时修改。这将使您进入“编辑模式”并允许您更改内核参数;按 ENTER 键以使用更新的参数启动。

提示:对于迁移流程,您可能需要考虑使用 BTRFS 而不是使用 LVM(加文件系统)。它的工作原理如下:

  1. 拍摄@(根)子卷的快照
  2. 执行迁移脚本。
    • 关于成功:
      1. 什么都不做,你就完成了;这些更改已应用于实时系统。
    • 失败时:
      1. 通过重命名子卷(使用 )将 @ 子卷交换为 @ 的(读写)快照mv;假设您通过名称而不是子卷 ID 挂载 @ 子卷。
      2. 重启;无需延迟。
      3. 您现在可以简单地删除旧的@子卷。

相关内容