linux中的硬盘及flash操作 |
您所在的位置:网站首页 › flash存储设备可以进行格式化操作吗 › linux中的硬盘及flash操作 |
磁盘操作是块设备的必备操作,需要认真掌握。 一、硬盘 1.硬盘文件默认串口硬盘的设备文件为sda(第一块硬盘)、sdb(第二块硬盘).... 默认并口硬盘的设备文件为hda(第一块硬盘)、hdb(第二块硬盘).... 2.物理分区和逻辑分区 每块硬盘最多有四个主分区(包括真正的分区和扩展分区),编号1~4; 从5开始为逻辑分区; 每个分区能分配独立的文件系统如下图,主分区容量=sda1+sda2(扩展分区); 扩展分区容量=逻辑分区总容量=sda5,当然本例只有一个逻辑分区,还可以有sda6/7/8/9..... $ sudo fdisk -l /dev/sda Disk /dev/sda: 100 GiB, 107374182400 bytes, 209715200 sectors Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disklabel type: dos Disk identifier: 0x801a0f4d 设备 启动 Start 末尾 扇区 Size Id 类型 /dev/sda1 * 2048 205522943 205520896 98G 83 Linux /dev/sda2 205524990 209713151 4188162 2G 5 扩展 /dev/sda5 205524992 209713151 4188160 2G 82 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.挂载mountmount /dev/sda1 /mnt/sda1 7.查看已挂载的磁盘分区和文件系统 df可用df命令查看已经挂载的文件系统。 8.自动挂载/etc/fstab每次手动mount非常麻烦,linux提供配置文件的方式,自动挂载磁盘 以手上的嵌入式板子上的fstab为例说说明 zynq> cat /etc/fstab devpts /dev/pts devpts gid=5,mode=620 0 0 none /proc proc defaults 0 0 none /sys sysfs defaults 0 0 none /tmp tmpfs defaults 0 0 /dev/mtdblock0 /mnt/sdisk1 jffs2 defaults 0 0 /dev/mtdblock1 /mnt/sdisk2 jffs2 defaults 0 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 == 0) { 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");
|
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |