如何处理从 Ubuntu 16.04 向 FAT12 软盘映像添加新文件和目录?

如何处理从 Ubuntu 16.04 向 FAT12 软盘映像添加新文件和目录?

我需要编写一个程序来创建 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 等)直接更新图像,而不是安装它。

相关内容