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

本文介绍在Linux系统下如何确定各个分区对应的设备文件路径。通过分析命令行参数blkdevparts和df命令输出,可以建立分区与节点间的映射关系。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值