磁盘操作是块设备的必备操作,需要认真掌握。

一、硬盘

1.硬盘文件

   默认串口硬盘的设备文件为sda(第一块硬盘)、sdb(第二块硬盘)....

   默认并口硬盘的设备文件为hda(第一块硬盘)、hdb(第二块硬盘)....

2.物理分区和逻辑分区

  • 每块硬盘最多有四个主分区(包括真正的分区和扩展分区),编号1~4;
  • 从5开始为逻辑分区;
  • 每个分区能分配独立的文件系统

  如下图,主分区容量=sda1+sda2(扩展分区);

  扩展分区容量=逻辑分区总容量=sda5,当然本例只有一个逻辑分区,还可以有sda6/7/8/9.....

$ sudo fdisk -l /dev/sda
Disk /dev/sda: GiB, bytes, sectors
Units: sectors of * = bytes
Sector size (logical/physical): bytes / bytes
I/O size (minimum/optimal): bytes / bytes
Disklabel type: dos
Disk identifier: 0x801a0f4d 设备 启动 Start 末尾 扇区 Size Id 类型
/dev/sda1 * 98G Linux
/dev/sda2 2G 扩展
/dev/sda5 2G Linux 交换 / Solaris

3.用fdisk分区

  fdisk /dev/sda  就可以对硬盘进行分区,按照提示操作即可。

4.格式化文件系统mkfs

  分区以后,还需要格式化相关的文件系统,例如ext3/4等,格式化分拣系统实质上是向flash里写入该文件系统需要的数据,用于文件系统管理磁盘。

  例如:mkfs.ext3 /dev/sda1

5.磁盘检查 fsck

 用来检查和维护不一致的文件系统。若系统掉电或磁盘发生问题,可利用fsck命令对文件系统进行检查。

  例如 fsck.ext4 -p /dev/sda1

6.挂载mount

  mount /dev/sda1 /mnt/sda1

7.查看已挂载的磁盘分区和文件系统 df

  可用df命令查看已经挂载的文件系统。

8.自动挂载/etc/fstab

  每次手动mount非常麻烦,linux提供配置文件的方式,自动挂载磁盘

  以手上的嵌入式板子上的fstab为例说说明

zynq> cat /etc/fstab
devpts /dev/pts devpts gid=,mode=
none /proc proc defaults
none /sys sysfs defaults
none /tmp tmpfs defaults
/dev/mtdblock0 /mnt/sdisk1 jffs2 defaults
/dev/mtdblock1 /mnt/sdisk2 jffs2 defaults 0 第一列 device
第二列 mount point
第三列 filesystem
第四列 perameters:
  1. default,一般用default即可,具体可以参考“鸟哥的linux私房菜”
第五列 dump, 能否被dump备份命令作用
第六列 fsck,是否以fsck校验扇区,0不校验,1和2都校验,1较早而2较晚校验

二、嵌入式flash

  已ZYNQ嵌入式单板为例。

1.设备文件

  嵌入式ZYNQ单板上,spi接口外界flash芯片,在dts中配置分区,linux启动以后,自动生成如下文件:

  /dev/mtd0, /dev/mtd1, /dev/mtdblock0, /dev/mtdblock1.

2.格式化文件系统flash_eraseall -j

   $ flash_eraseall -j /dev/mtd0
     $ flash_eraseall -j /dev/mtd1

  格式化成jiffs2格式。

3.挂载mount

$ mount -t jffs2 /dev/mtdblock0 /mnt/sdisk1
   $ mount -t jffs2 /dev/mtdblock1 /mnt/sdisk2

4.自动挂载/etc/fstab

见硬盘自动挂载部分。

5.装置启动时自动判断文件系统,并修复

  对于未格式化过或者不是jiffs2格式的flash,可用程序自动判断并进行格式化。

 大体思路:df看是否挂载了,没有挂载就格式化。

        id = Exec_sys_cmd_result(cmd, "df -h |grep /mnt/sdisk1 |wc -l");
if(id == ) {
printf("/mnt/sdisk1 mount failed, format the spi 1 flash now....\n");
printf(" Maybe we should wait for a few minutes....\n");
Exec_sys_cmd(cmd, "flash_eraseall -j /dev/mtd0");
}
else
printf("/mnt/sdisk1 mount successful!\n");

 

  

