奇怪的BUG:U盘插入打印机后文件目录为空,可读可写,写入内容无法在电脑端查看

本文主要是介绍奇怪的BUG:U盘插入打印机后文件目录为空,可读可写,写入内容无法在电脑端查看,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

问题描述

现象描述:从打印机扫描到U盘时,发现U盘目录为空(实际有在U盘中保存文件),扫描生成文件后,U盘插入电脑,文件目录正常显示,但找不到扫描件。再次将U盘插入打印机,可读取到前期扫描的文件并进行打印,打印内容和扫描内容完全一样。

现象总结:疑似打印机在访问U盘时使用了新的空间,与在电脑端识别到的空间不同。

软硬件环境:

  • 打印机:KONICA MINOLTA bizhub C3350i (支持从U盘打印、扫描到U盘)
  • U盘:Kingston DataTraveler 2.0 (7.25 GiB,比较老的一款,正常读写没问题,无故障历史)

排查过程:

  • 测试发现Windows电脑、MAC电脑和Linux电脑中,插入U盘均进入正常存储空间。
  • 测试发现插入U盘后打印机对新空间可读可写,由于打印机操作系统限制无法查看到U盘的属性,包括文件空间大小等信息。
  • 前期为了能在打印机上使用,专门将U盘格式化为FAT格式(打印机只能识别FAT格式,其他格式插入后不显示),其他FAT格式在打印机上测试未发现相同问题。

 

问题解决 

故障原因:采用分区编辑器(其他磁盘工具,例如分区助手、diskgenius也可以)查看U盘,发现被分为两个区,均为FAT格式,按存储单元顺序存在的第一分区,标识为EFI+BIOS,空间为200MB,在电脑设备中会被默认视为存放引导文件的空间,不可见,第二分区为可见的数据区,标识为msfdata,空间为7G左右。打印机默认读取了第一分区,并在其中进行读写操作,并且只能挂载一个分区,忽略了第二分区。

因为U盘前期用于做了启动盘,后期使用后直接格式化了,导致第一分区为空,格式化时未注意到这一点,从而看起来像打印机使用了全新的分区空间。

故障截图:

 我的电脑里的磁盘只有第二个分区可以被读取,第一个分区默认是不可见的。

 分区顺序应该是按照sda1->2->3->...的顺序来的。

解决方法:(后两个方法会丢弃原来扫描到不可见分区的文件)

  • 方法一:将第二分区分出来一部分空间,创建第三分区,将第一分区的内容拷贝进第三分区。执行后重新插入U盘,此时电脑将分配两个盘符,并在存储中显示两个磁盘,可以在第二个磁盘中找到想要的文件。
  • 方法二:删除第一分区和第二分区(需提前将数据拷出备份),重新分区U盘,将U盘分为一个分区,并重新使用打印机扫描。
  • 有问题待进一步解决的方法:将第一分区删除后,将第二分区扩容至全部空间,然后重新扫描。(此方法会产生新问题:U盘插入打印机后无法被识别,即使分区为FAT格式也无法识别,但在电脑端均可以正常读写,疑似分区路径未修改,仍然为/dev/sda2造成的【之前删掉的第一分区为/dev/sda1】)

删除第一分区后,分区号不变,仍然为sda2:

 即使将分区sda2的空间起始点移动到最起始的位置,也仍然无法在打印机上识别,刷新后分区仍然为/dev/sda2:

据此猜测,打印机只支持读取首个分区,即/dev/sda2

最终将U盘整成以下这个样子就可以正常在打印机和电脑之间使用了(方法2):

  

学习资料

EFI系统分区(英语:EFI system partition,简写为ESP),是一个FAT格式的磁盘分割,但是其分区标识是EF (十六进制) 而非常规的0E或0C,因此,该分区在Windows操作系统下一般是不可见的。UEFI固件可从ESP加载EFI启动程式或者EFI应用程式。

EFI分区通常大小约为100-200MB,用于系统启动,引导硬件设备加载操作系统。

efi是如何引导系统启动的?

EFI分区简单来说相当于一块固定在存储空间开头位置的区域,安装系统时会将程序的入口文件放在这个位置,硬件(主板)将从这个入口文件开始加载启动,并由此进入系统。(有点类似于点击微信的exe文件启动后,微信才会正常打开,硬件固定到这个区域去找这样的启动文件,操作系统厂商只需要把引导文件放在这里即可)。由于之前用U盘重装系统,需要从U盘启动微PE,首个分区被设置为EFI,并被隐藏,以保证不受破坏或不被格式化(这个引导文件很重要)。

EFI分区内通常包含哪些内容?

Boot是计算机默认引导文件所在的目录,Microsoft是微软Windows系统引导所在的目录。
Boot目录:


Microsoft目录:


Microsoft\Boot目录:


上图中红框内的bootmgfw.efi就是windows默认的系统引导文件。

更多资料:

EFI系统引导的一些零碎知识点:https://www.bbsmax.com/A/KE5QK81ZzL/
更高级的UEFI引导过程:https://blog.csdn.net/qq_42584874/article/details/123702759

这篇关于奇怪的BUG:U盘插入打印机后文件目录为空,可读可写,写入内容无法在电脑端查看的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/275999

相关文章

sysmain服务可以禁用吗? 电脑sysmain服务关闭后的影响与操作指南

《sysmain服务可以禁用吗?电脑sysmain服务关闭后的影响与操作指南》在Windows系统中,SysMain服务(原名Superfetch)作为一个旨在提升系统性能的关键组件,一直备受用户关... 在使用 Windows 系统时,有时候真有点像在「开盲盒」。全新安装系统后的「默认设置」,往往并不尽编

Mac电脑如何通过 IntelliJ IDEA 远程连接 MySQL

《Mac电脑如何通过IntelliJIDEA远程连接MySQL》本文详解Mac通过IntelliJIDEA远程连接MySQL的步骤,本文通过图文并茂的形式给大家介绍的非常详细,感兴趣的朋友跟... 目录MAC电脑通过 IntelliJ IDEA 远程连接 mysql 的详细教程一、前缀条件确认二、打开 ID

Linux实现查看某一端口是否开放

《Linux实现查看某一端口是否开放》文章介绍了三种检查端口6379是否开放的方法:通过lsof查看进程占用,用netstat区分TCP/UDP监听状态,以及用telnet测试远程连接可达性... 目录1、使用lsof 命令来查看端口是否开放2、使用netstat 命令来查看端口是否开放3、使用telnet

Java使用正则提取字符串中的内容的详细步骤

《Java使用正则提取字符串中的内容的详细步骤》:本文主要介绍Java中使用正则表达式提取字符串内容的方法,通过Pattern和Matcher类实现,涵盖编译正则、查找匹配、分组捕获、数字与邮箱提... 目录1. 基础流程2. 关键方法说明3. 常见场景示例场景1:提取所有数字场景2:提取邮箱地址4. 高级

C#高效实现Word文档内容查找与替换的6种方法

《C#高效实现Word文档内容查找与替换的6种方法》在日常文档处理工作中,尤其是面对大型Word文档时,手动查找、替换文本往往既耗时又容易出错,本文整理了C#查找与替换Word内容的6种方法,大家可以... 目录环境准备方法一:查找文本并替换为新文本方法二:使用正则表达式查找并替换文本方法三:将文本替换为图

MySQL的触发器全解析(创建、查看触发器)

《MySQL的触发器全解析(创建、查看触发器)》MySQL触发器是与表关联的存储程序,当INSERT/UPDATE/DELETE事件发生时自动执行,用于维护数据一致性、日志记录和校验,优点包括自动执行... 目录触发器的概念:创建触www.chinasem.cn发器:查看触发器:查看当前数据库的所有触发器的定

Linux从文件中提取特定内容的实用技巧分享

《Linux从文件中提取特定内容的实用技巧分享》在日常数据处理和配置文件管理中,我们经常需要从大型文件中提取特定内容,本文介绍的提取特定行技术正是这些高级操作的基础,以提取含有1的简单需求为例,我们可... 目录引言1、方法一:使用 grep 命令1.1 grep 命令基础1.2 命令详解1.3 高级用法2

Linux如何查看文件权限的命令

《Linux如何查看文件权限的命令》Linux中使用ls-R命令递归查看指定目录及子目录下所有文件和文件夹的权限信息,以列表形式展示权限位、所有者、组等详细内容... 目录linux China编程查看文件权限命令输出结果示例这里是查看tomcat文件夹总结Linux 查看文件权限命令ls -l 文件或文件夹

解决pandas无法读取csv文件数据的问题

《解决pandas无法读取csv文件数据的问题》本文讲述作者用Pandas读取CSV文件时因参数设置不当导致数据错位,通过调整delimiter和on_bad_lines参数最终解决问题,并强调正确参... 目录一、前言二、问题复现1. 问题2. 通过 on_bad_lines=‘warn’ 跳过异常数据3

电脑提示d3dx11_43.dll缺失怎么办? DLL文件丢失的多种修复教程

《电脑提示d3dx11_43.dll缺失怎么办?DLL文件丢失的多种修复教程》在使用电脑玩游戏或运行某些图形处理软件时,有时会遇到系统提示“d3dx11_43.dll缺失”的错误,下面我们就来分享超... 在计算机使用过程中,我们可能会遇到一些错误提示,其中之一就是缺失某个dll文件。其中,d3dx11_4