调试经验--硬盘U菜

随着嵌入式设备功能的开发,随着对存储设备的需求:需要存储大量数据信息。需要在转储数据,U盘升级功能等。

    在使用存储设备的过程中,我们遇到一些问题,也总结了些经验:

1。几个硬盘经常使用命令 

2,硬盘信息分析

3,U盘升级失败的原因分析

4,U盘识别的分区更改为/dev/sda

一。几个硬盘经常使用命令

硬盘分区: fdisk /dev/hda  (np1  w)

格式化硬盘:mkfs.ext2 /dev/hda1

设置UDMA 6 传输模式:hdparm -X70 /dev/hda

查看硬盘信息:smartctl -a /dev/hda

挂载硬盘:mount /dev/hda1 /mnt/hda1

修复ext格式硬盘:e2fsck -y /dev/hda1

查看超级块信息:tune2fs -l /dev/hda1

进行硬盘上1k数据替换:dd if=/dev/hda1 bs=1k skip=131072 count=1 of=/dev/hda1 seek=1

查看超级块备份位置:mke2fs -n /dev/hda1

查看硬盘具体信息(全):dumpe2fs /dev/hda1 |less

二,硬盘信息分析

挂载上一个硬盘,系统启动识别后,能够使用fdisk -l查看到例如以下信息,怎样解读?

Disk /dev/hda: 500.1 GB, 500107862016 bytes

 255 heads, 63 sectors/track, 60801 cylinders

 Units = cylinders of 16065 * 512 = 8225280 bytes

这事实上是一个500G的希捷硬盘, 有255个磁头,每磁头管理60801个柱面,每柱面63个扇区,每扇区512字节。(CHS)

 怎么计算总容量?例如以下:

 255*60801*63*512 = 500107862016 = 500G

按例如以下方法分区格式化后,再查看分区信息:

 分区命令(仅仅分为一个区):

 fdisk /dev/hda   ( d,n,p,1,enter,enter,w, )

格式化命令(ext2格式):

 mkfs.ext2 /dev/hda1

使用命令查看分区的信息:

dumpe2fs /dev/hda1 |less

dumpe2fs 1.41.11 (14-Mar-2010)

Filesystem volume name:   <none>

Last mounted on:          <not available>

Filesystem UUID:          fbd1f044-491b-4cda-aaf1-a89c7bdc2726

Filesystem magic number:  0xEF53

Filesystem revision #:    1 (dynamic)

Filesystem features:      filetype sparse_super

Default mount options:    (none)

Filesystem state:         not clean with errors

Errors behavior:          Continue

Filesystem OS type:       Linux

Inode count:              61063168

Block count:              122096000

Reserved block count:     6104800

Free blocks:              120076967

Free inodes:              61061072

First block:              0

Block size:               4096

Fragment size:            4096

Blocks per group:         32768

Fragments per group:      32768

Inodes per group:         16384

Inode blocks per group:   512

Filesystem created:       Thu Jan  1 08:01:35 1970

Last mount time:          Wed Dec  1 10:04:11 2010

Last write time:          Thu Jan  1 08:00:35 1970

Mount count:              586

Maximum mount count:      37

Last checked:             Thu Jan  1 08:01:35 1970

Check interval:           15552000 (6 months)

Next check after:         Tue Jun 30 08:01:35 1970

Reserved blocks uid:      0 (user root)

Reserved blocks gid:      0 (group root)

First inode:              11

Inode size:               128

Default directory hash:   tea

Directory Hash Seed:      dea4f717-12bc-4cfb-b26c-50b95411a974

Group 0: (Blocks 0-32767)

  Primary superblock at 0, Group descriptors at 1-30

  Block bitmap at 31 (+31), Inode bitmap at 32 (+32)

  Inode table at 33-544 (+33)

  32210 free blocks, 16365 free inodes, 2 directories

  Free blocks: 551-4095, 4097-10239, 10241-18431, 18434-22527, 22530-28671, 28673-32767

  Free inodes: 20-16384

文件幻数标志了文件系统格式,Filesystem magic number:  0xEF53,这个数代表ext2或ext3。

 block大小:4096字节

 inode大小:128字节

 每一个block group中,有32768个block。

Superblock 的备份位置(以block为单位):32768×N

 当中N值为3,5,7的幂(N=1,3,5。7,9。25,27,49。81,125,243,343,625,729,2187,2401,3125)

三,U盘升级失败的原因分析

