linux 分区编辑器gparted工作逻辑简析

1、网上关于gparted的教程还是蛮多的,但大都是如何使用gparted进行分区操作的方向
2、本文结合自己的使用经历从gparted打开前后内存中数据变化的角度来讲。

1、分区设备在内存中对应的文件表示

分区设备的文件表示
1、从块设备角度:每个分区设备都会对应一个dev设备文件,如 /dev/sda4 /dev/sdc4等
2、从虚拟文件系统角度:每个分区设备在computer:///虚拟目录下会对应一个.drive文件 (可以用 gvfs-info computer:///xxx.drivegio info computer:///xxx.drive 命令查看对应文件的具体信息)

2、从使用现象中分析gparted工具的工作逻辑

  • 测试
    1、插入U盘并挂载或者挂载某个除(/ /boot /boot/efi)以外的硬盘分区 -> 打开gparted -> 运行gio list computer:///gvfs-ls computer:///命令 -> 发现会多出 .mount文件
    2、插入U盘使其处于卸载状态,或者卸载某个硬盘分区 -> 打开gparted -> 运行 gio info computer:///xxx.drivegvfs-info comoputer:///xxx.drive发现此时比gparted打开前缺少了target-uri属性
    3、先打开gparted -> 再插入U盘 -> 使用上述的list命令发现没有新增的.mount文件,使用lsblk命令发现新插入的U盘也没有自动挂载(主流linux系统默认开启了移动存储设备的自动挂载功能)

  • 分析
    1、默认情况下(即未打开gparted时),一个 drive文件 对应一个dev块设备,用gio infogvfs-info查询出来的target-uri属性表示的是该块设备的挂载路径。如果设备此前处于卸载状态,则此时查询出来没有target-uri属性
    2、gparted打开时,会从之前处于挂载状态的drive文件中剥离出来一个对应的mount文件

    • 此时U盘内部的数据内容位于mount文件内
    • drive文件内无实际意义,甚至此时info命令查询出来的信息都不准确。如mountable::can-eject 弹出属性就是错误的

    3、gparted打开后再插入U盘等设备,gparted会阻止新设备自动挂载。

    • drive文件是用来描述一个分区设备文件的,所以drive文件是必须要存在的。
    • 按照上述第2条的分析,未挂载的设备自然不会产生mount文件(mount本身就是挂载的意思)

3、gparted与linux文件管理器

1、 开源的文件管理器如caja、nautilus等都会对分区设备进行显示,但是部分文件管理器在gparted打开后可能就不会再显示设备文件。
2、linux对磁盘设备文件的处理有2套逻辑(我已知的):

  • 这里是功能参考 gio参考 (跳转到页面后寻找下图的字符串)

  • GFile系列 (本文主要介绍的computer:///目录就是这个逻辑)
    在这里插入图片描述

  • GVolumeMonitor系列 (gparted打开后文件管理器不再显示设备文件则可能就是走的这个逻辑)
    在这里插入图片描述

  • 部分GFile案例和GVolumeMonitor案例请参考本专栏其他文章