Linux确定分区所对应的设备文件路径

Linux确定分区所对应的设备文件路径

一、简介

  本文主要介绍,在Linux系统下,如何确定各个分区所对应的设备文件路径

二、问题引入

  在开发与测试过程中,经常会需要我们对指定分区进行操作,举几个具体的例子:

  • 当我们需要挂载新制作的分区镜像时,就需要我们确认对应的挂载分区
  • 调试过程中,我们想要避免应用分区的进程启动,但对于只读文件系统,可行的方案并不太多,其中一个可行的方案是直接擦除应用分区

  •   为擦除指定分区,通过一条简单的dd指令就可达到目的:
dd if=/dev/zero of=/dev/mmcblk0p8  bs=10M

  但很多时候,真正困扰我们的,是如何确定分区对应的节点呢?我怎么知道应用分区(AppLocal)对应的是/dev/mmcblk0p8还是/dev/mmcblk0p10呢?
具体的内容将在正文中进行讲解。

三、正文

3.1 获得分区表

  首先需要了解的是:设备详细的分区信息,记录在/proc/cmdline中,以我手中的设备为例:

/usr/local/bin # cat /proc/cmdline 
earlyprintk console=ttyS0,115200 rootwait nprofile_irq_duration=on coherent_pool=2M libata.force=1.5 ahci_nvt_ivot.force_gen=1 rootfstype=squashfs ro flashsize=32M chiptype=80 EtherConfig=2 AuthSerial=006E000000 MachineType=0 HardwareVer=0 DevVersion=0 UartConfig=1 blkdevparts=mmcblk0:0x40000@0x40000(fdt),0x100000@0xC0000(uboot+3Logo),4M@0x1C0000(Kernel),16M@21M(Rootfs),128M@41M(AppLocal),800M@169M(AppExt),16M@971M(SysParaCusPara),1M@987M(SysStatus),2048M@988M(data1),-(data2) nvtemmcpart=0x40000@0x40000(fdt),0x100000@0xc0000(uboot+3Logo),0x400000@0x1c0000(linux),0x1000000@0x1500000(rootfs),0x400000@0x2500000(BKSystem),0x8000000@0x2900000(AppLocal),0x32000000@0xaa00000(AppExt),0x1000000@0x3cb00000(SysParaCusPara),0x100000@0x3dc00000(SysStatus),0x80000000@0x3de00000(data1),0x10dd00000@0xbdf00000(data2)  root=/dev/mmcblk0p4
/usr/local/bin #

  选项blkdevparts记录了详细的分区划分信息。关于此一部分的解释,详见:嵌入式设备命令行的分区参数解析
  从上文中,我们知道:blkdevparts命令行选项,主要用于使用EMMC作为存储介质的嵌入式设备,使系统能够从命令行中获取块设备的分区表。
  我们以图形的方式对上述blkdevparts选项进行分析:
blkdevparts选项

  如上,我们就能够清晰得了解各个分区的大小,偏移,以及名称等信息。我们可以以一种更直观的方式进行展示:

分区信息

  如上所示,不难发现,各个分区在对应的存储介质(mmcblk0)是按照顺序排布的,以上为例,Rootfs的下一个分区是AppLocal,其前一个分区则是Kernel。在明确这一点后,将方便我们理解接下来的内容。

3.2 以特定分区做为对照,建立分区与节点的映射关系

  在对分区表有一个大致的了解后,接下来,就是如何确定各分区对应的节点。首先,我们在设备上执行df指令,获取磁盘空间的占用情况:

Filesystem                Size      Used Available Use% Mounted on
/dev/root                 3.9M      3.9M         0 100% /
devtmpfs                165.2M         0    165.2M   0% /dev
tmpfs                     6.0M    224.0K      5.8M   4% /var
/dev/mmcblk0p5           20.5M     20.5M         0 100% /usr/local
/dev/mmcblk0p6           59.4M     59.4M         0 100% /usr/local/app/extend
/dev/mmcblk0p8         1003.0K     13.0K    939.0K   1% /var/mnt/emmc/scare_rw
/dev/mmcblk0p9            2.0G     40.0K      1.9G   0% /var/mnt/emmc/freq_rw
/usr/local/bin # 

  现在对我们掌握到情况进行总结分析:

  1. 已知AppLocal为我们的应用分区,且其挂载路径为/usr/local,系统对应的设备文件路径名为/dev/mmcblk0p5
  2. 已知AppExt为我们的扩展应用分区,且其挂载路径为/usr/local/app/extend,系统对应的设备文件路径名为/dev/mmcblk0p6
  3. 上一小节 中,我们了解到各分区是按照顺序划分的,AppExt位于AppLocal之后,而Rootfs位于其前
  4. 发散:Rootfs对应的设备文件路径改为多少?

  通过以上基本的分析,我们不难推断出,Rootfs对应的分区节点应为/dev/mmcblk0p4,情况是否真是如此呢?在前文我们获取到的cmdline中,存在root=/dev/mmcblk0p4的字段,而这亦与我们的推论是吻合的。
  举一反三,我们即可通过上述方法,推断出各个分区所对应的设备文件路径了。

  1. linux命令–磁盘命令dd: https://www.cnblogs.com/kongzhongqijing/articles/9049336.html
  2. 嵌入式设备命令行的分区参数解析:https://www.kernel.org/doc/html/v5.4/block/cmdline-partition.html
  3. df 命令:https://www.cnblogs.com/peida/archive/2012/12/07/2806483.html

五、文档信息

作者: Litost_Cheng

发表日期:2021年04月10日
更多内容:

  1. Litost_Cheng的博客
  2. Litost_Cheng的Github
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Linux中的fdisk命令是一个常用的磁盘分区工具。通过fdisk命令,我们可以对磁盘进行添加、删除、扩展以及查看分区表的操作。在Linux中,磁盘分区与Windows下的分区类似,可以将其比喻为C、D、E、F等盘符。然而,与Windows不同的是,Linux中的磁盘分区对应的是一个文件或目录而非简单的盘符。 要使用fdisk命令进行磁盘分区,我们需要使用特定的选项和设备参数。其中,常用的选项之一是"-l",它可以用来查看硬盘分区表。另外,还可以通过fdisk命令进入新分区。值得注意的是,进入新分区时需要进入挂载目录而不是直接进入/dev/sdb1这样的设备路径。此外,fdisk命令还有其他用法,比如通过"fdisk -l"命令来查看硬盘分区表。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [linux fdisk 命令详解 (磁盘分区)](https://blog.csdn.net/weixin_44044239/article/details/93376427)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [【linux】循序渐进学运维-基础篇-分区命令fdisk](https://blog.csdn.net/xinshuzhan/article/details/106954319)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值