如何制作可启动、无人值守的 USB 恢复盘?

如何制作可启动、无人值守的 USB 恢复盘?

我有很多 14.04 信息亭系统,分布在半个国家。这些都是糟糕的小型集成设备。我需要将它们全部升级到 16.04 以支持新的软件堆栈。do-release-upgrade一半时间有效。另一半时间会破坏安装。此外,CPU真的速度很慢,而且有些网站的网络连接也相当差。所以即使可以运行,升级也需要很长时间。

所以有了新计划。
我可以在 Virtualbox、LXC 或其他任何系统中为每个信息亭制作一个完全安装的系统映像。
我需要一种方法将这些图像解压到系统上。

这里的主要问题是另一端的技术人员非常少。我不想亲自飞 200 英里去做这件事。我需要一种几乎完全自动化且不需要键盘的东西。

我正在想象这样的场景:

  • 我为每个信息亭制作一个系统图像
  • 我为每个信息亭制作一个可启动的 USB 驱动器,并将信息亭图像复制到其中。
  • 我给每张都贴上标签并张贴出来。
  • 在另一端,具有 USB 端口物理访问权限的工作人员只需插入正确的驱动器并重新启动即可。
  • 然后,其可引导元素将写入并扩展磁盘映像。

我要找的就是那个“可引导元素”。我原本以为类似的东西可能已经存在(用于批量重新映像安装),但我可能进入了新领域。任何无需手动干预(插入后)即可安装映像的东西都会获得积分。

据我所知,像 Clonezilla 这样的选项需要有人用键盘告诉它该做什么。我需要不需要键盘,直接打开就可以完成的东西。

答案1

Shell脚本

我很喜欢制作一个 bash shellscript,它可以在已安装的和持久的 Ubuntu 系统以及基于 Debian Jessie 的小型“9w”系统中自动执行其操作。我希望它对您以及将来的其他人都有用。

该脚本假定应该有两个可写驱动器(大容量存储设备)、活动驱动器和目标驱动器。不是使用 toram,它会破坏实时驱动器的识别。

shellscript 调用dus-live,这是韓國. 因此它正在取代交互式 shellscript dus

dus-live可以管理以下类型的源文件,

  • 文件.iso
  • 文件.img
  • 文件.img.gz
  • 文件.img.xz

并且目标系统可以同时具有 MSDOS 和 GUID 分区表(当目标驱动器大于映像中原始系统的大小时)。

我用过这个名字autoclone

#!/bin/bash

# Date        Sign     Comment
# 2017-06-30  sudodus  Created
# 2017-07-01  sudodus  checking that there is 1 possible target drive

wait=30

read -t "$wait" -p "WARNING: After $wait seconds '$0' will CLONE AUTOMATICALLY;
from the file given as parameter to the first detected drive
(except the live drive), so it will be overwritten.
If this is not what you want or if you are not sure, PRESS {ctrl + C} NOW !
...
"

function power_off {
read -t "$wait" -p "WARNING: After $wait seconds '$0' will POWEROFF automatically;
If this is not what you want or if you are not sure, PRESS {ctrl + C} NOW !
...
"
sudo poweroff
}

user=$(whoami)
if [ "$user" != "root" ]
then
 echo "run $0 with sudo or as root"
 exit
fi
if [ "$1" == "" ] || ! test -s "$1"
then
 echo "Usage:   sudo $0 <with an iso file or image file as parameter>"
 echo "Example: sudo $0 \"file.iso\""
 echo "Example: sudo $0 \"file.img\""
 echo "Example: sudo $0 \"file.img.xz\""
 exit
fi

source="$1"

livedrive=$(lsblk -lo name,type,mountpoint | \
grep -m1 -e /$ -e /cdrom$ -e /lib/live/mount/medium -e /lib/live/mount/persistence)
#echo "$livedrive"
livedrive=${livedrive:0:3}
echo "livedrive=/dev/$livedrive"

number_of_targets=$(lsblk -ldo name,type|grep -v "$livedrive"|grep -v zram|grep disk|wc -l)
           target=$(lsblk -ldo name,type|grep -v "$livedrive"|grep -v zram|grep disk)

#echo "target=$target"
# echo "number_of_targets=$number_of_targets"
# sudo lsblk -o name,model,size,type,fstype,label,mountpoint | \
#  grep -v "$livedrive"|grep -v zram| grep -v loop|grep -v ' rom '
####

if [ $number_of_targets -ne 1 ]
then
 echo '--------------------------------------------------------'
 sudo lsblk -o name,model,size,type,fstype,label | \
  grep -v "$livedrive"|grep -v zram| grep -v loop|grep -v ' rom '
 echo "$number_of_targets possible target drives found, but
1 possible target drive should be found
for '$0' to work correctly."
 if [ $number_of_targets -gt 1 ]
 then
  echo "--------------------------------------------------------
- Please remove every other possible target drive!
- Or are you running in the wrong computer?"
 fi
 echo "--------------------------------------------------------"
 wait=60
 power_off
 exit
fi
target=/dev/${target:0:3}

echo "target=$target"

umount "$target"?*

paramfromfile=$(mktemp)

echo "$source
$target" > "$paramfromfile"

# do it with dus-live, which comes with mkusb version 12-

echo "calling 'dus-live' ..."
dus-live pff:"$paramfromfile"

power_off

在持久实时系统中进行了测试

我测试了它在两个持久实时系统中的运行情况,它们可以从压缩映像文件安装,

请点击此链接查看有关此方法的更多详细信息,

自动启动

当将以下行附加到自动启动时,此脚本可以在 Lubuntu 中通过以下命令自动启动,

echo 'xterm -fa default -fs 12 -title autoclone -e sudo /home/lubuntu/autoclone dd_no-biggie-68MB.img.xz' >> ~/.config/lxsession/Lubuntu/autostart

修改它以与实际的“dd”图像/path/name和 shellscript 的实际位置相匹配。

9w中对应的命令是

echo '@xterm -fa default -fs 12 -title autoclone -e sudo /root/autoclone /root/dd_no-biggie-68MB.img.xz' >> ./.config/lxsession/LXDE/autostart

您自己的定制系统

您可能想要或必须创建自己的自定义系统(实时、永久实时或安装在 USB 驱动器或存储卡中)。您可能可以dus-live用简单的dd命令行来代替,至少如果您要安装的系统使用 MSDOS 分区表的话。

免责声明

这个脚本写得相当快,经我测试,它能正常工作,但还有很多情况没有测试过,可能会发生意外情况。所以请在没有可能被覆盖的驱动器上测试它。

截图

Lubuntu 的三张截图

在前 30 秒内,您可以使用热键组合Ctrl + C停止自动克隆,

在此处输入图片描述

控制台输出:此阶段系统正在同步(将缓冲区刷新到目标驱动器),

在此处输入图片描述

在 30 秒内,您可以使用热键组合Ctrl + C为了避免关机(如果您希望留在 Lubuntu 桌面会话中),

在此处输入图片描述

9w的对应截图

在此处输入图片描述

答案2

您是否考虑过使用 Hak5 的 USB 橡皮鸭https://hakshop.com/collections/usb-rubber-ducky在双鸭模式下。我用它们在 7 台机器上安装了 Ubuntu。在每台机器上,我所要做的就是重新启动系统,将小黄鸭插入 USB 端口,因为我的系统始终优先从 USB 启动,所以这很容易。但您可以使用两个小黄鸭,用一个来调整 BIOS 首选项并从 USB 启动,同时使用另一个作为实时启动闪存驱动器和键盘来浏览启动unetbootin安装菜单生成的设置启动画面。只要有一点耐心和反复试验,你就可以做到。而且由于不需要现场技术人员,您可以将准备好的小黄鸭邮寄给物理上接近并可以访问系统的人。

在 Twin-Duck 模式下,小黄鸭既可充当 HID(在我们的例子中是键盘),又可充当 USB 大容量存储设备。因此,您只需要在unetbootin小黄鸭的 USB 大容量存储上制作一个可启动闪存盘,然后使用 HID(键盘)自动化 - 按键注入 - 功能来自动执行安装操作系统时所需的导航(按键)。您甚至可以在无头系统上执行此操作。

相关内容