linux – 在RAM中创建块设备
我的日常任务之一是使用我们的软件创建USB pendrive的可启动映像.图像必须由两个分区组成,第一个用FAT32格式化,第二个用EXT3格式化.首先,我们将
Linux内核和一个小的启动脚本放在我们要启动的设备上的bootloader上,并在启动时读取.
在第二个分区,我们放置了rootfs. 现在,我是这样做的: >将USB pendrive插入我的Linux comp.弄清楚它的设备文件(这里让我们假设/ dev / sdx) mkfs.vfat / dev / sdx1 (假设扇区大小为512字节!) >将内核和启动脚本复制到/ dev / sdx1 现在,所有这些都有效.显而易见的改进是创建一个可以自动执行此操作的脚本.这也可以完成,但仍会保留一个手动步骤:插入USB pendrive. 我想的不是实际的USB磁盘,而是我们可以在RAM中使用块设备.这不仅会消除插入USB磁盘的手动步骤,而且会更快. 所以我需要的是RAM中的普通块设备.可以像物理USB pendrive一样拆分成分区的一个. 我只是研究了这个主题,似乎是唯一的选择 > tmpfs和ramfs,显然不适合我 并且它们中的每一个都可以单独进行格式化和使用,但就像我说的那样 – 我想在RAM中使用一个普通的块设备,然后我将自己分成10MB和500MB的两个分区,然后从那里我可以得到一个图像到我硬盘上的文件. 我有什么选择? 解决方法
只需使用brd并创建一个brd设备(ram0).使用该设备代替USB驱动器.您可以使用sfdisk对其进行分区,使用分区然后使用dd将其内容转储到文件.
每个brd设备不需要使用一个文件系统. 或者(虽然很少hacky)你可以使用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 修改以满足您的需求. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |