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 在 解析器实现
每月 57 次下载
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