嵌入式 Linux 入门(九、Linux 下的磁盘管理)

2023-11-10

嵌入式 Linux 入门第九课,了解 linux 下的磁盘管理,学会挂载移动硬盘设备  ......矜辰所致

前言

嵌入式 Linux 专栏更新到现在,我们都还没有碰过开发板,本来想着前面的讲完至少先碰一碰开发板,让我们知道我们最终的目的是在开发板上运行 Linux 系统。

但是考虑到接触开发板的之初,我们除了看一下开发板的启动流程,还得学一下如何烧录开发板,而对于初学者来说,相对简单的烧录方式就是使用 SD 卡,所以我们还是先来学习一下 Linux 下的磁盘管理。

但是 Linux 下的磁盘管理深入分析的话,其实相对复杂,内容也比较多,我们只在于了解一个基本概念,以及学会 U 盘的挂载方式。

那么本文目的就是以 了解一下 Linux 下的磁盘管理的基本概念,比如什么是挂载,以及如何挂载移动硬盘设备。

文章以 Ubuntu 系统为示例说明 。

❤️ 嵌入式 Linux 入门系列博文:
嵌入式 Linux 入门(一、Linux 基本介绍及文件结构)
嵌入式 Linux 入门(二、Linux 文件系统、文件类型及权限管理)
嵌入式 Linux 入门(三、Linux Shell 及常用命令说明)
嵌入式 Linux 入门(四、Linux 下的编辑器 — 让人爱恨交加的 vi )
嵌入式 Linux 入门(五、Shell 脚本编程上:认识 Shell 脚本)
嵌入式 Linux 入门(六、Shell 脚本编程下:Shell 脚本语法)
嵌入式 Linux 入门(七、Linux 下的环境变量)
嵌入式 Linux 入门(八、Linux 下的软件安装)
.
我是矜辰所致,一名摸爬滚打于物联网行业十多年的嵌入式工程师,尽量用心写好每一系列文章,不浮夸,不将就,认真对待学知识的我们,矜辰所致,金石为开!

一、磁盘管理简介

磁盘管理是什么?

我们在熟悉的 Windows 下面,硬盘一般都分为 C盘,D盘,E盘等等,我们可以直接通过计算机管理可以打开图形话界面的磁盘管理:

在这里插入图片描述

上图中 Window 系统中的这些C盘,D盘,是2个不同的分区,其实他们是一个硬盘。

我们把盘符和硬盘分区建立联系的过程,叫做挂载。

上面把硬盘的第一个分区挂载到 C 盘这个点,分区是操作系统的逻辑概念,事实上硬盘本身是没有分区的。

这么说也有点难以理解,因为在 Windows 下,不需要理解这些东西。

说明,初学者要明白 Linux 下磁盘管理,可能会有点绕,因为从来没有接触过的概念,但是有些东西总得记一记,没有为什么,它就是这么定的,你觉得陌生或者难以理解,是因为你初次接触,习惯熟悉了就好。
Linux下的磁盘管理,对于初学者作为了解,然后知道什么是挂载,学会如何挂载新的硬盘为主。

1.1 Linux 下的磁盘管理

所谓磁盘管理,说直白点,无非就是对系统的硬盘进行一些分区处理,把不同的文件放入不同的分区方便管理。

先直接说一下本节重点需要了解的知识点:

Linux 系统中磁盘管理就是将硬盘通过挂载的方式挂载到 Linux 文件系统中。

Linux 磁盘必须挂载到目录树中的某个具体的目录上才能进行读写操作。

我们在创建虚拟机的时候,设置了虚拟机的硬盘大小:

在这里插入图片描述

那么其实这个硬盘就是我们虚拟机的磁盘了,那么对于这个磁盘在我们的系统中应该能够看见。

那么如何在 Ubuntu 中如何可以直观的看到这个硬盘信息呢?

1.2 Linux 查询硬盘信息

Linux 下有多种方式可以查询硬盘的信息,我们这里列举一下:

  1. df -h命令
    使用此以可读的格式输出硬盘使用状况:
    在这里插入图片描述
  2. lsblk命令
    只列出硬盘,不列出分区信息:
    在这里插入图片描述
  3. fdisk -l命令
    使用命令前面需要加 sudo 打印硬盘信息:
    在这里插入图片描述
  4. 查看/proc/partitions文件
    使用cat /proc/partitions命令查看文件内容:
    在这里插入图片描述

上面我们介绍了 4 种查看硬盘的方式,我们都能够找到我们虚拟机开始设定的 100G 的磁盘空间。

在上面查看磁盘的时候,有很多 loop 设备,这些是什么呢,这里在网上找了一段说明,供大家参考,这里不过多说明:

在这里插入图片描述

1.3 根目录与分区

我们上面已经在知道了如何查看我们的磁盘,而且在第一张图我们可以看到,有一个挂载点的概念:

在这里插入图片描述

就是前面提到的:Linux 磁盘分必须挂载到目录树中的某个具体的目录上才能进行读写操作,这一点记住就行了。

Linux系统的挂载有自动和手动。如果是系统安装的时候创建的分区以后都会自动挂载,而系统运行中临时添加的光盘、U盘、移动硬盘等需要手动挂载。

每次安装系统的时候我们都会进行分区,Linux下磁盘分区和目录的关系如下:

  • 任何一个分区都必须挂载到某个目录上。
  • 目录是逻辑上的区分。分区是物理上的区分。
  • 磁盘 Linux 分区都必须挂载到目录树中的某个具体的目录上才能进行读写操作。
  • 根目录是所有Linux的文件和目录所在的地方,需要挂载上一个磁盘分区。

对于普通用户,我们并不需要关心分区、盘符,只需要了解以前我们讲过的文件系统结构,哪个目录下面存了什么,所以本文并不准备详细说明 Linux 分区原理,主要学习如何挂载一个临时添加的 U 盘。

但是对于Linux 的分区原理,我找了几篇博文,有需要了解的可自行查看:

Linux分区原理及根目录的介绍

linux文件系统简介

1.4 磁盘管理相关命令

Linux 磁盘管理常用有三个命令,在上面的文章我们查看磁盘的时候已经使用过了两个:dffdisk

还有一个就是:du

df(英文全称:disk full):列出文件系统的整体磁盘使用量
du(英文全称:disk used):检查磁盘空间使用量
fdisk:用于磁盘分区

这里命令相关我们挂载 U 盘其实用不到太深入,这里暂时也放一个链接地址: Linux 磁盘管理

需要学习详细的这几个命令,可以在上面链接查看学习,下面在介绍分区的时候也会有示例说明。

二、磁盘的操作

上面一节简单的描述了一下 Linux 下的磁盘管理相关知识,但是本文我们重点要学习的还是移动盘的操作,比如挂载与分区,这个移动盘包括,U盘,移动硬盘等。

2.1 磁盘的挂载

我们前面说了 Linux 要读取磁盘数据,首先必须要挂载,比如在服务器新增加硬盘的时候,需要使用到这个知识,才能把新的硬盘使用上。

这里我们使用 U 盘举个例子。

2.1.1 磁盘的文件系统

但是要注意,U盘的文件系统必须为 FAT32 格式,而不能是 windows 下面的 NTFS 格式,在 Linux 下并不识别:

在这里插入图片描述

测试所用的 U 盘,我们可以在 windows 下进行格式化,选择为 FAT32 的文件系统:

在这里插入图片描述

格式完毕我们随便放一下文件到里面进行测试,在 windows 下的看的效果如下:

在这里插入图片描述

2.1.2 磁盘在 Linux 系统位置

在用 U 盘连接到虚拟机之前,我们先来看看虚拟机中的磁盘,在前面查询硬盘信息的时候,我们已经知道原本的磁盘名字为 sda ,只有一个分区为 sda1 ,我们其实可以直接在 /dev 目录下查看有哪些磁盘:

在这里插入图片描述

接下来在 VMware 软件操作,使得 U 盘连接至虚拟机,我家里这个版本的 VMware 在右上角,但是大多数人用的版本可能在右下角,这个自己找找就能找到:

在这里插入图片描述

公司电脑更新一下文章,右下角的情况:

在这里插入图片描述

U盘接进来以后,我们再次查看系统磁盘:

在这里插入图片描述