linux中的硬盘及flash操作的更多相关文章

  1. Linux中新增硬盘的分区,格式化与挂载

    Linux中新增硬盘的分区,格式化与挂载 本篇教程内容为怎样对Linux新增硬盘进行挂载,所以如果有准备新增硬盘但是有各种问题的,请参看本篇教程. 我们先说说什么是挂载? 我们知道Linux中的所有设 ...

  2. Linux 中 Vi 编辑器的简单操作

    Linux 中 Vi 编辑器的简单操作 Vi 编辑器一共有3种模式:命名模式(默认),尾行模式,编辑模式.3种模式彼此需要切换. 一.进入 Vi 编辑器的的命令 vi  filename //打开或新 ...

  3. Linux中fdisk硬盘分区方法

    fdsik 能划分磁盘成为若干个区,同时也能为每个分区指定分区的文件系统,比如linux .fat32. linux .linux swap .fat16 以及其实类Unix类操作系统的文件系统等:当 ...

  4. 如何在Linux 中获取硬盘分区或文件系统的UUID?

    作为一个 Linux 系统管理员,你应该知道如何去查看分区的 UUID 或文件系统的 UUID.因为现在大多数的 Linux 系统都使用 UUID 挂载分区.你可以在 /etc/fstab 文件中可以 ...

  5. Linux中安装硬盘后对硬盘的分区以及挂载

    我将使用VM来进行模拟 先使用df看下我的电脑硬盘信息: df -h 可以看到只有一个sda1分区装载/boot,还有一个扩展分区 查看dev下的硬盘: 只有一个硬盘(两个分区) 注意: 如果你是ID ...

  6. linux中dd相关命令骚操作

    一.dd如何快速将磁盘写满 方法一: dd if=/dev/zero of=/tmp/file bs=1G count=10 # 参数解释 1. if=文件名:输入文件名,缺省为标准输入.即指定源文件 ...

  7. linux中挂载硬盘报错(you must specify the filesystem type)

    公司有台服务器做了raid1,由于容量小,需扩容,原先打算再添加两块硬盘进去做多一组raid1,组成两组raid1混合使用,但是公司抠门,买到服务器只能安装3块硬盘,无奈之下只能放多一块进去单独挂载分 ...

  8. linux中mysql完整卸载命令操作

    yum方式安装的mysql 1.yum remove mysql mysql-server mysql-libs compat-mysql51 2.rm -rf /var/lib/mysql3.rm ...

  9. linux 中,mysql数据库备份操作

    1.新建一个sh脚本(可以先建一个txt文本,然后改为sh文件). 代码如下: #!/bin/bash #设置mysql备份目录 folder=/**/** cd $folder day=`date ...

随机推荐

  1. Python -3-列表和元组

    1.用list就可以像修改列表那样修改字符串了 >>> list('Hello') ['H', 'e', 'l', 'l', 'o'] 可将任何序列作为list的参数   2.列表的 ...

  2. HDU4035(概率期望、树形、数学)

    和ZOJ3329有些像,都是用期望列出来式子以后,为了解式子,设A[i],B[i],此题又多了C[i],然后用递推(此题是树形dp)去求得ABC,最后结果只跟ABC有关,跟列写的期望数组根本无关. 虽 ...

  3. python转换已转义的字符串

    python转换已转义的字符串 有时我们可能会获取得以下这样的字符串: >>> a = '{\\"name\\":\\"michael\\"} ...

  4. nodejs项目报Process finished with exit code 8错误

    看控制台打印出来的错误:Error: listen EADDRNOTAVAIL  这是监听ip错误,没有该端口号. 修改IP地址,改成你所需要的ip地址 一般都是在自己本机上运行,所以把监听的ip改成 ...

  5. Java基础50题test1—不死神兔

    [不死神兔] 题目:古典问题:有一对兔子,从出生后第 3 个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子对数为多少?  程序分析: 兔子的规律为数列 ...

  6. main函数与命令行参数

    main函数的概念 C语言中main函数称之为主函数 一个c程序从main函数开始执行的 下面的main函数定义正确吗? main函数的本质 main函数是操作系统调用的函数 操作系统总是将main函 ...

  7. window服务的使用

    目前的项目中使用很多服务来进行实现.服务是依靠windows操作系统来实现.可以是定时器类型,比如定时执行费时的任务,这种任务时最多.也可以是一些服务(SOAP)的宿主,不在限制与iis,不现在限制于 ...

  8. ftpclient 遇到的一些问题

    1. FTPFile[] files=ftpClient.listFiles(ftpDirectory); 没有数据 public static boolean ftpLogin(String ser ...

  9. 网络大牛如何回答Chrome的15个刁钻面试题?

    (内容来自网络整理) Google的面试题在刁钻古怪方面相当出名,甚至已经有些被神化的味道.这里整理出15道Google面试题并一一给出了网络大牛的答案,其中不少都是流传很广的. 第1题:让你清洗西雅 ...

  10. Android的Activity之间传对象的方法

    传值代码块 //Serializeable传递对象的方法 public void SerializeMethod(){ Person mPerson = new Person(); mPerson.s ...