作者:gzshun. 原创作品,转载请标明出处!
在嵌入式Linux中,经常涉及到格式化硬盘,常用的工具就是fdisk,这工具功能强大,busybox里面也实现了fdisk。当busybox实现的fdisk是简化版,与原版的GNU的fdisk相差挺大的,主要是缺少一些细节性的功能。
本文主要是说明fdisk写入MBR的一个磁盘可选id,这个区域可以用来唯一的标记一块硬盘,总共有4个字节,2的32次方中情况。
以后将会详细的介绍MBR结构。。
以下是摘自维基百科的一个表格,介绍MBR的结构:
Structure of a master boot record
Address
Description
Size in bytes
Hex
Oct
Dec
0000
0000
0
code area
440(max. 446)
01B8
0670
440
disk signature (optional)4 (本文涉及到该区域)
01BC
0674
444
Usually nulls; 0x0000
2
01BE
0676
446
Table of primary partitions(Four 16-byte entries, IBM partition table scheme)
64
01FE
0776
510
55h
MBR signature
2
01FF
0777
511
AAh
MBR, total size: 446 + 64 + 2 =
512
如果要修改该区域,需要确保该区域的地址,地址是:440-443;该区域占4个字节,只需要用一个int型变量即可读取。
源码如下:
上面已经说了,busybox可能没有实现fdisk这个功能,有些时候嵌入式系统需要标志硬盘ID,所以需要随机产生一个数字来写入硬盘的MBR的磁盘可选id的区域,这随便产生一个随机数就行,可以使用time(NULL)获取,很简单。
在GNU的fdisk源码中,使用以下函数来生成唯一id:
该函数是去读取/dev/urandom设备,该设备用于产生一个无符号的随机数,如果读取失败,将会直接返回进程的pid与当前的unix时间的总和,以保证返回一个唯一的id。
以下源码产生一个唯一id,并写入mbr的磁盘可选id的区域:
这里一定要指定4个字节,如果不确定,可能会造成越界,影响到其他区域。
保存在该区域,不会影响到MBR的正常使用,这区域本来就是保留着,可选使用。
分享到:
相关推荐
在IT行业中,尤其是在服务器管理与数据中心领域,操作系统如Red Hat Enterprise Linux (RHEL)经常需要处理容量庞大的硬盘,以满足存储需求。本篇文章将详细探讨如何在Linux系统,特别是RHEL 5、6和7版本中,对大于16...
通过研究源代码,开发者可以了解到如何在没有高级API的情况下进行底层硬件操作,这对于嵌入式系统开发或者系统级编程来说是非常宝贵的。 总的来说,FDISK作为DOS时代的标志性工具,其C源码是理解早期计算机硬件操作...
7. **编译内核**:选择特定版本(如2.6.31.3)的Linux内核源代码进行编译,然后将编译后的`vmlinuz`内核文件复制到`mnt/boot`目录下。 8. **制作initrd.gz**:initrd(initial RAM disk)是启动过程中临时使用的...
如果在Windows系统下删除了包含Linux分区的硬盘,可能会导致GRUB丢失,进而影响Windows系统的启动。为了避免这种情况,可以通过备份GRUB配置文件等方式进行预防。 #### 四、挂载与挂载点 - **挂载** 是指将一个...
标题中的“获取MBR的命令行小工具”指的是在DOS环境下使用命令行工具来读取和分析硬盘的主引导记录(Master Boot Record,简称MBR)。MBR是硬盘的第一个扇区,它包含了启动信息和分区表,对于系统启动和管理硬盘分区...
1. **分区表管理**:fdisk工具是如何与磁盘上的分区表交互的,包括MBR(主引导记录)和GPT(GUID分区表)两种不同类型的分区表结构。 2. **命令行界面**:如何设计一个简单的命令行界面,让用户输入命令并执行相应...
- 图形界面的可选项不同:Linux的图形界面是可选的,且与系统核心分离;而Windows的图形界面通常是必需的。 - 命令和文件名的大小写敏感性不同:Linux命令和文件名区分大小写,而Windows不区分。 #### 第二章:...
在深入探讨Linux分区详解之前,我们首先需理解Linux操作系统下的磁盘分区概念及其重要性。Linux作为一款开源、免费且高度可定制的操作系统,在服务器、嵌入式设备以及个人计算机领域有着广泛的应用。其强大的文件...
尤其在没有图形化界面的环境中,如DOS或某些嵌入式系统,熟悉Fdisk的操作是必不可少的技能。 总的来说,这款Fdisk模拟学习程序是一个实用的教育资源,它为学习者提供了安全、便捷的方式,让他们能够深入理解和熟练...
1. **Linux系统介绍**:Linux是一种开源的操作系统,具有高度可定制性和稳定性,广泛应用于服务器、嵌入式设备和桌面环境。了解Linux的历史、哲学以及与其他操作系统(如Windows和Mac OS)的区别是学习的基础。 2. ...
3. **FDISK**:这是Linux或DOS系统中用于分区管理的工具。在C语言实现FAT32时,可能需要实现类似的功能,如创建、删除、修改分区,这涉及到对硬盘扇区的直接操作和理解MBR(主引导记录)和分区表的结构。 4. **NAND...
- **分区与格式化**:理解MBR与GPT分区表,学会使用fdisk创建分区。 - **挂载与卸载**:了解mount命令,学会动态挂载和卸载文件系统。 9. **防火墙与安全** - **iptables**:掌握iptables规则,实现端口过滤和...
通常,这包括创建一个主分区用于存储操作系统映像,以及一个可选的交换分区或数据分区。这个过程确保了SD卡的结构符合启动要求。 其次,SD-Flasher会将引导加载器(如GRUB或U-Boot)写入SD卡的主引导记录(MBR),...
2. **分区问题**:如果Ubuntu无法识别或访问分区,可能需要检查磁盘分区表(MBR或GPT)的完整性,使用`fdisk`或`gdisk`工具进行修复。同时,确认分区的UUID是否正确配置在 `/etc/fstab` 文件中。 3. **系统文件丢失...
- **外部命令**:如FORMAT(格式化磁盘)、REN(重命名文件)等,它们是单独的可执行文件,需要调用DOS内核来执行。 3. **文件管理** - 文件名:DOS文件名最多8个字符,扩展名最多3个字符,如FILE.TXT。 - 目录...
DOS(Disk Operating System)是个人计算机上最早期的操作系统之一,主要负责管理磁盘存储、处理输入输出以及提供用户接口。在这个“DOS方面的资料”压缩包中,你可能会找到关于DOS基本语法和使用的详细信息。让我们...
Ubuntu,一个流行的Linux发行版,提供了丰富的命令行工具,如`dd`,可以用来复制镜像到SD卡,以及`fdisk`用于管理磁盘分区。 "shell脚本量产SD启动卡"则是指编写一个Shell脚本来自动化这个过程。通过脚本,我们可以...
这里`if`表示输入文件,`of`表示输出文件,`bs`指定块大小为1K,`seek`指定从第一个扇区开始写入,`skip`跳过一个扇区不写入(通常用于保留MBR),最后两个`sync`命令用于确保数据被立即写入磁盘。 4. **烧写内核...
4. **磁盘操作**:`FORMAT`用于格式化磁盘,`DISKCOPY`复制整个磁盘内容,`FDISK`进行分区管理,虽然在后来的DOS版本中被`Fdisk /mbr`替换。 5. **批处理命令**:`批处理文件`(扩展名为.BAT)可以集合一系列DOS...
- `fdisk /mbr`:重建主引导记录,可用于清除某些特定类型的软件锁。 - `format [drive letter]: /q /u /autotest`:快速格式化指定驱动器,其中`/q`表示快速格式化,`/u`表示不可恢复格式化,`/autotest`表示自动...