我需要编写一个程序来创建 FAT12 的软盘映像。说明包括创建引导扇区、确保为两个 FAT 表留出空间、为根目录设置空间以及最后为数据设置空间。但是说明中没有提到有关处理新文件/目录的任何内容。
例如,假设我有一个名为“软盘”的现成软盘映像。然后我可以在 Ubuntu 终端中安装软盘:
sudo mount -o loop,uid=user, gid=user floppy mntpoint/
mkdir mntpoint/test
echo "Hello World" > mntpoint/test/foo
mount 是否会自动识别引导扇区中包含的信息并理解它是 FAT12?如果是,它如何mount
知道将foo
文件放在软盘映像中的何处?我想我必须以某种方式处理这个问题。但我该如何处理这一行,例如,我必须拥有什么样的功能:
echo "Hello World" > mntpoint/test/foo
我用 C 语言编写。我没有添加代码,因为我的问题不是特定于代码的,而是概念性的。以防万一,我添加了引导扇区结构的代码:
typedef struct {
uint8_t bootjmp[3]; /* 0 Jump to boot code */
uint8_t oem_id[8]; /* 3 OEM name & version */
uint16_t sector_size; /* 11 Bytes per sector hopefully 512 */
uint8_t sectors_per_cluster; /* 13 Cluster size in sectors */
uint16_t reserved_sector_count; /* 14 Number of reserved (boot) sectors */
uint8_t number_of_fats; /* 16 Number of FAT tables hopefully 2 */
uint16_t number_of_dirents; /* 17 Number of directory slots */
/*
* If 0, look in sector_count_large
*/
uint16_t sector_count; /* 19 Total sectors on disk */
uint8_t media_type; /* 21 Media descriptor=first byte of FAT */
/*
* Set for FAT12/16 only.
*
* The number of blocks occupied by one copy of the File Allocation Table.
*/
uint16_t fat_size_sectors; /* 22 Sectors in FAT */
uint16_t sectors_per_track; /* 24 Sectors/track */
uint16_t nheads; /* 26 Heads */
uint32_t sectors_hidden; /* 28 number of hidden sectors */
uint32_t sector_count_large; /* 32 big total sectors */
} __attribute__ ((packed)) boot_record_t;
答案1
mount
只是使用与安装真实磁盘和 USB 记忆棒时相同的文件系统驱动程序。所以,是的,它可以识别 FAT12。
-t vfat
您可以使用(或)明确告诉它使用 FAT 驱动程序-t msdos
。如果不这样做,它会尝试自动识别里面的文件系统(如果我没记错的话,使用 libblkid)并仍然调用 vfat。
或者,您也可以使用“mtools”包(mcopy、mdir 等)直接更新图像,而不是安装它。