使用U盘升级的原因:

  设备提供了一个usb接口。寻常并不使用,仅仅在须要导出数据时使用。因为软件总有升级的须要,在通常使用的远程网络升级之外,就提供了一个U盘升级的途径。U盘升级不但升级安全快捷。弥补了网络不通情况下的升级问题,依赖的执行程序也更少,能解决部分更基础的执行问题。

U盘升级的过程:

  插上U盘,重新启动设备,在启动过程中,有一个启动脚本,检查是否存在U盘,并推断U盘中是否存在升级文件。若有升级文件,就開始进行文件更新。升级完毕后,设备再次重新启动。以升级后的程序进行正式的执行。

遇到一些U盘升级失败的情况。大概的原因分析:

1。 U盘不能识别。

2, U盘识别的设备名与启动脚本中的设备名不匹配;

――通过在启动脚本加入补充。支持/dev/sda4,/dev/sda1,/dev/sda,解决部分问题。

3。flash满,导致不能复制程序

 ――升级前。删几个日志文件,能解决部分问题。

有一次还遇到一次奇怪的现象:

1。设备上的程序总是不能执行起来。

2。U盘也升级不了。

解决方法:

1,查看出错信息

/etc/rcS.d/S03udev: line 52: can't create /tmp/uname: No space left on device

即系统的启动脚本中已经出错。

2,想办法绕开S03udev。

系统启动到“Freeing init memory”之后,按住ctrl C,直到出现“login:”

3。输入root登陆

 此时又遇到一个问题:root登陆不了。报错:

 Unable to determine your tty name.

 改动uboot的启动配置:使用 init=/sbin/init 替换 noinitrd,

 能够登陆。

4。查看文件系统空间使用情况,使用df。

 发现使用率达到99%。

在根文件夹下使用命令:du -d 1。查看是哪一个文件夹占空间过大,进行清理。

5,清理出空间后,就攻克了问题,能正常进行U盘升级了。

6,后来多次遇到S03udev出错,跟踪出错语句。将其凝视掉。在以后的再次升级时,覆盖原文件。

四,U盘识别的分区更改为sda

 因为第一批採购的U盘是在设备上默觉得/dev/sda,所以升级脚本中也是根据是否存在这个设备文件来推断是否U盘已经识别到。但是在后来採购的U盘以及其他人使用的U盘。却大多都不是这种。

发现有例如以下几种情况:

最多的是识别为:

一个设备:/dev/sda

一个分区:/dev/sda1

另外一种情况为:

一个设备:/dev/sda

一个分区:/dev/sda4

第三种情况:

设备与分区重合:/dev/sda

发现这个问题后,我们就改动了U盘检測的推断,将这3种情况都考虑进去了。可是存在一个问题,有些早期设备推断U盘还是依赖于/dev/sda,而第一批的U盘又不easy找到,就须要将其他类型的U盘也转换到这样的情况下来。经过一番測试。最终找到方法,按例如以下步骤操作就可以:

1,在linux下,fdisk删掉全部分区。保存退出。

2,强制格式化sda:mkfs.vfat /dev/sda -I  ;然后sda可用了。

版权声明:本文博客原创文章,博客,未经同意,不得转载。

