当前位置: 首页 > news >正文

嵌入式软件开发之Linux 磁盘管理

目录

前沿

 Linux 磁盘管理基本概念

磁盘管理命令

格式化命令 mkfs

挂载分区命令 mount

卸载命令 umount 


前沿

       我们在做嵌入式开发中,我们使用U盘或者SD卡中系统必须是FAT32,不要使用NTFS文件系统,因为大部分嵌入式系统不支持NTFS文件系统,NTFS是微软的一个专利。

 Linux 磁盘管理基本概念

        Linux 的磁盘管理体系和 Windows 有很大的区别,在 Windows 下经常会遇到“分区”这个概念,在 Linux 中一般不叫“分区”而叫“挂载点”。 “挂载点”就是将一个硬盘的一部分做成文件夹的形式,这个文件夹的名字就是“挂载点”,不管在哪个发行版的 Linux 中,用户是绝对看到不到 C 盘、D 盘这样的概念的,只能看到以文件夹形式存在的“挂载点”。

        文件/etc/fstab 详细的记录了 Ubuntu 中硬盘分区的情况,如下图 所示:

        在上图中,=有一行“/ was on /dev/sda1 during installation”,意思是根目录“/”是在/dev/sda1上的,其中“/”是挂载点,“/dev/sda1”就是我们装 Ubuntu 系统的硬盘。由于我们的系统是安装在虚拟机中的,因此图 2.8.1.1 没有出现实际的硬盘。可以通过如下命令查看当前系统中的磁盘:

ls /dev/sd*

        上述命令就是打印出所有以/dev/sd 开头的设备文件,如下图所示:

        在上图中有四个磁盘设备文件,其中 sd 表示是 SATA 硬盘或者其它外部设备,最后面的数字表示该硬盘上的第 n 个分区,比如/dev/sda1 就表示磁盘 sda 上的第一个分区。上图中都是以/dev/sda 开头的,说明当前只有一个硬盘。如果再插上 U 盘、SD 卡啥的就可能会出现/dev/sdb,/dev/sdc 等等。如果你的 U 盘有两个分区那么可能就会出现 /dev/sdb1、dev/sdb2 这样的设备文件。比如我现在插入我的 U 盘,插入 U 盘会提示 U 盘是接到主机还是虚拟机,我们将其 U盘连接到虚拟机上。我们再次使用命令“ls/dev/sd*”来查看当前的“/dev/sd*”设备文件。

磁盘管理命令

        我们使用命令fdisk命令对磁盘进行分区,命令格式如下:

fdisk [参数]
  • -b<分区大小> 指定每个分区的大小。
  • -l 列出指定设备的分区表。
  • -s<分区编号> 将指定的分区大小输出到标准的输出上,单位为块。
  • -u 搭配“-l”参数,会用分区数目取代柱面数目,来表示每个分区的起始地址。

        比如我要对 U 盘进行分区,千万不要对自己装 Ubuntu 系统进行分区!!!可以使用如下命
令:

sudo fdisk /dev/sdc

        在上图的提示中,我们输入”m“可以查看命令,因为 fdisk 还有一些子命令,通过输入“m”可以查看都有哪些子命令,如下图所示:

        在上图显示中,我们常用的命令如下:

  • p 显示现有的分区
  • n 建立新分区
  • t 更改分区类型
  • d 删除现有的分区
  • a 更改分区启动标志
  • w 对分区的更改写入到硬盘或者存储器中。
  • q 不保存退出

        我们设置分区大小为1GB = 1024×1024×1024=107374182B,一个扇区是512B,107374182/512 = 2097152个扇区,从2099200个扇区开始,因此我们还要加开始的扇区,因此结束是2097152+2099200 = 4196352个扇区。

        我们再设置一个分区大小为:10G = 10×1024×1024×1024=1073741820B,一个扇区是512B,107374182/512 = 20971520个扇区,从4198400个扇区开始,因此我们还要加开始的扇区,因此结束是20971520+4198400= 25169920个扇区。

        接下来我们将剩余的空间创建为最后一个分区

 一定要保存呀,否则不能创建不成功,第一次我直接按了q,退出没保存,吐了。。。后来又重新创建的,

接下来我们查看我们所创建的分区

我们使用ls /dev/sd*命令来查看所创建的U盘分区

格式化命令 mkfs

        使用命令 fdisk 创建好一个分区以后,我们需要对其格式化,也就是在这个分区上创建一个文件系统,Linux 下的格式化命令为 mkfs,命令格式如下:

mkfs [参数] [-t 文件系统类型] [分区名称]

 主要参数如下:

  • fs 指定建立文件系统时的参数
  • -V 显示版本信息和简要的使用方法。
  • -v 显示版本信息和详细的使用方法。

比如我们要格式化 U 盘的分区/dev/sdb1 为 FAT 格式,那么就可以使用如下命令:

mkfs -t vfat /dev/sdc1

我们必须不能让U盘挂载,否则分区将不能被卸载

挂载分区命令 mount

        我们创建好分区并且格式化以后肯定是要使用硬盘或者 U 盘的,那么如何访问磁盘呢?比如我的 U 盘就一个分区,为/dev/sdc1,如果直接打开文件/dev/sdc1 会发现根本就不是我们要的结果。我们需要将/dev/sdc1 这个分区挂载到一个文件夹中,然后通过这个文件访问 U 盘,磁盘挂载命令为 mount,命令格式如下:

