如何制作可启动,无人值守的USB还原磁盘?

在全国各地,我有14.04个信息亭系统。 这些是可怕的小型集成设备。 我需要将它们全部升级到16.04才能支持新的软件堆栈。 do-release-upgrade工作的一半时间。 另一半它破坏了安装。 此外,CPU 非常慢,某些站点的网络连接也非常粗制滥造。 所以即使它工作,升级也需要很长时间。

所以新计划。
我可以为Virtualbox或LXC中的每个信息亭制作一个完整安装的系统映像。
我需要一种方法将这些图像解压缩到系统上。

这里的主要问题是另一端的技术人员很少。 我自己也不想飞200英里。 我需要的东西几乎完全自动化,不需要键盘。

我在想象一个场景:

  • 我为每个售货亭制作一张系统图片
  • 我为每个信息亭制作一个可启动的USB驱动器,并在信息亭图像上复制。
  • 我标记每个并发布它们。
  • 另一方面,具有物理访问USB端口的工作人员只需插入正确的驱动器并重新启动即可。
  • 然后,它的可引导元素写入并扩展磁盘映像。

这就是我正在寻找的“可引导元素”。 我期待这样的事情可能已经存在(对于批量重新成像安装),但我可能在新的领域。 任何能够安装我的图像而不受人工干扰(过去插入)的东西都会获得积分。

据我所知,像Clonezilla这样的选项需要有键盘的人告诉它该怎么做。 我需要一些不需要键盘的东西,只需要上手即可。

shell脚本

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

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

shellscript调用dus-live ,这是mkusb的执行部分。 所以它正在取代交互式shellcript dus

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

  • file.iso
  • file.img
  • file.img.gz
  • file.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 " 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 

在持久性实时系统中测试

我测试它在两个持久的实时系统中工作,可以从压缩的图像文件安装,

  • phillw.net/isos/linux-tools/uefi-n-bios/dd_Lubuntu_16.04.2_i386_persist-live_mkusb-12.1.4_7.8GB_msdos-pt.img.xz(8080 MiB)

  • phillw.net/isos/linux-tools/9w/9w-dus_debian-jessie-i686-persist-live_2017-06-07_4GB.img.xz(362 MiB)

在此链接中查看有关此方法的更多详细信息,

  • 具有持久性实时系统的压缩图像文件

自动开启

当以下行通过以下命令在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驱动器或存储卡中)。 您可以使用简单的dd命令行替换dus-live ,至少在您要安装的系统使用MSDOS分区表时。

放弃

这个shellcript的制作速度相当快,它的工作原理经过了我的测试,但有很多案例没有经过测试,可能会发生意想不到的事情。 因此,请测试它,没有可能被覆盖的有价值数据的驱动器。

截图

Lubuntu的三个截图

在前30秒内,您可以使用热键组合ctrl + C来停止自动升级,

在此处输入图像描述

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

在此处输入图像描述

在30秒内你可以使用热键组合ctrl + C来避免断电(如果你想留在Lubuntu桌面会话中),

在此处输入图像描述

9w的相应屏幕截图

在此处输入图像描述

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

当处于Twin-Duck模式时,橡胶鸭子既可以作为HID(在我们的例子中是键盘),也可以作为USB大容量存储设备。 因此,您只需要将带有unetbootin的可启动闪存盘放到Rubber Ducky的USB大容量存储器上,并使用HID(键盘)自动化 – 按键注入 – function来自动化安装操作系统时所需的导航(击键)。 你甚至可以在无头系统上做到这一点。