在文件中创建磁盘设备

在文件中创建磁盘设备

我正在尝试使用以下命令在文件中创建磁盘设备:

dd if=/dev/zero of=file.img bs=516096 count=1000
sudo losetup /dev/loop0 file.img
(echo n; echo p; echo 1; echo ""; echo ""; echo w;) | sudo fdisk -u -C1000 -S63 -H16 file.img
sudo mke2fs -b1024 /dev/loop0 503968

谢谢我安装它:

sudo mkdir /mnt/fcd
sudo mount -t ext2 /dev/loop0 /mnt/fcd

并编写自写的引导加载程序:

sudo dd if=loader.bin of=file.img bs=512 count=1 conv=notrunc

并使用以下命令卸载它:

sudo umount /dev/loop0
sudo losetup -d /dev/loop0

我有两个问题:

1.我在 fdisk 中得到以下输出:

Using default response p
Partition number (1-4, default 1): 
Using default value 1
First sector (2048-1007999, default 2048): 
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-1007999, default 1007999): 

为什么第一个扇区是从2048开始而不是从0开始? 0-2048 是用于 ext2 中的 MBR 还是其他?

2.创建磁盘后,我执行:

fdisk -l file.img

它的输出是:

Disk file.img: 516 MB, 516096000 bytes
255 heads, 63 sectors/track, 62 cylinders, total 1008000 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

为什么没有一个分区?

谢谢。

答案1

1.- 最初,fdisk 创建的分区试图使它们与柱面边界对齐,使磁盘上的第一个柱面空闲,因为它将用于 MBR、分区表和其他内容。这样,第一个分区通常从块 63 开始(每个块为 512 字节)。 RedHat 6.x 等发行版中的 fdisk 仍然以这种方式工作,但会警告您并允许您选择非 DOS 兼容模式。

较新的 fdisk 版本,创建与 MB 边界对齐的分区,以确保分区页对齐,因为这会对性能产生巨大影响(如果您对此感到好奇,可以在我的博客上阅读更多相关内容:http://sinrega.org/?p=14http://sinrega.org/?p=13)。 2048 是 1 MB (2048*512)。

2.- 当您在文件支持的设备上创建 ext2 文件系统时,您将覆盖分区表。创建分区后,您应该从与您创建的分区相同的块开始附加另一个循环设备。在您的情况下,由于分区从 2048 开始,因此偏移量应为 1048576 (2048 * 512):

losetup -o 1048576 /dev/loop1 file.img
mkfs.ext2 /dev/loop1
mount /dev/loop1 /mnt
# Do whatever you want with the partition here
umount /mnt
losetup -d /dev/loop1
losetup -d /dev/loop0

这应该可以解决问题。

答案2

sfdisk+mke2fs

可以通过组合这两种工具+一些仔细的偏移计算来做到这一点。

无需 sudo 也可以完全完成此操作。

在这里我描述了一个最小的可运行示例:https://stackoverflow.com/questions/10949169/how-to-create-a-multi-partition-sd-image-without-root-privileges/52850819#52850819

相关内容