美文网首页
扫描磁盘分区表

扫描磁盘分区表

作者: HAPPYers | 来源:发表于2019-12-12 10:45 被阅读0次

Linux 中所有的设备都在/dev/目录下,硬盘命名规则是[x]d[y][n],其中只有字母 d 是固定的,其他带中括号的字符都是多选值,下面从左到右介绍各个字符。

  • x 表示硬盘分类,硬盘有两大类, IDE 磁盘和 SCSI 磁盘。 h 代表 IDE 磁盘, s 代表 SCSI 磁盘,故 x 取值为 h 和 s。
  • d 表示 disk,即磁盘。
  • y 表示设备号,以区分第几个设备,取值范围是小写字符,其中 a 是第 1 个硬盘, b 是第 2 个硬盘, 依次类推。
  • n 表示分区号,也就是一个硬盘上的第几个分区。分区以数字 l 开始,依次类推。 综上所述, sda表示第 1 个 SCSI 硬盘, hdc 表示第 3 个 IDE 硬盘, sdal 表示第 1 个 SCSI 硬盘的第 1 个分区, hdc3 表示第 3 个 IDE 硬盘的第 3 个分区。这里统一用 SCSI 硬盘的命名规则来命名虚拟硬盘 hd60M.img 和 hd80M。其中 hd60M.img 为 sda, hd80M.img为sdb。hd60M.img 是裸盘,没有文件系统和 分区,因此我们只处理 hd80M.img,将其上的主分区占据 sdb[l~4],逻辑分区占据 sdb[5~]

__attribute__是gcc特有的关键字,用于告诉 gcc在编译时需要做些“特殊处理”, packed就是“特殊处理”, 意为压缩的。__attribute__ ((packed))即不允许编译器为对齐而在此结构中填充空隙,从而保证结构partition_table_entry的大小是 16 宇节,这与分区表项的大小是吻合的。
在vs中,可以使用类似的代码

#pragma pack(push)
#pragma pack(__packed__)
typedef struct{
      int a;
      char b;
      long l;
}test1;
typedef struct{
      char a1;
      char a2;
      test1 t1;
      double b1;
} test2;
#pragma pack(pop)

扇区的结构

/*------------------ partition structure define ------------------------------- */
//partition_table struct (16byte)
struct partition_table_entry {
   uint8_t  bootable;        // 是否可引导   
   uint8_t  start_head;      // 起始磁头号
   uint8_t  start_sec;       // 起始扇区号
   uint8_t  start_cylinder;      // 起始柱面号
   uint8_t  fs_type;         // 分区类型
   uint8_t  end_head;        // 结束磁头号
   uint8_t  end_sector;      // 结束扇区号
   uint8_t  end_cylinder;        // 结束柱面号

   uint32_t start_lba;       // 本分区起始扇区的lba地址
   uint32_t sec_cnt;         // 本分区的扇区数目
} __attribute__ ((packed));  // pack struct to ensure 16byte size

//boot_sector (store mbr/ebr)
struct boot_sector {
   uint8_t  other[446];      // boot code
   struct   partition_table_entry partition_table[4];       // four partition_tables, 64bytes
   uint16_t signature;       // boot sector ends with 0x55,0xaa
} __attribute__ ((packed));
/*----------------------------------------------------------------------------- */

此处在global.h中定义

#define UNUSED __attribute__((unused))

表示某个变量或函数不会用到,避免编译器产生警告信息

相关文章

  • 扫描磁盘分区表

    Linux 中所有的设备都在/dev/目录下,硬盘命名规则是[x]d[y][n],其中只有字母 d 是固定的,其他...

  • 磁盘分区

    磁盘分区工作原理 磁盘是按柱面来分区的。磁盘分区:磁盘分区登记的地点叫做磁盘分区表磁盘分区表用来存放分区结果信息的...

  • centos7磁盘分区、格式化、挂载

    1、分区:a. 查看磁盘分区表: b. 查看指定磁盘分区表: c. 分区命令: 常用命令: d. 创建分区: 2、...

  • 磁盘分区丢失

    磁盘分区丢失,最大的嫌疑是分区表被破坏,因此可以按照下面方法排查磁盘分区信息: 1、获取分区表: dd if=/d...

  • 磁盘挂载相关操作

    查看分区表 fdisk -l 删除原先磁盘的分区 fdisk /dev/vdb => d => wq 对磁盘进行分...

  • Linux常用命令之 - fdisk

    fdisk - Partition table manipulator for Linux 中文的意思是磁盘分区表...

  • Linux查看磁盘信息和挂载磁盘的命令

    1.sudo fdisk -l 查看磁盘信息,包括磁盘的数量和大小等 2.sudo partprobe 重载分区表...

  • fdisk详细剖析笔记

    fdisk 简单使用 fdisk 工具原理就是修改磁盘的分区表,和分区信息。 查看帮助 (1)磁盘列表 (2)管理...

  • 移动硬盘安装Ubuntu系统(UEFI引导)的一些记录

    移动硬盘需要提前将磁盘分区表类型转为GUID(即 GPT) 转换方法:使用DiskGenius软件,选中磁盘右键,...

  • Linux下磁盘分区卸载和磁盘配额

    转载自公众号:谢公子学安全 查看磁盘信息 fdisk : 这个命令是磁盘分区表操作工具,fdisk能将磁盘分区,同...

网友评论

      本文标题:扫描磁盘分区表

      本文链接:https://www.haomeiwen.com/subject/lrwvxctx.html