对udisk操作
本文最后更新于:2023年6月22日 上午
前言
这几天为了完成导师的任务在封校的苦闷日子中找一点乐趣,想着怎么对自己的u盘进行一些操作,让我能够读取固定位置的数据。
然后我就苦逼得找了两天。
其实早就找到了
下面介绍一下最强大的u盘工具:
sg3_utils
所谓
安装
安装有大坑,至少我在linux上是这样。
先介绍我的 环境:
1 |
|
安装有两种方式,一:
1 |
|
我未尝试该方法,该方法可能会出现一些问题。
另一种是在官网通过源码编译安装,我下载的是1.47.tar.xz。
之后的安装方式是这样的:
1 |
|
这里解释一下,--disable-static
会阻止安装时采用依赖库的静态版本(参考博文),如果不这样做,可能会在执行命令时
产生和我一样的错误:
1 |
|
即便采用软链接的方式把libsgutils2.so.2
链接到libgutils2.so.147
也不行。
我在这里耽误了好久,最终找到上文中的博文才知道是安装是出了问题。 😂
使用
在我的
1 |
|
我对linux的了解并不深,其中 /dev/sda1
与根目录下的
/dev/sg0
应为同一个设备,应该是linux对u盘不同功能的区分,实际上还是同一个设备。
之后我们可以对u disk进行读取操作了:
1 |
|
sg_read
属于 sg3_utils
的一个函数,其官方介绍在网址, if
参数指定挂载的文件系统, bs
是要读取的每一个块(block,我不知道怎么翻译)的大小,这里是对每一个块读取512字节,
count
相当于读取的数据量,这里是读取2kb大小的块,
time
相当于开启一个计时选项,当然sg_read还有很多参数可选,具体参数请参考官方文档。
当然,我们不能只是一行行的敲shell命令,那么怎么把命令写在脚本里面呢?
我首先尝试了写一个1.sh脚本:
1 |
|
然后sudo ./1.sh
,会显示commod not found;或者在su
-root下sudo ./1.sh
显示权限不够,原因在于1.sh要求读取系统层面的文件,而sg_read并没有添加到系统配置里面,所以显示command
not found或者权限不够,具体原因我还不是很了解。 🥺
那么我们怎么办呢?
上
我写了一个脚本1.py,在 sudo python3 1.py
就可以了。下面是py脚本:
1 |
|
用上python之后,就可以加一些奇技淫巧了。比如添加随机数据,随机读取数据以测量u disk的性能。
写在最后
不得不说,从 某人没人指导,没人给方向,前半部分时间我一直在研究一个脚本,他通过直接调用内核参数来实现对u
disk的操作。我还大致浏览了一些scsi的书籍,比如来自mit的scsi,结果屁用没有成功提高了我对scsi的理解。这也是我写出这篇博客的动力,帮助人们认识到
参考链接
本文作者: Heeler-Deer
本文链接: https://heeler-deer.top/posts/c4f3f0b4/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!