Ubuntu
從 LVM 快照恢復時如何避免啟動到 BusyBox?
我正在開發基於 Ubuntu 14.04 的本地遷移流程。步驟是:
/
使用 LVM的快照(/sbin/lvcreate -s -n ...
)執行遷移腳本
關於成功
/sbin/lvremove -f ...
使用 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)
目前,您的 Linux 核心被指示等待 90 秒以使根設備可用。如果到那時它不可用,如果放棄並委託給busybox。您可以通過以下方式增加延遲:
- 編輯
/etc/default/grub
以將行中的rootdelay
值更改GRUB_CMDLINE_LINUX_DEFAULT
為更大的數字。單位是秒。update-grub
通過從終端執行來更新 GRUB2 。注意:按照上述步驟,系統必須能夠成功啟動;它不適用於 LiveCD。如果此時您的系統無法成功啟動,您可以
rootdelay
通過在 GRUB 中按“e”鍵來臨時修改。這將使您進入“編輯模式”並允許您更改核心參數;按 ENTER 以使用更新的參數啟動。提示:您可能需要考慮使用 BTRFS 而不是使用 LVM(加上文件系統)進行遷移流程。以下是它的工作原理:
- 拍攝@(根)子卷的快照
- 執行遷移腳本。
成功時:
- 什麼都不做,你就完了;這些更改已應用於實時系統。
失敗時:
- 通過重命名子卷(使用)將@子卷交換為@的(讀寫)快照
mv
;假設您按名稱而不是子卷 ID 掛載 @ 子卷。- 重啟; 無需延遲。
- 您現在可以簡單地刪除舊的 @ 子卷。