所以 sdb 肯定就是我们这个U盘了,在 Linux 中这个磁盘是一个设备文件,他可不能直接 cd 进去看内容的,我们要访问这个 U 盘,就得挂载,

但是在 Linux 系统中,U 盘会自动挂载,图形化界面可以看到 U 盘标识,打开就能访问。我们需要先看一下他是否挂载,然后删除,自己再新建一个文件夹进行挂载。

我们通过上文介绍的df -h命令,可以查询一下 Ubuntu 自动把 U 盘挂载的位置:

在这里插入图片描述

我们进入到目录查看一下,果然在这里可以看到信息:

在这里插入图片描述

2.1.3 磁盘挂载与卸载操作

本节就讲一下几个需要掌握但是也相对简单的命令,就是使用mount命令完成磁盘挂载与卸载,直接用示例说明。

卸载:

  umount <目录路径>

我们先把上面自动挂载的文件卸载:

在这里插入图片描述

然后我们来挂载,挂载需要建立一个挂载点,就是一个文件夹,我们依然在 /media/qzh 目录下面新建一个挂载点,我们换一个名字:

在这里插入图片描述

挂载:

mount <磁盘文件>  <挂载点路径> 
mount /dev/sdb1  /media/qzh/mydisk

现在目录中为空,我们使用挂载命令操作,把 U 盘挂载上去:

在这里插入图片描述

成功挂载,但是有一个问题,中文乱码?

需要加一个参数:mount -o iocharset=utf8 ,操作如下图:

在这里插入图片描述

2.2 磁盘的分区

前面我们就介绍过 fdisk, fdisk 是 Linux 的磁盘分区表操作工具。

fdisk [-l] <磁盘文件>

我们直接通过实例说明,分区之前得卸载:

在这里插入图片描述

我们使用这个工具的时候,会有帮助提示,所有的操作其实根据版主提示一步一步进行即可,比如我们先删除分区。

这里提一下,删除分区了文件当然是没有了,虽然没格式化之前可能有办法恢复,但是我们在合理就当做没有了,删除分区操作:

在这里插入图片描述

下面我们开始对U盘进行分区:

在这里插入图片描述

我们可以查看一下结果:

在这里插入图片描述

2.3 磁盘的格式化

格式化命令: mkfs

mkfs [-t 文件系统格式] <磁盘文件>
mkfs [options] [-t <type>] [fs-options] <device> [<size>]

mkfs 命令后面 -t 指定格式化的文件格式,那么这里有个问题,我们怎么知道这个命令支持哪些文件格式呢?

2.3.1 支持的文件系统类型

我们可以使用 mkfs[Tab][Tab]命令,就是输入mkfs 后连续按下两次 Tab 按键,终端就会显示所支持的文件类型:

在这里插入图片描述

在上图中 vfat 就是 FAT32 格式的文件系统,我们为了能在 windows 下也能识别,我们格式化为 vfat 文件系统。

2.3.2 格式化

操作如下图:
在这里插入图片描述

格式化好了以后,U盘就可以使用了,我们可以重新挂载使用,或者重启拔插一下,可以在 ubuntu 下面看到一个 U 盘变成了 2个:

在这里插入图片描述

我们断开U盘与虚拟机的链接,在 Windows 下,也可以看到 2 个分区了:

在这里插入图片描述

但是这里额外提一下,传统U盘主控,windows不会识别第二分区:

在这里插入图片描述

到这里,我们学会了在 Linux 下的磁盘分区以及格式化。

结语

本文讲述了 Linux 下的磁盘管理相关内容,有一个重要的点必须要明白: Linux 磁盘必须挂载到目录树中的某个具体的目录上才能进行读写操作。

然后我们学习了如何在 Linux 下面磁盘的挂载、分区以及格式化的方法,3个命令mountfdiskmkfs

下一篇文章,我们应该就要开始使用我们的开发板了,体验一下开发板上的 Linux 是什么一个样子。

好了,本文就到这里,谢谢大家!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

嵌入式 Linux 入门(九、Linux 下的磁盘管理) 的相关文章

  • 将 bash 脚本作为守护进程运行

    我有一个脚本 它每 X 次运行我的 PHP 脚本 bin bash while true do usr bin php f my script php echo Waiting sleep 3 done 我怎样才能将它作为守护进程启动 要从
  • 为什么 proc/ID/maps 有多个共享库条目

    我正在查看嵌入式Linux下的proc ID maps 我注意到一些共享库在进程的内存映射中出现了几次 为什么会这样呢 40094000 400d9000 r xp 00000000 b3 09 723 system lib libc so
  • Laravel 内存问题?

    各位 我在 DO 服务器上遇到这样的问题 我已经尝试了一切 整个网站在使用 Homestead 的 Linux 服务器上 100 正常工作 但上传后 它只能工作一次 在重新加载或刷新页面后会多次下降 我尝试增加 apache 服务器的内存
  • 动态加载库和共享全局符号

    由于我在动态加载的库中观察到全局变量的一些奇怪行为 因此我编写了以下测试 首先我们需要一个静态链接库 头文件test hpp ifndef BASE HPP define BASE HPP include
  • 如何在 Linux 中显示进程状态(阻塞、非阻塞)

    有没有办法查询 Linux 进程表中进程的状态 以便能够演示执行查询时进程是正在运行还是被阻止 我的目标是从进程或程序的 外部 执行此操作 因为我希望从操作系统进程的角度来理解这一点 但欢迎任何想法 这是Python代码阻塞的过程 impo
  • 在 Ubuntu 上使用 Python 获取显示器分辨率

    对于 Ubuntu win32api 中是否有与 GetSystemMetrics 相当的代码 我需要获取显示器的宽度和高度 以像素为单位 我可以建议一些可以使用的方法 不过我还没有使用过 xlib 版本 1 xlib Python 程序的
  • 在 macOS 上更改 libpcap 版本(Apple 删除了一项功能)

    我只想使用 tcpdump 和 Ubuntu 上提供的相同 Qout 功能 在 macOS 上 tcpdump 和 libpcap 已被剥离使用 Qout 进行过滤的功能 tcpdump Qout nnSX c 10 w packet pc
  • 在 4.x 内核上的 64 位内存中查找系统调用表

    我正在尝试编写一个简单的内核模块来查找 Linux 中的 sys call table 但遇到了一些麻烦 我在这里找到了 32 位 Linux 的基本指南 https memset wordpress com 2011 03 18 sysc
  • bash.sh 运行 cron 的权限被拒绝

    如何在这里使用 bash 脚本运行 cron 我做了如下操作 这里有错误 我想知道如何在 ubuntu 中做到这一点 我现在对它感到震惊 bash sh 文件 bin bash cd var www Controller usr bin p
  • 在 shell 脚本中将脚本目录更改为用户的 homedir

    在我的 bash 脚本中 我需要将当前目录更改为用户的主目录 如果我想更改为用户的foo主目录 从命令行我可以执行以下操作 cd foo 效果很好 但是当我从script它告诉我 bar sh line 4 cd foo No such f
  • 检查 Linux 中给定进程的打开 FD 限制

    我最近有一个 Linux 进程 泄露 了文件描述符 它打开了文件描述符 但没有正确关闭其中一些文件描述符 如果我对此进行监控 我就可以提前得知该过程已达到其极限 有没有一种很好的 Bash 或 Python 方法来检查 Ubuntu Lin
  • Python 线程与 Linux 中的多处理

    基于此question https stackoverflow com questions 807506 threads vs processes in linux我假设创建新流程应该几乎和创造新线程在Linux中 然而 很少的测试显示出截
  • 如何使用 shell 脚本解压所有 .tar.gz?

    我试过这个 DIR path tar gz if ls A DIR 2 gt dev null then echo not gz else tar zxvf path tar gz C path tar fi 如果该文件夹有一个 tar 则
  • 如何获取文件夹的大小,包括稀疏文件的表观大小? (du太慢了)

    我有一个包含很多KVM qcow2文件的文件夹 它们都是稀疏文件 现在我需要获取文件夹的总大小 qcow2 文件大小应计为表观大小 而不是实际大小 例如 图片 c9f38caf104b4d338cc1bbdd640dca89 qcow2 文
  • 终止 ssh 会话会终止正在运行的进程

    我正在使用 ssh 连接到我的 ubuntu 服务器 我使用命令启动编码程序 然而 似乎当我的 ssh 会话关闭时 因为我在进入睡眠状态的笔记本电脑上启动它 有没有办法避免这种情况 当然 阻止我的笔记本电脑休眠并不是永久的解决方案 运行你的
  • C 标准库函数与系统调用。哪个是“open()”?

    I know fopen 在C标准库中 所以我绝对可以调用fopen C 程序中的函数 我感到困惑的是为什么我可以打电话给open 功能也一样 open 应该是系统调用 所以它不是标准库中的C函数 因为我能够成功地调用open 函数 我调用
  • 查找当前打开的文件句柄数(不是 lsof )

    在 NIX系统上 有没有办法找出当前正在运行的进程中有多少个打开的文件句柄 我正在从正在运行的进程中寻找在 C 中使用的 API 或公式 在某些系统上 见下文 您可以在 proc pid fd 中对它们进行计数 如果不属于其中之一 请参阅下
  • 使用 xargs 时如何获取退出代码(并行)

    我制作了一个用于启动并行 rsync 进程的脚本 bin bash LIST 1 DEST DIR 2 RSYNC OPTS 3 echo rsyncing From SRC DIR To DEST DIR RSYNC OPTS RSYNC
  • Mongo:无法连接到服务器 127.0.0.1:27017 位于 src/mongo/shell/mongo.js:145

    当我尝试在 ubuntu 中的 shell 中运行 mongo 或打开 rockmongo 时 我看到以下错误 couldn t connect to server 127 0 0 1 27017 at src mongo shell mo
  • 打破条件变量死锁

    我遇到这样的情况 线程 1 正在等待条件变量 A 该变量应该由线程 2 唤醒 现在线程 2 正在等待条件变量 B 该变量应该由线程 1 唤醒 在我使用的场景中条件变量 我无法避免这样的死锁情况 我检测到循环 死锁 并终止死锁参与者的线程之一

随机推荐

  • API-应用程序编程接口

    API 定义 通俗理解 定义 API Application Programming Interface 应用程序接口 是一些预先定义的接口 如函数 HTTP接口 或指软件系统不同组成部分衔接的约定 1 用来提供应用程序与开发人员基于某软件
  • 《迅为开发板i.MX8MM 学习记录》——【MIPI篇】Linux 应用程序显示一张图片

    文章目录 前言 一 准备工作 1 开发环境 2 文件准备 二 伪代码分析 1 读取图片数据到数组 2 打开DRM设备 创建fb 3 填充framebuffer 三 完整代码 1 app h 2 app c 四 编译与运行 1 编译 2 运行
  • Blender-绑定动画Auto-Rig Pro 重映射动捕FBX 小K结合 的问题以及解决

    基本使用的教程参考 B站教程参考 Blender 零成本动捕 使用Autorig轻松重映射动捕BVH to FBX to MMD VMD 等自定义骨骼 附带IK 小K的FBX文件导入会报错 需要安装 better fbx addon 4 1
  • STL(标准模板库)泛型编程的基础介绍

    STL泛型编程 一 概述 二 STL基本概念 三 STL六大组件 四 STL中容器 算法 迭代器 五 C 11新增的容器种类 六 序列 七 算法 八 迭代器 1 迭代器的种类 2 随机访问迭代器 3 迭代器层次结构 九 概念 改进和模型 十
  • 关于丢失signal的发生过程

    关于条件变量的使用 有一种需要注意的情况 条件变量的原理是 wait函数将当前线程挂起 加入到等待队列中 wake函数将某个或者所有被wait函数挂起的线程复活 所以 wake执行时一定要保证所有该wait的都已经wait了 也就是说被挂在
  • 几十亿工单表,查询优化案例

    前言 之前在某大型保险公司担任技术经理 负责优化话务系统模块 由于系统已经运行10年之久 尤其在话务系统中 沉积了几十亿的话务信息表 业务人员反馈 话务系统历史数据查询部分已经完全查询不动 且数据增量仍然已每天200w 以上 数据库频繁报警
  • 【日常业务开发】Java调用第三方http接口的常用方式

    日常业务开发 Java调用第三方http接口的常用方式 概述 Java调用第三方http接口的方式 通过JDK网络类Java net HttpURLConnection 通过apache common封装好的HttpClient 通过Apa
  • Java网络编程

    博客说明 内容初稿为本人的学习笔记归纳整理 在此基础上加入了相关视频学习 相关书籍的理解 相关文章博客查阅及源码阅读 博客的编写已经尽量做到详尽 但免不了有纰漏和理解不到位的地方 发现博客的任何问题均可联系我 aboutwxf 163 co
  • Error loading: xxxx/plugins/python/helpers/pydev/pydevd_attach_to_process/attach_linux_amd64.so

    在涉及到深度学习网络调试的时候 经常出现断点卡住的情况 还会提示 Error loading home xxx pycharm 2023 2 1 plugins python helpers pydev pydevd attach to p
  • java中的实时定时任务管理系统

    java中的实时定时任务管理系统 前言 新增定时任务的线程池配置类 配置ScheduledFuture的包装类 ScheduledFuture是ScheduledExecutorService定时任务线程池的执行结果 实现Runnable接
  • 对象内存分布

    在 JVM 中 对象在内存中分为三块区域 对象头 由Mark Word和Klass Point构成 Mark Word 标记字段 用于存储对象自身的运行时数据 例如存储对象的HashCode 分代年龄 锁标志位等信息 是synchroniz
  • 【小程序】输入框检验姓名、身份证(正则表达式)并提交

    目标 输入绑定姓名 身份证号并进行校验 若未填或校验不通过则显示绑定失败的轻提示 若通过校验并提交则显示绑定成功 使用Vant Weapp gitee io 库 思路与代码 html wx model绑定输入框输入的值 data key是一
  • ThreadLocal深度解析

    简介 在并发编程中 导致并发bug的问题都会归结于对共享变量的操作不当 多个线程同时读写同一共享变量存在并发问题 我们可以利用写时复制 不变性来突破对原数据的写操作 没有写就没有并发问题 而本篇文章所介绍的技术是突破共享变量 没有共享变量也
  • Redis的主从复制和哨兵机制详解

    目录 一 CAP 原理 二 Redis主从同步 1 主从同步是什么能干嘛 2 Redis是如何实现数据同步的 2 1 增量同步 2 2 快照同步 2 3 无盘复制 2 4 通过Wait 指令保证强一致性 3 搭建Redis 1主2从 3 1
  • 解决linux下没有一些windows的头文件问题

    以conio h头文件为例 问题 解决办法 首先想办法找到conio h源文件 网上一般会有 然后随便放到哪个路径 最后以绝对或相对路径的方式添加include 例如 我把文件放在家目录下的share目录下的tool目录 现在我在家目录的s
  • 从第三方系统定时同步数据不全的解决方案

    小Z今天在项目上遇到一个遗留问题 客户的系统需要定时从银行接口获取入账信息 发生了入账数据的丢失 原因是自研系统通过定时任务的方式 每次执行任务只是获取前一天到当前时间的数据 而上个月有段时间银行前置机通信出现异常 所以出现了数据同步不到位
  • STM32CubeIDE学习笔记——搭建环境、编译烧写

    一 搭建环境 1 1 安装JRE 由于 STM32CubeIDE 软件是基于 JAVA 环境运行的 所以需要安装 JRE 才能使用 官网下载 Java Downloads Oracle 1 2 安装STM32CubeIDE 官网下载 STM
  • 大数据毕设 基于大数据的共享单车数据分析与可视化

    文章目录 0 前言 1 课题背景 2 数据清洗 3 数据可视化 热力图 整体特征分布 查看2011 2012间的单车租借情况 天气对于租借数量的影响 湿度与温度对于租借数量的影响 注册用户与未注册用户 4 总结 0 前言 这两年开始毕业设计
  • 判断IP地址有效性

    gt File Name newfile1 cpp gt Author pzz gt Mail 837157806 qq com gt Created Time 2014 2 24 14 06 47 include
  • 嵌入式 Linux 入门(九、Linux 下的磁盘管理)

    嵌入式 Linux 入门第九课 了解 linux 下的磁盘管理 学会挂载移动硬盘设备 矜辰所致 前言 嵌入式 Linux 专栏更新到现在 我们都还没有碰过开发板 本来想着前面的讲完至少先碰一碰开发板 让我们知道我们最终的目的是在开发板上运行