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
选项进行分析:
如上,我们就能够清晰得了解各个分区的大小,偏移,以及名称等信息。我们可以以一种更直观的方式进行展示:
如上所示,不难发现,各个分区在对应的存储介质(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 #
现在对我们掌握到情况进行总结分析:
- 已知
AppLocal
为我们的应用分区,且其挂载路径为/usr/local
,系统对应的设备文件路径名为/dev/mmcblk0p5
- 已知
AppExt
为我们的扩展应用分区,且其挂载路径为/usr/local/app/extend
,系统对应的设备文件路径名为/dev/mmcblk0p6
- 从上一小节 中,我们了解到各分区是按照顺序划分的,AppExt位于AppLocal之后,而Rootfs位于其前
- 发散:Rootfs对应的设备文件路径改为多少?
通过以上基本的分析,我们不难推断出,Rootfs
对应的分区节点应为/dev/mmcblk0p4
,情况是否真是如此呢?在前文我们获取到的cmdline
中,存在root=/dev/mmcblk0p4
的字段,而这亦与我们的推论是吻合的。
举一反三,我们即可通过上述方法,推断出各个分区所对应的设备文件路径了。
四、参考与链接
- linux命令–磁盘命令dd: https://www.cnblogs.com/kongzhongqijing/articles/9049336.html
- 嵌入式设备命令行的分区参数解析:https://www.kernel.org/doc/html/v5.4/block/cmdline-partition.html
- df 命令:https://www.cnblogs.com/peida/archive/2012/12/07/2806483.html
五、文档信息
作者: Litost_Cheng发表日期:2021年04月10日
更多内容: