我的日常任务之一就是用我们的软件创build一个USB pendrive的可启动镜像。 该映像必须由两个分区组成,第一个分区使用FAT32格式化,第二个分区使用EXT3格式化。 首先,我们把Linux内核和一个小的启动脚本放在设备上的引导加载程序,我们将在启动时读取。
在第二个分区上,我们放置了rootfs。
现在,我是这样做的:
插入一个USB pendrive到我的Linux comp。 找出它的设备文件(这里我们假设/ dev / sdx)
把它的前600MB清零:dd if = / dev / sdx = / dev / sdx bs = 1M count = 600
创build两个分区,第一个10 MB和第二个500 MB:sfdisk / dev / sdx –unit S << EOF,20000,c,1000000,83 EOF
mkfs.vfat / dev / sdx1 mkfs.ext3 / dev / sdx2
(这是假定扇区大小是512字节!)
现在,所有这些工作。 显而易见的改进是创build一个能够自动执行此操作的脚本。 这也可以完成,但一个手动步骤将仍然存在:插入USB随身碟。
我在想,而不是实际的USB磁盘,我们可以在RAM中使用块设备。 这不仅会消除插入USB磁盘的手动步骤,而且会更快。
所以我需要的是RAM中的一个普通块设备。 一个可以像物理USB pendrive一样分割成分区。
我刚刚研究这个话题,似乎是唯一的select
他们每个人都可以单独格式化和使用,但就像我说的 – 我想要一个普通的块设备在RAM中,然后我会分裂成两个分区10MB和500MB我自己,然后从那里我可以然后dd图像到我的硬盘上的文件。
我有什么select?
只需使用brd并创build一个brd设备(ram0)。 使用该设备代替你的USB驱动器。 您可以使用sfdisk对其进行分区,使用分区,然后使用dd将其连续转储到文件。
每个brd设备不需要使用一个文件系统。
或者(尽pipe很小),你可以使用tmpfs,创build图像文件,并使用它作为循环设备。 这可能是最简单的方法来实现你想要的。 作为奖励,你准备好了这个图像,并可以立即上传。 不需要dd。
# Create mountpoint for tmpfs mkdir /tmp/tmpfs # Mount tmpfs there mount -t tmpfs none /tmp/tmpfs # Create empty file of 600MB # (it creates 599MB hole, so it does not # consume more memory than needed) dd if=/dev/zero of=/tmp/tmpfs/img.bin bs=1M seek=599 count=1 # Partition the image file cfdisk /tmp/tmpfs/img.bin # Create loop block device of it (-P makes kernel look for partitions) losetup -P /dev/loop0 /tmp/tmpfs/img.bin # Create filesystems mkfs.vfat /dev/loop0p1 mkfs.ext4 /dev/loop0p2 # Now it's your turn: # mount loop0p1 and loop0p2 and copy whatever you want and unmount it # detach the loop device losetup -d /dev/loop0 # May i present you with your image ... ls -al /tmp/tmpfs/img.bin
修改以适应您的需求。