如何通过网络对嵌入式 ubuntu 设备进行映像处理?

如何通过网络对嵌入式 ubuntu 设备进行映像处理?

背景信息

我有一个运行 Ubuntu 12.04 的嵌入式系统,我需要升级它来修补一些安全漏洞。更改将包括升级到 ubuntu 14.04、更改位于 /etc、/var、/media 中的几个配置文件以及更新我们的应用程序软件。升级需要推送到大约 1500 个这样的设备,因此我倾向于采用不需要物理访问设备的解决方案。

磁盘信息

root@HBOX-01003d:/dev# sudo fdisk -l

Disk /dev/mmcblk2: 7851 MB, 7851737088 bytes 4 heads, 16 sectors/track, 239616 cylinders, total 15335424 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x00000000

Device Boot      Start         End      Blocks   Id  System /dev/mmcblk2p1   *        2048      100351       49152    c  W95 FAT32 (LBA) /dev/mmcblk2p2          100352     1329151      614400   83  Linux /dev/mmcblk2p3         1329152    15335423     7003136   83  Linux

Disk /dev/mmcblk2rpmb: 0 MB, 131072 bytes 4 heads, 16 sectors/track, 4 cylinders, total 256 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x00000000

Disk /dev/mmcblk2rpmb doesn't contain a valid partition table

Disk /dev/mmcblk2boot1: 2 MB, 2097152 bytes 4 heads, 16 sectors/track, 64 cylinders, total 4096 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x00000000

Disk /dev/mmcblk2boot1 doesn't contain a valid partition table

Disk /dev/mmcblk2boot0: 2 MB, 2097152 bytes 4 heads, 16 sectors/track, 64 cylinders, total 4096 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x00000000

Disk /dev/mmcblk2boot0 doesn't contain a valid partition table root@HBOX-01003d:/dev# sudo parted -l Error: /dev/mmcblk2rpmb: unrecognised disk label

Error: /dev/mmcblk2boot0: unrecognised disk label

Error: /dev/mmcblk2boot1: unrecognised disk label

Model: MMC MMC08G (sd/mmc) Disk /dev/mmcblk2: 7852MB Sector size (logical/physical): 512B/512B Partition Table: msdos

Number  Start   End     Size    Type     File system  Flags  1      1049kB  51.4MB  50.3MB  primary  fat32        boot, lba  2      51.4MB 681MB   629MB   primary  ext3  3      681MB   7852MB  7171MB  primary  ext3

首次成像尝试

根据这些信息,我了解到 mmcblk2 驱动器是该系统上使用的主驱动器,并决定对该驱动器进行映像处理。我使用了 ddhttps://help.ubuntu.com/community/DriveImaging创建图像和此帖子中的第二个答案以帮助编写正确的命令:https://unix.stackexchange.com/questions/132797/how-to-dd-a-remote-disk-using-ssh-on-local-machine-and-save-to-a-local-disk

我使用以下命令复制、压缩并将图像发送到远程服务器。

dd if=/dev/mmcblk2 | gzip -c --fast | ssh[电子邮件保护]'dd of=/home/administrator/clone/ubuntu14.gz'

输出结果如下:

15335424+0 records in
15335424+0 records out
7851737088 bytes (7.9 GB) copied, 2038.58 s, 3.9 MB/s
6247083+1 records in
6247083+1 records out
3198506839 bytes (3.2 GB) copied, 2023.36 s, 1.6 MB/s

第一次,我运行此命令登录远程系统,提取图像并将其复制到框中

远程控制[电子邮件保护]'dd if=/home/administrator/clone/hboxClone2.gz' | gunzip -1 - | dd of=/dev/mmcblk2

这显然不起作用,因为我从尝试写入的驱动器启动,导致设备变砖。因此,我使用现有流程刷新设备(需要 peedi 盒、串行连接和固件服务器)并重新开始。

问题

因此,我有几个低级问题,我觉得在继续制定解决方案之前必须先回答这些问题。

1) 对 mmcblk2 驱动器进行映像处理是否足以创建系统副本?从 fdisk 输出很难判断所有内容是否仅存储在 mmcblk2 磁盘上。

2) 分区 1 或 2 可用于映像吗?我想我可以只对第一个分区进行映像,写入其他两个分区之一,然后交换我从哪个分区启动?我在网上读到过有关交换驱动器的信息,我想知道是否可以将这个相同的概念应用于分区。我担心的另一件事是可能会有某些内容写入这些分区(这就是我最初尝试对整个驱动器进行映像的原因)。

从另一台机器恢复后,如何修复 Grub 中的 UUID?

以下是 fstab 文件中的内容:

# UNCONFIGURED FSTAB FOR BASE SYSTEM
#/dev/mmcblk0p2   /           auto   errors=remount-ro   0   1
#/dev/mmcblk0p1   /boot/uboot auto   defaults            0   2
rootfs               /                    auto       defaults              1  1
proc                 /proc                proc       defaults              0  0
devpts               /dev/pts             devpts     mode=0620,gid=5       0  0
usbdevfs             /proc/bus/usb        usbdevfs   noauto                0  0
tmpfs                /var/volatile        tmpfs      defaults              0  0
tmpfs                /media/ram           tmpfs      defaults              0  0
/hibernateswap           none                             swap           sw
                           0  0
# uncomment this if your device has a SD/MMC/Transflash slot
#/dev/mmcblk0p1       /media/card          auto       defaults,sync,noauto  0  0 

相关内容