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