我正在开发基于 Ubuntu 14.04 的本地迁移流程。步骤是:
/
使用 LVM拍摄快照(/sbin/lvcreate -s -n ...
)- 执行迁移脚本
- 论成功
- 使用 LVM 提交更改 (
/sbin/lvremove -f ...
)
- 使用 LVM 提交更改 (
- 失败时
- 恢复使用 LVM 进行快照 (
/sbin/lvconvert --merge ...
) - 重新启动
- 恢复使用 LVM 进行快照 (
- 论成功
由于 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。您可以通过以下方式增加延迟:
- 编辑以将行中的值
/etc/default/grub
更改为更大的数字。单位是秒。rootdelay
GRUB_CMDLINE_LINUX_DEFAULT
update-grub
通过从终端运行来更新 GRUB2 。
注意:按照上述步骤,系统必须能够成功启动;它无法通过 LiveCD 运行。如果此时您的系统无法成功启动,您可以rootdelay
通过按 GRUB 中的“e”键临时修改。这将使您进入“编辑模式”并允许您更改内核参数;按 ENTER 键以使用更新的参数启动。
提示:对于迁移流程,您可能需要考虑使用 BTRFS 而不是使用 LVM(加文件系统)。它的工作原理如下:
- 拍摄@(根)子卷的快照
- 执行迁移脚本。
- 关于成功:
- 什么都不做,你就完成了;这些更改已应用于实时系统。
- 失败时:
- 通过重命名子卷(使用 )将 @ 子卷交换为 @ 的(读写)快照
mv
;假设您通过名称而不是子卷 ID 挂载 @ 子卷。 - 重启;无需延迟。
- 您现在可以简单地删除旧的@子卷。
- 通过重命名子卷(使用 )将 @ 子卷交换为 @ 的(读写)快照
- 关于成功: