解析扩展分区的数量
发布日期:2021-07-01 04:27:34
浏览次数:2
分类:技术文章
本文共 2276 字,大约阅读时间需要 7 分钟。
文章目录
1 解析扩展分区的数量
1.1 需求
怎么样在一个磁盘上划分超过4个分区呢?
1.2 实现原理
可以通过在扩展分区下任意划分多个逻辑分区,来突破主分区4个的限制。
扩展分区的各个逻辑分区,通过“链式”结构来连接。1.3 代码实现
/** * 获取扩展分区下的子分区数量 * @param disk 扩展分区所在的存储设备 * @param start_sector 扩展分区所在的起始扇区 * @param count 查询得到的子分区数量 * @return */static xfat_err_t disk_get_extend_part_count(xdisk_t * disk, u32_t start_sector, u32_t * count) { int r_count = 0; u8_t * disk_buffer = temp_buffer; u32_t ext_start_sector = start_sector; do { mbr_part_t * part; // 读取扩展分区的mbr int err = xdisk_read_sector(disk, disk_buffer, start_sector, 1); if (err < 0) { return err; } // 当前分区无效,立即退出 part = ((mbr_t *)disk_buffer)->part_info; if (part->system_id == FS_NOT_VALID) { break; } r_count++; // 没有后续分区, 立即退出 if ((++part)->system_id != FS_EXTEND) { break; } // 寻找下一分区 start_sector = ext_start_sector + part->relative_sectors; } while (1); *count = r_count; return FS_ERR_OK;}/** * 获取设备上总的分区数量 * @param disk 查询的存储设备 * @param count 分区数存储的位置 * @return */xfat_err_t xdisk_get_part_count(xdisk_t *disk, u32_t *count) { int r_count = 0, i = 0; mbr_part_t * part; u8_t * disk_buffer = temp_buffer; u8_t extend_part_flag = 0; u32_t start_sector[4]; // 读取mbr区 int err = xdisk_read_sector(disk, disk_buffer, 0, 1); if (err < 0) { return err; } // 解析统计主分区的数量,并标记出哪个分区是扩展分区 part = ((mbr_t *)disk_buffer)->part_info; for (i = 0; i < MBR_PRIMARY_PART_NR; i++, part++) { if (part->system_id == FS_NOT_VALID) { continue; } else if (part->system_id == FS_EXTEND) { start_sector[i] = part->relative_sectors; extend_part_flag |= 1 << i; } else { r_count++; } } // 统计各个扩展分区下有多少个子分区 if (extend_part_flag) { for (i = 0; i < MBR_PRIMARY_PART_NR; i++) { if (extend_part_flag & (1 << i)) { u32_t ext_count = 0; err = disk_get_extend_part_count(disk, start_sector[i], &ext_count); if (err < 0) { return err; } r_count += ext_count; } } } *count = r_count; return FS_ERR_OK;}
参考资料:
转载地址:https://muzimin.blog.csdn.net/article/details/105784922 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
第一次来,支持一个
[***.219.124.196]2024年04月25日 21时12分38秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
ELK部署搭建
2019-05-02
kafka安装与配置
2019-05-02
filebeat安装配置
2019-05-02
验证日志信息收集成功
2019-05-02
彻底删除Kafka中的topic
2019-05-02
mlanuch文档翻译
2019-05-02
mloginfo文档翻译
2019-05-02
MHA向send_report传递的参数
2019-05-02
master_ip_failover_script脚本何时被调用
2019-05-02
MHA 一个slave宕机的影响
2019-05-02
Mysql使用binlog恢复数据解决误操作问题的两种方法
2019-05-02
理解和配置Out of memory: Kill process
2019-05-02
MySQL binlog格式解析
2019-05-02
mysql优化——explain详解
2019-05-02
linux 下 pip 安装教程
2019-05-02
运维监控系统之Open-Falcon
2019-05-02
数据库对比:选择MariaDB还是MySQL?
2019-05-02
Mysqlbinlog工具及导出数据并转换编码导入
2019-05-02
使用Percona MySQL 5.7版本遇到的坑
2019-05-02