我的日常任务之一是使用我们的软件创建 USB 闪存盘的可启动映像。映像必须包含两个分区,第一个分区为 FAT32,第二个为 EXT3。首先,我们将 Linux 内核和一个小的启动脚本放在我们要启动的设备上的引导加载程序中,并在启动时读取。
在第二个分区上,我们放置了 rootfs。
现在,这是我的做法:
将 USB 随身碟插入我的 Linux comp。找出它的设备文件(这里假设/dev/sdx)
将它的前 600 MB 清零:dd if=/dev/zero of=/dev/sdx bs=1M count=600
创建两个分区,第一个 10 MB 和第二个 500 MB: sfdisk /dev/sdx --unit S << EOF ,20000,c ,1000000,83 EOF
mkfs.vfat /dev/sdx1 mkfs.ext3 /dev/sdx2
(假设扇区大小为 512 字节!)
现在,所有这些都有效。明显的改进是创建一个脚本来自动完成这一切。这也可以完成,但仍然需要一个手动步骤:插入 USB 随身碟。
我在想,我们可以使用 RAM 中的块设备来代替实际的 USB 磁盘。这样不仅可以省去手动插入U盘的步骤,而且速度也会更快。
所以我需要的是 RAM 中的普通块设备。可以像物理 USB 笔式驱动器一样分成多个分区。
我刚刚研究了这个话题,似乎唯一的选择是
并且它们中的每一个都可以单独格式化和使用,但就像我说的 - 我想要一个 RAM 中的普通块设备,然后我自己将其分成 10MB 和 500MB 的两个分区,然后我可以从那里添加一个图像到我硬盘上的文件。
我有哪些选择?
Fox*_*Fox 18
只需使用 brd 并创建一个 brd 设备(ram0)。使用该设备代替 USB 驱动器。您可以使用 sfdisk 对其进行分区,使用分区,然后使用 dd 将其内容转储到文件中。
无需为每个 brd 设备使用一个文件系统。
或者(虽然有点笨拙)您可以使用 tmpfs,创建图像文件并将其用作循环设备。这可能是完成您想要的事情的最简单方法。作为奖励,您已准备好该图像并可以立即上传。不需要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
Run Code Online (Sandbox Code Playgroud)
修改以满足您的需求。