#mbr #parser #raspberry-pi #ms-dos #no-alloc #主引导记录

无std mbrs

主引导记录解析、操作和二进制导出

9个版本

0.3.1 2023年9月26日
0.3.0 2023年9月26日
0.2.4 2023年9月21日
0.1.1 2023年9月21日

#789解析器实现

Download history 1/week @ 2024-03-09 1/week @ 2024-03-16 48/week @ 2024-03-30 10/week @ 2024-04-06

每月 57 次下载

MIT/Apache

31KB
775

mbrs

主引导记录解析、操作和二进制导出。

MBR 是一个传统的引导扇区格式,例如在旧版Windows系统中使用,并且在树莓派上仍在使用。

我编写这个库是为了个人使用,因为我使用 parted 处理树莓派镜像时感到烦恼,所以我主要关注这个用例。这意味着并不支持所有不同的历史MBR结构(例如磁盘时间戳),并且一些狭窄的分区类型标识符可能未实现。目前我们实现的MBR与德国维基百科页面上的描述完全一致。如果您需要其他分区类型、时间戳或其他内容,请提交问题(或PR),我可能会考虑。

我不认为你需要它,但这个crate支持 no_std - 只需禁用默认启用的 std 特性。

示例

let raspios_img = File::open("./raspios.img").unwrap();
let mbr = Mbr::try_from_reader(raspios_img).unwrap();
// print it
dbg!(mbr);
// read out the drive signature
let partuuid = format!("{:x}", u32::from_le_bytes(mbr.drive_signature));
println!("PARTUUID: {}", partuuid);

// read the MBR off a raspberry pi image file
let raspios_img = File::open("./raspios.img").unwrap();
let mut mbr = Mbr::try_from_reader(raspios_img).unwrap();
// modify the drive signature
mbr.drive_signature = 0x090b3d33_u32.to_le_bytes();
// add a new BTRFS 1024 sector big partition 
mbr.partition_table.entries[2] = Some(
    PartInfo::try_from_lba(
        true,
        mbr.partition_table.entries[1].unwrap().end_sector_lba(),
        1024,
        PartType::btrfs(),
    )
    .unwrap(),
);
// write the modified MBR to a new file
let mut out_file = File::create("./out.img").unwrap();
let buf = <[u8; 512]>::try_from(&mbr).unwrap();
out_file.write_all(&buf).unwrap();

依赖项

~78–310KB