调试经验--硬盘与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盘又不容易找到,就需要将其它类型的U盘也转换到这种情况下来。经过一番测试,终于找到方法:

在linux下,fdisk删掉所有分区,保存退出;

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

时间: 2025-01-06 21:44:40

调试经验--硬盘与U盘的相关文章

usb调试经验

1.有i2c的芯片,一般有i2c的地址选择.检查地址选择是否正确,地址是多少.SCL和SDA上面是否有上拉电阻.芯片的地址是几位的.I2c的时钟频率也是必须设定的一个方面.工作速率一般有100K和400K两种,而且里面寄存器一般为一个byte.I2c出错时,需要测量一下i2c bus上是否真的有信号 2.有时钟的芯片,搞清楚时钟采用的是那种时钟,晶振还是RTC.一般芯片为了方便使用,可能允许几种不同的时钟选择.可以是通过引脚进行选择的.也可能通过寄存器来进行选择.通过阅读spec检查清楚. 3.

CMOS Sensor的调试经验分享

CMOS Sensor的调试经验分享 我这里要介绍的就是CMOS摄像头的一些调试经验. 首先,要认识CMOS摄像头的结构.我们通常拿到的是集成封装好的模组,一般由三个部分组成:镜头.感应器和图像信号处理器构成.一般情况下,集成好的模组我们只看到外面的镜头.接口和封装壳,这种一般是固定焦距的.有些厂商只提供芯片,需要自己安装镜头,镜头要选择合适大小的镜头,如果没有夜视要求的话,最好选择带有红外滤光的镜头,因为一般的sensor都能感应到红外光线,如果不滤掉,会对图像色彩产生影响,另外要注意在PCB

WPF 卡顿调试经验

原文:WPF 卡顿调试经验 1. 问题 最近的一个项目,正常调试情况下,运行一切正常,但是有某个用户登录后,出现界面卡顿2-3mins后,才正常运行. 2.解决问题方法 (1)首先由于是必现问题,就想在vs的工作环境下调试一下,看看到底是什么地方比较慢,想法很理想,但是现实很残酷,没有找到问题所在. (2)使用VS中的性能与诊断工具,测试一下那个地方花费的时间多,具体步骤如下: (a)打开VS中的菜单栏分析->性能与诊断 (b)选择性能向导,开始 (c)选择检测,测量函数调用计数与用时 (d)选

硬盘蓝盘黑盘红盘哪个好?

硬盘是现在非常流行的数据存储设备,主要分为电脑硬盘和移动硬盘两大类.然而许多用户在购买硬盘时,考虑得最多的是硬盘的品牌.内存和价格,实际上,在硬盘选择上,很多人忽略了硬盘的"颜色",所以在下面的文章中,我们来好好谈谈这个问题.什么是硬盘的"颜色"? 这其实是我们常提到的蓝盘.黑盘和红盘.所谓的蓝.黑.红等颜色,指的是贴在硬盘上的那张纸的颜色.不同的颜色代表了硬盘不同的性能和性价比. 硬盘蓝盘蓝盘的优点是价格较低,性价比高,适合家用. 不过蓝盘的缺点也是有的,蓝盘运行

调试经验--硬盘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 查看硬盘信息

JS 代码调试经验总结(菜鸟必读)

前言:不知不觉写了很多,希望你能耐心看完这篇文章 任何一个编程者都少不了要去调试代码,不管你是高手还是菜鸟,调试程序都是一项必不可少的工作.一般来说调试程序是在编写代码之后或测试期修改Bug 时进行的,往往在调试代码期间更加能够体现出编程者的水平高低以及分析问题的准确度.不少初学者在寻找错误原因时,总是不得要领,花费了大量时间却无法解决一些最终证明是相当简单的Bug. 在长期解答 zTree 相关问题时,也的确发现很多的问题其实不算什么问题,仅仅是编程者不会调试造成的,通过自己日常工作观察,这里

收藏:Javascript 脚本的调试经验

随着用JavaScript编程的深入,你会开始理解那些JavaScript给出的不透明错误信息.一旦你理解了你常犯的一般性错误,你就会很快知道怎样避免它们,这样你写的代码中的错误将越来越少.编程实际上是一种能随着时间不断飞快进步的技术.但是不管变得多么熟练,你仍然要花一些时间调试你的代码.如果你做过家庭作业,或有过JacaScript编程经验,你会知道相当多的时间是花在调试上.这很正常 - 这只是编程者必须做的事之一.实际上,按照大量的研究,程序员平均百分之五十的时间花在解决代码中的错误. 关键

支付宝接口调试经验总结

最近项目开发用到了2个支付宝接口,就在这里把我字节调试支付宝的一些经验写一写吧. 1.手机网站支付 这次由于做的一个项目是html5的做手机app,支付这块就选择了手机网站支付.刚开始调试一直遇到 ILLEGAL_SIGN 也就是签名错误,一直到后面才发现时编码不统一导致.同学们调试的时候可以先在下载的demo里进行调试.那样可以更快的让你熟悉支付宝的调试工作. 2.移动支付 由于支付宝的手机快捷支付接口停用.导致项目不得不更改支付宝接口.这次更改选用了移动支付.在移动支付时考虑到安全性,rsa

13 年的 Bug 调试经验总结

在<Learning From Your Bugs>一文中,我写了关于我是如何追踪我所遇到的一些最有趣的bug.最近,我回顾了我所有的194个条目(从13岁开始),看看有什么经验教训是我可以学习的.下面是我总结的最重要的经验教训,包括编码,测试和调试三个方面.编码下面这些都是我经历过的会导致难点bug的问题:1.事件顺序.在处理事件时,提出下列问题会很有成效:事件可以以不同的顺序到达吗?如果我们没有接收到此事件会怎么样?如果此事件接连发生两次会怎么样?哪怕通常不会发生,但系统(或交互系统)其他