[Share Experiences] U盘隐身的灵异事件!
Tofloor
poster avatar
sammy-621
deepin
2021-07-29 23:31
Author

今天要用到U盘拷点东西,只听到叮咚一声,但没看到文件管理器中显示U盘。刚开始以为是显示慢,耐心等待一下,左等右等不出来。拔下重插时,系统正常提示设备已安全移除。

想到我的Deepin是最新版(723)内测版,我第一反应是系统更新带来的Bug,所以热心地在内测帐中做了反馈。事已至此,按说等官方回复等下个版本解决‘Bug’就可以了。可偏偏我就不是那种轻易消停的人,于是开始了各种排查操作。以下是这次折腾过程,希望给各位提供点借鉴。

1、既然插、拔,系统都有反应,那说明系统是能认出U盘的,推测有很大可能是已经挂载了的,应该首先从‘显示’上下手找问题

2、与文件管理器中各磁盘的显示有挂载相关的配置,我知道有/etc/fstab 和/etc/udev/rules.d ;

先看 /etc/fstab ,它是用来存放文件系统的静态信息的文件(既然是静态的,跟U盘经常插拔的场景不同,它的嫌疑比较小),是在启动时挂载相对固定的硬盘设备(文件系统)到常用目录的,也就是‘文件系统’(设备)与‘挂载点’的对应表。/etc/fstab在安装Deepin时,安装过程中让你指定挂载点的操作,比如让你分配swap、指定/home等挂载点的文件系统,这个过程最终生成的结果就存在这里。给个示意图看下这里面都存些啥:

 

 

再来看/etc/udev/rules.d ,百度说,udev主要是管理热插拔设备的管理器,那望文生义,rules.d,应该就是热插拔的某种规则...直接ls下看看这个文件夹下都有啥:各种以rules结尾的配置文件。看到‘*hide_parts*’几个字时,你是否和我一样有点小激动?直觉告诉我,这里可能会找到答案。

 

打开90-hide_parts.rules(文件名有可能会有细微差别,但‘hide_parts’这几个字应该是被包含的),看到以下文字:

 

这里面的配置,大意就是把类型为vfat的文件系统,都隐藏掉。这个结论,可以百度求证,而实际上确实如此。这个文件当时也是我编辑的,因为我装了Win+Deepin双系统。为了隐藏Win下的系统恢复等分区,写了这个规则,时间太久远了,我都忘记了。

3、至此,U盘不显示的原因基本找到了,我的U盘就是Fat32格式的(Fat32跟vfat什么关系?这里做下伏笔,下文有提到)。严谨起见,我把这个文件90-hide_parts.rules转移到别的目录备份一下,在/etc/udev/rules.d下删除。重启后,插入U盘果然可以认出来了。当然,也多出了一些以前隐藏掉的分区

 

4、原因找到了,现在是公布解决法。还得从/etc/udev/rules.d的规则入手。只是规则不能那么‘粗鲁’了:以前的规则是将文件系统为vfat的都隐了。百度得知,规则还可以直接指定UUID来隐藏分区。如何找到设备分区的uuid呢?终端执行blkid | grep vfat 。最终的规则里,仅把你想隐藏的系统分区(如 EFI system partition)给隐藏就可以了。我的规则如下:

 

  

5、其它知识点补充(上文伏笔)。Windows和Linux下的文件系统类型,有挺大的不同,这里不详细展开了,只说下跟本文相关的:Windows下的Fat32格式,在Linux中对应为vfat

至此,真相已大白,冤枉了Deepin。针对这个问题,可能你有更好的解决办法,请不吝在本贴回复。另外,文中的方法也应该适用于因安装snap、uengine等工具而多出来的奇奇怪怪的分区。

Reply Favorite View the author
All Replies
zijinyise
deepin
2021-07-29 23:46
#1

大佬666

Reply View the author
sammy-621
deepin
2021-07-30 00:29
#2
zijinyise

大佬666

感谢抬举!

Reply View the author
kitefly
deepin
2021-07-30 01:15
#3

Wiondws和Windwos是什么?是Windows吗?

Reply View the author
sammy-621
deepin
2021-07-30 05:13
#4
kitefly

Wiondws和Windwos是什么?是Windows吗?

是Windows,感谢指正,已修改。

Reply View the author
[^_^]
deepin
2021-07-30 19:43
#5

如果你没有自己编辑这个隐藏规则的话,在 80-udisks 下面也能找到一系列的隐藏规则

比如,NTFS 文件系统+ Recovery 卷标的u盘就会被隐藏...

发现被隐藏的时候可以用 udisksctl info -b /dev/sdX 这个命令来看看 HintIgnore 是不是 true

Reply View the author
sammy-621
deepin
2021-07-30 19:57
#6
[^_^]

如果你没有自己编辑这个隐藏规则的话,在 80-udisks 下面也能找到一系列的隐藏规则

比如,NTFS 文件系统+ Recovery 卷标的u盘就会被隐藏...

发现被隐藏的时候可以用 udisksctl info -b /dev/sdX 这个命令来看看 HintIgnore 是不是 true

受教

Reply View the author