调试经验--硬盘U菜的更多相关文章

  1. (转)CMOS Sensor的调试经验分享

    CMOS Sensor的调试经验分享 我这里要介绍的就是CMOS摄像头的一些调试经验. 首先,要认识CMOS摄像头的结构.我们通常拿到的是集成封装好的模组,一般由三个部分组成:镜头.感应器和图像信号处 ...

  2. CMOS Sensor的调试经验分享

    转自:http://bbs.52rd.com/forum.php?mod=viewthread&tid=276351 CMOS Sensor的调试经验分享 我这里要介绍的就是CMOS摄像头的一 ...

  3. CMOS Sensor的调试经验分享【转】

    转自:https://blog.csdn.net/yapingmcu/article/details/37817727 转自:http://bbs.52rd.com/forum.php?mod=vie ...

  4. 程序异常崩溃后用windbg辅助调试解决的经验 以及 堆栈问题调试经验

    1,程序异常崩溃后用windbg辅助调试解决的经验  状况:我的程序调用别人的库做 文件写入工作. 在这一过程中出现异常,程序崩溃. 经反复检查,认为自己的程序没有错,但无法判断在别人库里哪里有错. ...

  5. 17调试经验之串口读写flash协议

    一是设计功能 我的理解协议就是一个命令包,通过给出不同的控制命令,来调动不同的功能模块,实现不同的功能,如读数据,写数据,擦除等. 二设计过程 先看了尤老师的视频,主要讲了大致设计原理和总体框架,当然 ...

  6. 电机三环pid控制及调试经验

    一.伺服电机的双环pid 双环pid在正常底盘运动的控制中已经足够了,但是对于双轴云台的控制来说,双环pid的云台控制的响应速度是远远不够的,所以加入了电流环的控制. 两篇大佬的文章--这是我学习pi ...

  7. 13 年的 Bug 调试经验总结

    在<Learning From Your Bugs>一文中,我写了关于我是如何追踪我所遇到的一些最有趣的bug.最近,我回顾了我所有的194个条目(从13岁开始),看看有什么经验教训是我可 ...

  8. mipi 调试经验

    转载自http://blog.csdn.net/g_salamander/article/details/9163455 以下是最近几个月在调试 MIPI DSI / CSI 的一些经验总结,因为协议 ...

  9. Keil C调试经验

    我们使用Keil C调试某系统时积累的一些经验:     1.由于Keil C对中文支持不太好,因而会出现显示的光标与光标实际所在不一致的现象,这会对修改中文注释造成影响.在Windows2000下面 ...

随机推荐

  1. 完美世界3D格斗手游[格斗宝贝]今日公測

    狗刨学习网报道 / 经过近两年井喷式的发展,国内手游市场洗牌的信号愈加强烈.用户体验的提升.以及对产品核心品质的要求.促进了手游的精品化.而白热化的市场竞争,也催生了各大厂商在细分市场的抢滩.当中.更 ...

  2. Oracle 如何提交手册Cluster Table事务

    环境遇到ora-00600 4000错误,该目的是参与cluster table,什么我这里有以下简单的模拟.以供参考! ++++创建一个测试表 ? 1 2 3 4 5 6 7 8 9 10 11 1 ...

  3. 与阿根廷一起学习Java Web四个发展:对于信息传输和信息传输

    发送短信和通用身份验证和用户注册系统消息提示功能模块,但是实现代码过于复杂.使用JSPGen后,深深发送消息.SMS程序包使复杂的简单非常活跃. 在短信模块:支持两种模式,它们被发送到第三方.地方平台 ...

  4. Activity生命周期解决(有图有真相)

    Activity完整的生命周期: 启动Activity的周期历程: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcGVuZ2t2/font/5a6L5L2 ...

  5. 数据结构(C达到)------- 双链表

    双链表中的每个节点包含两个指针域,指针域包含其后继节点的内存地址,还有一个指针所存储的存储器地址其领域前驱节点. 双向链表结点的类型描写叙述: //双向链表的类型描写叙述 typedef int El ...

  6. 【SSH2(实用文章)】--Struts2文件上传和下载的例子

    回想一下,再上一篇文章Struts2实现机制,该步骤做一步一步来解决,这种决心不仅要理清再次Struts2用法.映射机制及其在深入分析.最后一个例子来介绍Struts2一种用法,这里将做一个有关文件上 ...

  7. 具体评论ExpandableListView显示和查询模仿QQ组列表用户信息

    在我们的项目开发过程,用户通常拥有的信息包,通过组来显示用户的信息,一时候通过一定的查询条件来显示查询后的相关用户信息.而且通过颜色选择器来设置列表信息的背景颜色. 当中借鉴xiaanming:htt ...

  8. Linux内核进程管理

    介绍: 在Linux的内核的五大组成模块中,进程管理模块时很重要的一部分.它尽管不像内存管理.虚拟文件系统等模块那样复杂.也不像进程间通信模块那样条理化,但作为五大内核模块之中的一个,进程管理对我们理 ...

  9. POJ 2774 后缀数组:查找最长公共子

    思考:其实很easy.就在两个串在一起.通过一个特殊字符,中间分隔,然后找到后缀数组的最长的公共前缀.然后在两个不同的串,最长是最长的公共子串. 注意的是:用第一个字符串来推断是不是在同一个字符中,刚 ...

  10. java.lang.Runnable接口

    大家都知道使用线程的2种方式,一是继承Thread类,二是实现Runnable接口.实际上,即使你实现了Runnable接口,终于还是要构造一个Thread类的对象.看过Thread源码发现,事实上这 ...