mount [参数] -t [类型] [设备名称] [目的文件夹]

命令主要参数有:

  • -V 显示程序版本。
  • -h 显示辅助信息。
  • -v 显示执行过程详细信息。
  • -o ro 只读模式挂载。
  • -o rw 读写模式挂载。
  • -s-r 等于-o ro。
  • -w 等于-o rw。

        挂载点是一个文件夹,因此在挂载之前先要创建一个文件夹,我们在 /media/zhangyu 文件夹下创建一个udisk文件,然后将U盘的/dev/sdc1分区挂载在udisk文件夹里边,如下图所示:

卸载命令 umount 

        当我们不再需要访问已经挂载的 U 盘,可以通过 umount 将其从卸载点卸除,命令格式如下:

umount [参数] -t [文件系统类型] [设备名称]
  •  -a 卸载/etc/mtab 中的所有文件系统。
  • -h 显示帮助。
  • -n 卸载时不要将信息存入到/etc/mtab 文件中
  • -r 如果无法成功卸载,则尝试以只读的方式重新挂载。
  • -t<文件系统类型> 仅卸载选项中指定的文件系统。
  • -v 显示执行过程。

上述我们将U盘挂载到了文件夹udisk,我们使用命令umount将其卸载掉,操作如下图所示:

        在上图中,我们使用命令umount卸载了U盘,卸载以后当我们再去访问文件夹/media/zhangyu/udisk的时候发现里面没有任何文件了,说明我们卸载成功了 。

相关文章:

  • Pytorch机器学习(八)—— YOLOV5中NMS非极大值抑制与DIOU-NMS等改进
  • 出道即封神的ChatGPT,现在怎么样了?
  • UDS 14229 -1 刷写34,36,37服务,标准加Trace讲解,没理由搞不明白
  • 朋友去华为面试,轻松拿到26K的Offer,羡慕了......
  • CPU平均负载高问题定位分析
  • 数据仓库相关概念的解释
  • 软测面试了一个00后,绝对能称为是内卷届的天花板
  • SpringBoot最常用的50个注解(全是干货,干的要死!)
  • TH-OCR文字识别SDK 12.X介绍
  • 滑动窗口算法
  • 【Kafka】MM2同步Kafka集群时如何自定义复制策略(ReplicationPolicy)
  • iOS 语言基础初探 Xcode 工具
  • 读书笔记——《富爸爸穷爸爸》
  • 【钓鱼实测】写bug给new bing和chatGPT查。问他们林黛玉倒拔垂杨柳
  • 蓝桥刷题总结1
  • JavaScript 如何正确处理 Unicode 编码问题!
  • Docker 笔记(1):介绍、镜像、容器及其基本操作
  • Dubbo 整合 Pinpoint 做分布式服务请求跟踪
  • java正则表式的使用
  • js面向对象
  • JS数组方法汇总
  • js数组之filter
  • leetcode378. Kth Smallest Element in a Sorted Matrix
  • MySQL-事务管理(基础)
  • MySQL用户中的%到底包不包括localhost?
  • Python中eval与exec的使用及区别
  • seaborn 安装成功 + ImportError: DLL load failed: 找不到指定的模块 问题解决
  • tab.js分享及浏览器兼容性问题汇总
  • VirtualBox 安装过程中出现 Running VMs found 错误的解决过程
  • 基于web的全景—— Pannellum小试
  • 你真的知道 == 和 equals 的区别吗?
  • 前嗅ForeSpider中数据浏览界面介绍
  • 如何使用 OAuth 2.0 将 LinkedIn 集成入 iOS 应用
  • 微信小程序:实现悬浮返回和分享按钮
  • 我建了一个叫Hello World的项目
  • 源码之下无秘密 ── 做最好的 Netty 源码分析教程
  • k8s使用glusterfs实现动态持久化存储
  • ​ssh免密码登录设置及问题总结
  • # Swust 12th acm 邀请赛# [ A ] A+B problem [题解]
  • (C#)Windows Shell 外壳编程系列4 - 上下文菜单(iContextMenu)(二)嵌入菜单和执行命令...
  • (ctrl.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MDd_DynamicDebug”不匹配值“
  • (动态规划)5. 最长回文子串 java解决
  • (三)终结任务
  • (一)VirtualBox安装增强功能
  • (转)Spring4.2.5+Hibernate4.3.11+Struts1.3.8集成方案一
  • (转载)PyTorch代码规范最佳实践和样式指南
  • .NET Compact Framework 3.5 支持 WCF 的子集
  • .NET Framework 和 .NET Core 在默认情况下垃圾回收(GC)机制的不同(局部变量部分)
  • .net php 通信,flash与asp/php/asp.net通信的方法
  • .NET Reactor简单使用教程
  • .Net 访问电子邮箱-LumiSoft.Net,好用
  • @property括号内属性讲解
  • @RequestMapping用法详解
  • [ IO.File ] FileSystemWatcher
  • [Android Pro] android 混淆文件project.properties和proguard-project.txt