使用 msdos 分区表和 fat32 创建磁盘映像

使用 msdos 分区表和 fat32 创建磁盘映像

我想创建一个磁盘映像文件以包含在我的单元测试中。这个磁盘文件应该包含一些我想读取的文件。当我创建 SD 卡或 USB 记忆棒的副本时,dd磁盘映像非常大,即使压缩它,大小也太大。

所以我想创建一个新的磁盘映像并随后安装它。然后添加新数据并压缩磁盘映像以进行版本控制

我目前的步骤:

  1. 创建磁盘映像:dd if=/dev/zero of=DISK1.img bs=1M count=1200
  2. 打开分开:sudo parted DISK1.img
  3. 创建分区表(使用parted):mklabel msdos
  4. 创建分区(带parted):mkpart primary fat32 1MB 100%
  5. 打印:
    (parted) print                                                            
    Modell:  (file)
    Festplatte  <path>/DISK1.img:  1258MB
    Sektorgröße (logisch/physisch): 512B/512B
    Partitionstabelle: msdos
    Disk-Flags: 
    
    Nummer  Anfang  Ende    Größe   Typ      Dateisystem  Flags
     1      1049kB  1258MB  1257MB  primary  fat32        lba
    

现在,当我退出并重新打开parted时,文件系统不再被识别:

(parted) print                                                            
Modell:  (file)
Festplatte  <path>/DISK1.img:  1258MB
Sektorgröße (logisch/physisch): 512B/512B
Partitionstabelle: msdos
Disk-Flags: 

Nummer  Anfang  Ende    Größe   Typ      Dateisystem  Flags
 1      1049kB  1258MB  1257MB  primary               lba

如何从头开始创建图像?

编辑 2024-03-02

使用@Stephen Kitt 的评论,它起作用了:

  1. dd if=/dev/zero of=DISK1.img bs=1M count=1200
  2. parted DISK1.img
  3. 创建分区表(使用parted):mklabel msdos
  4. 创建分区(带parted):mkpart primary fat32 1MB 100%
  5. 退出分手
  6. mkfs.vfat -v --offset 2048 DISK1.img

挂载分区:

  1. 找到startsector:(fdisk -lu DISK1.img同上)
  2. 获取偏移量(以字节为单位):512bytes * 2048sectors = 1048576
  3. lopsetup分区:sudo losetup -o 1048576 /dev/loop0 DISK1.img
  4. 山:sudo mount /dev/loop0 DISK_MOUNT
  5. 将数据复制到已安装的分区(需要root)
  6. 卸载sudo umount /dev/loop0
  7. 分离lostup:sudo losetup -d /dev/loop0

现在新数据位于磁盘映像中

答案1

您的步骤是正确的,只需添加:

sudo mkfs.vfat -F 32 DISK1.img在程序中的步骤 1 之后和步骤 2 之前。

请参阅mkfs.vfat 联机帮助页

答案2

parted创建分区表和分区条目,但您还需要创建文件系统:parted在步骤 5 后退出,然后使用适当的偏移量创建文件系统(我正在使用它,-v以便mkfs.vfat显示它正在做什么):

$ /sbin/mkfs.vfat -v --offset 2048 DISK1.img
mkfs.fat 4.2 (2021-01-31)
Auto-selecting FAT32 for large filesystem
DISK1.img has 64 heads and 63 sectors per track,
hidden sectors 0x0000;
logical sector size is 512,
using 0xf8 media descriptor, with 2455551 sectors;
drive number 0x80;
filesystem has 2 32-bit FATs and 8 sectors per cluster.
FAT size is 2400 sectors, and provides 306339 clusters.
There are 32 reserved sectors.
Volume ID is 97413b09, no volume label.

这会将第一个分区(从扇区 2048 开始)格式化为 FAT32 卷。当您重新加载图像时parted,它将显示:

$ /sbin/parted DISK1.img
(parted) print
Disk …/DISK1.img: 1258MB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags: 

Number  Start   End     Size    Type     File system  Flags
 1      1049kB  1258MB  1257MB  primary  fat32        lba

一般来说,要在处理图像时确定适当的偏移量,您可以将单位更改为parted扇区:

(parted) unit s                                                           
(parted) print                                                            
Model:  (file)
Disk …/DISK1.img: 2457600s
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags: 

Number  Start  End       Size      Type     File system  Flags
 1      2048s  2457599s  2455552s  primary  fat32        lba

(请注意,由于您正在处理自己的磁盘映像,因此不需要sudo,只需指定parted和的完整路径,mkfs.vfat因为它们位于/sbin或中/usr/sbin,因此不在您的 中PATH。)

如果你不这样做需要映像中的分区表,您可能会发现使用文件系统映像比使用完整磁盘映像更容易;您可以通过一个命令完成所有操作mkfs.vfat

$ /sbin/mkfs.vfat -v -C DISK2.img $((1200*1024))
mkfs.fat 4.2 (2021-01-31)
Auto-selecting FAT32 for large filesystem
DISK2.img has 64 heads and 63 sectors per track,
hidden sectors 0x0000;
logical sector size is 512,
using 0xf8 media descriptor, with 2457567 sectors;
drive number 0x80;
filesystem has 2 32-bit FATs and 8 sectors per cluster.
FAT size is 2400 sectors, and provides 306591 clusters.
There are 32 reserved sectors.
Volume ID is a452a0bf, no volume label.

相关内容