用一行命令把树莓派变成视频后视镜

大家在冬季骑行的时候少不了要穿一堆厚衣服,戴上帽子围巾什么把自己裹得紧紧的。

比如像这样

这样暖和是暖和了,但安全问题来了 —— 不方便回头看背后是否有车或行人靠近,万一有车在加速,你又正好在转弯,那可就惨了。

能不能给自行车装一个视频后视镜?这样不用回头也能知道后方发生的一切。

一个叫 Alex Eames 的外国人就是这么做的。 他戏称冬天的自己戴着“忍者”模式的巴拉克拉瓦帽和自行车头盔让他看起来像个“山雀”。

某天他出门的时候,有辆车差点和他撞上。幸好他们都及时刹住了车,但离得已经很近了。

原本他买了一面小镜子,但效果不太理想。于是想到了摄像头和显示屏的组合,这样不但可以实时看到车况,而且还能当记录仪用。

他先是在亚马逊上看了一些产品,但要么不合适,要么价格太贵(200英镑以上)。而他的需求主要就是能实时了解车前后的状况(主要是后面)。而且他对GPS之类的功能并无需求,最多也就是希望能拍到野生兔子路过这种有趣的镜头。

那基于树莓派的项目如何呢?

在重新发明轮子之前,看看别人已经做了什么是个好主意。

在(http://pidashcam.blogspot.com)上有一个很好的“双摄像头行车记录仪”实现,该项目使用了一个树莓派II代,Pi摄像头和USB摄像头。

看起来很棒,但 Alex Eames 不想在这个阶段使用GPS,只需要一个屏幕来实时查看他身后的情况,另外还想使用一些自己买过的零件。

两年前他在ebay上花20英镑买了一个Keidei HDMI 3.5英寸屏幕,可以通过HDMI连接树莓派。而且有电阻触控。

3.5英寸KeDei屏幕背面
3.5英寸可触控Kedei屏幕正面(带HDMI接口)

“如果要追求效果,我可以升级显示屏以便拥有更高的分辨率。然后用一个全新的Pi 3A+,配上Pi摄像头在前面。再弄一个Pi Zero W带摄像头在后面。” Alex Eames 说道。

测试中

前面的树莓派将作为无线接入点和后面的Pi Zero W连起来。

这两个树莓派都将被设置为开机后自动运行。后方的Pi Zero W将其视频传输到端口8090。然后前面的Pi将抓取视频流并显示它,此处可以使用vlc。这样他就能在屏幕上看到身后的东西了。

装好树莓派后视镜的自行车

好了,最关键的一招是怎么实现的呢?一句命令就可以搞定,那就是:

raspivid -o – -t 0 | tee test_video.h264 |
cvlc -v stream:///dev/stdin –sout ‘#standard{access=http,mux=ts,dest=:8090}’ :demux=h264

如果你有冬季骑行的习惯,不妨也给自己也做个树莓后视镜吧。有相关技术问题欢迎在“IoT前哨站”公众号上给我私信。

相关素材来自:Raspi.tv

编译:王文文,前51CTO安全频道主编,阿里巴巴资深安全工程师,现供职UCloud技术市场,IoT前哨站创始人。

双因素认证就够了?让我们用树莓派做个三因素的

双因素认证就够了?让我们用树莓派做个三因素的。

虽然双因素认证一直在我们在线访问电子邮件和网上银行时提供更多的安全性,但在物理世界,现在已经有三因素认证可以保护我们的贵重物品。

扫描指纹进行身份验证

不明白什么意思? 以下是来自Switched On Network的视频,演示了如何使用Raspberry Pi构建三因素门锁,包括RFID密钥环,6位密码和发送到手机的一次性密码。

(视频地址:https://v.qq.com/x/page/t07975pca69.html

Alex Bate的三因素门锁制作关键

要构建Switched On Network的三因素门锁,你需要采购Raspberry Pi 3,USB RFID读取器和遥控器,触摸屏,电子门锁和继电器开关。如果这些都有了,你最好再找个电源和胶枪。

胶水枪

为屏幕安装适当的驱动程序(如果点不亮屏幕)后,你就可以安装Switched On Network在GitHub repo公布的Python脚本。

地址:https://github.com/paulfp/Three-Factor-Security-Door

在竖屏模式下连接到Pi的三因素认证

然后是物理构造:你需要把门锁、引线和其他东西连接到Pi上,所有这些都要连接到门和门框上。

三因素认证门锁组件

最终成品是一个你提供密码、RFID标签(或卡片)和手机短信才能打开的高级门锁。 虽然我们不建议你用这种技术从外侧保护你的房屋,但它却是办公室或密室的完美配置。

《德克斯特实验室》经典台词

正如美国经典动画角色,德克斯特说的那样:“每个人都要有个私密之地。”

手机变PC —— Linux on DeX让开发者更自在

2017年底,三星 Samsung 宣布了一个在手机上跑 Linux 的项目 —— Linux on DeX。

2018年11月,他们把这个项目升级了。

和2017版相比,2018版不再需要昂贵的专用底座,只需要一条视频线。而在前些日子的 SDC 开发者大会上,三星宣布 DeX 已完整支持 Linux。

虽然还在 Beta 测试,但相关 APK 安装包已开放下载。官网对它的描述是,Linux on DeX 可让你随时随地写代码。

简单来说,通过该应用三星手机可以启动 Linux 容器。

然后再连接显示器,就会获得 Ubuntu 桌面环境,从而在手机上达到 PC 开发的体验。不过目前只支持 Galaxy Note 9 和 Galaxy Tab S4。

通过一根线与显示器进行连接就能把手机秒变 PC —— 是不是似曾相识的感觉?

不过 Linux on DeX 目前仅支持一个定制的 Ubuntu 镜像(Canonical 提供的 Ubuntu 16.04 LTS 版本)。此外,对设备的硬件要求也比较高,至少需要 8GB 存储空间和 4GB RAM,如需要安装其他软件包或应用程序,还需要额外的存储空间。

显然,Linux on DeX 是一个面向开发者和专业用户的项目,那么我们可以用它做什么呢?

1、安装和使用你需要的软件

2、使用 CLI 管理服务器

3、用你喜欢的 IDE 创建或维护开发项目

4、常规的学习或办公

详细的使用教程和说明,请访问项目官网以了解更多。

相关视频:http://v.qq.com/x/page/x079509hd7a.html

官网地址:

https://www.linuxondex.com/

为避免重新洗衣服而做的降雨报警机

没有什么比刚晾干的衣服更舒服了,除非一场突如其来的阵雨把一切都毁了。

从一名家庭成员那里听到:“下雨了!”,然后紧接着是楼梯上雷鸣般的脚步声。

这样的话太惨了。

想要拯救你最好的周日时光,免于再一次去洗衣房的痛苦吗?

看看这个小东西。

当雨点开始时,这个简单的设备就会在你的手机检测到雨点时发出警报。不需要焊接,只需要几根电缆。借助低功耗电路板和WiFi,我们能做出一个基于Raspberry Pi Zero W的完美项目。

测雨器需要的组件:

2个雨水传感器板和一个控制器
面包板
充电宝
密封小食品容器
跳线
树莓派 Zero w

核心代码:

from gpiozero import DigitalInputDevice
from time import sleep
import http.client, urllib.parse

# Some setup first:
APP_TOKEN = ‘YOUR_PUSHOVER_APP_TOKEN’ # The app token – required for Pushover
USER_TOKEN = ‘YOUR_PUSHOVER_USER_TOKEN’ # Ths user token – required for Pushover

# Set up our digital input and assume it’s not currently raining
rainSensor = DigitalInputDevice(17)
dryLastCheck = True

# Send the pushover alert
def pushover(message):
print(message)
conn = http.client.HTTPSConnection(“api.pushover.net:443”)
conn.request(“POST”, “/1/messages.json”,
urllib.parse.urlencode({
“token”: APP_TOKEN, # Insert app token here
“user”: USER_TOKEN, # Insert user token here
“title”: “Rain Detector”,
“message”: message,
}), { “Content-type”: “application/x-www-form-urlencoded” })
conn.getresponse()

# Loop forever
while True:

# Get the current reading
dryNow = rainSensor.value
print(“Sensor says: ” + str(dryNow))

if dryLastCheck and not dryNow:

pushover(“It’s Raining!”)

elif not dryLastCheck and dryNow:

pushover(“Yay, no more rain!”)

# Remember what the reading was for next check
dryLastCheck = dryNow

# Wait a bit
sleep(5)

在做其他事情之前,在SD卡上安装一个Raspbian Stretch Lite(我们不需要桌面),然后插入到Pi中。确保已启用SSH访问。执行sudo apt更新和升级的常规程序,然后重启,检查SSH连接,然后关机。

将传感器安装到盖子上:

你可以使用任意数量的传感器,但是两个就可以了。用保温层或管道胶带将两块板固定在盖子上。

注:3d打印外壳图片(STL文件可从这里得到)。

需要连接两对跳线;每个传感器板一个,极性无关紧要。电缆的另一端必须穿入容器内,所以在适当的地方尽可能地挖一个小洞,这样电线才能通过,从而减少水进入的机会。

将传感器连接到控制器

为了让树莓派明白发生了什么,一个小的控制板(与传感器一起提供)是必需的。这就把被水短路的小电流转换成数字信号。利用面包板,将传感器上的两对导线并联起来(这样两个传感器都可以构成电路),然后将控制器的接收引脚(带有两个连接器的一侧)插入到面包板上,使每个引脚与传感器上的一根导线相连。

连接控制器

为了完成我们的电路,仔细看看控制板上的四个引脚。它们将被标记为A0、D0、GND和VCC。

使用一些跳线,将控制器与Pi连接如下:

VCC到GPIO pin 2 (5v),

GND到GPIO上的任何GND(例如pin 6),

D0到GPIO 17 (pin 11)。

D0和A0是传感器读取输出的两种不同方式。D0是一个直接的数字开关,阈值由板子上的可变电阻控制。A0是一个模拟输出(当转换为数字时),范围在0到1024之间,取决于雨的强度。

装配雨探测器

把充电宝接上树莓派,然后放进容器。理想情况下,东西不应该移动,所以要用胶带或大头针把所有东西都固定好。

你现在应该可以把所有东西都密封在容器里了,连接传感器板的电线不会被挤压或变形。一旦你高兴,打开它并连接电源,然后再次关闭它并检查你的连接。确保充电宝能给树莓派至少几个小时的电力。

检测软件

在这个特性的末尾添加脚本,并将其保存为rainbot.py(或从GitHub下载)到一个方便的位置,比如~/pi/rainbot。一旦就位,通过运行python3 ~/pi/rainbot/rainbo.py来执行一个初始测试。你应该每五秒钟就会看到一个读数:

如果是干的,是“真”;如果是湿的,是“假”。按CTRL+C停止脚本。

Pushover:在你的手机上获取降雨警报

为了获得提醒,我们将使用Pushover,这是一个向智能手机推送消息的服务(有七天的免费试用)。

注册pushover.net后,你将看到一个“用户密钥”,把这个复印一份。按照说明创建一个“应用程序令牌”。

编辑脚本,把现有的API键值替换成你自己的(在提示的地方),然后在你的手机安装了“pushover”程序。

再次运行脚本。把其中一块感应板稍微弄湿。控制器上应该亮一盏灯。如果一切正常,几秒钟后你的手机就会显示一个警报。

自动运行雨探测器

让我们设置脚本在启动时运行。 作为超级用户创建以下文件:

sudo nano /lib/systemd/system/rainbot.service
填入:

[Unit]
Description=Rainbot
After=multi-user.target

[Service]
Type=idle
ExecStart=/usr/bin/python3 /home/pi/rainbot/rainbot.py

[Install]
WantedBy=multi-user.target

按CTRL+X保存并退出nano。

然后输入以下命令:

sudo chmod 644 /lib/systemd/system/rainbot.service
sudo systemctl enable rainbot.service
sudo systemctl daemon-reload
重新启动树莓派。脚本将在重新启动时运行(尽管您不会看到任何输出)。再用水测试一下。

为你的雨天探测器做改进

Pushover很方便,而且可以很容易地替换为任何你喜欢的函数。检查的频率可以改变(目前是每五秒一次)。或者把模拟电路改成数字电路,然后用A0输出来测量雨下得有多大。

如果你开始记录这些数据,这对气象站项目来说也是一个很好的起步。你还可以增加一个使用后安全关闭树莓派的按钮。

编程计算加油轮次 —— 外国人是怎么省油的

我最近在开一辆烧 93 号汽油的车子。根据汽车制造商的说法,它只需要加 91 号汽油就可以了。然而,在美国只能买到 87 号、89 号、93 号汽油。而我家附近的汽油物价水平是每增加一号,每加仑就要多付 30 美分,因此如果加 93 号汽油,每加仑就要多花 60 美分。为什么不能节省一些钱呢?

一开始很简单,只需要先加满 93 号汽油,然后在油量表显示油箱半满的时候,用 89 号汽油加满,就得到一整箱 91 号汽油了。但接下来就麻烦了,剩下半箱 91 号汽油加上半箱 93 号汽油,只会变成一箱 92 号汽油,再接下来呢?如果继续算下去,只会越来越混乱。这个时候 Python 就派上用场了。

我的方案是,可以根据汽油的实时状态,不断向油箱中加入 93 号汽油或者 89 号汽油,而最终目标是使油箱内汽油的号数不低于 91。我需要做的是只是通过一些算法来判断新旧汽油混合之后的号数。使用多项式方程或许也可以解决这个问题,但如果使用 Python,好像只需要进行循环就可以了。

#!/usr/bin/env python

# octane.py

o = 93.0

newgas = 93.0 # 这个变量记录上一次加入的汽油号数

i = 1

while i < 21: # 20 次迭代 (加油次数)

    if newgas == 89.0: # 如果上一次加的是 89 号汽油,改加 93 号汽油

        newgas = 93.0

        o = newgas/2 + o/2 # 当油箱半满的时候就加油

    else: # 如果上一次加的是 93 号汽油,则改加 89 号汽油

        newgas = 89.0

        o = newgas/2 + o/2 # 当油箱半满的时候就加油

    print (str(i) + ‘: ‘+ str(o))

    i += 1

在代码中,我首先将变量 o(油箱中的当前混合汽油号数)和变量 newgas(上一次加入的汽油号数)的初始值都设为 93,然后循环 20 次,也就是分别加入 89 号汽油和 93 号汽油一共 20 次,以保持混合汽油号数稳定。

1: 91.0

2: 92.0

3: 90.5

4: 91.75

5: 90.375

6: 91.6875

7: 90.34375

8: 91.671875

9: 90.3359375

10: 91.66796875

11: 90.333984375

12: 91.6669921875

13: 90.3334960938

14: 91.6667480469

15: 90.3333740234

16: 91.6666870117

17: 90.3333435059

18: 91.6666717529

19: 90.3333358765

20: 91.6666679382

从以上数据来看,只需要 10 到 15 次循环,汽油号数就比较稳定了,也相当接近 91 号汽油的目标。这种交替混合直到稳定的现象看起来很有趣,每次交替加入同等量的不同号数汽油,都会趋于稳定。实际上,即使加入的 89 号汽油和 93 号汽油的量不同,也会趋于稳定。

因此,我尝试了不同的比例,我认为加入的 93 号汽油需要比 89 号汽油更多一点。在尽量少补充新汽油的情况下,我最终计算到的结果是 89 号汽油要在油箱大约7/12满的时候加进去,而 93 号汽油则要在油箱1/4满的时候才加进去。

我的循环将会更改成这样:

if newgas == 89.0:

    newgas = 93.0

    o = 3*newgas/4 + o/4

else:

    newgas = 89.0

    o = 5*newgas/12 + 7*o/12

以下是从第十次加油开始的混合汽油号数:

10: 92.5122272978

11: 91.0487992571

12: 92.5121998143

13: 91.048783225

14: 92.5121958062

15: 91.048780887

如你所见,这个调整会令混合汽油号数始终略高于 91。当然,我的油量表并没有 1/12 的刻度,但是 7/12 略小于 5/8,我可以近似地计算。

一个更简单地方案是每次都首先加满 93 号汽油,然后在油箱半满时加入 89 号汽油直到耗尽,这可能会是我的常规方案。就我个人而言,这种方法并不太好,有时甚至会产生一些麻烦。但对于长途旅行来说,这种方案会相对简便一些。有时我也会因为油价突然下跌而购买一些汽油,所以,这个方案是我可以考虑的一系列选项之一。

当然最重要的是:开车不写码,写码不开车!

via: https://opensource.com/article/18/10/python-gas-pump

作者:Greg Pittman 译者:HankChow 校对:wxy 编译:Linux.cn

用Ubuntu构建开源数字取证工具 —— Bitscout

面对真实的网络犯罪现场,司法线索必须保证不被篡改,这也是某些调查耗费了大量时间的一个主要原因。其需要有关工作人员跑到罪案现场,并在不破坏证据的情况下提取恶意软件样本。

为了解决打击网络犯罪的这个巨大痛点,卡巴斯基实验室特地发布了一款免费的网络取证工具,它就是 Bit Scout 。其允许研究人员“远程收集重要的司法鉴定材料,通过网络(或本地附加存储)获得完整的磁盘镜像,或者远程协助处理恶意软件事宜”。

最开始这只是卡巴斯基工作人员Vitaly Kamluk的个人项目,但随着卡巴斯基对数字取证工具方面的需求不断增长,这个项目也一直在被不断改进。

在谈到自己的作品时,Vitaly Kamluk表示:“Bitscout项目开始于多年之前,最早是我的一项兴趣。我一直在研究LiveCD的制作和定制。

后来,我们需要在非洲一个国家的一台受感染计算机上查找攻击者踪迹,我认为自己可以帮忙。我在Linux上制作了一个简单和简化的LiveCD,预配置了VPN客户端和SSH服务器,并通过互联网将其分享给系统所有者。

他利用其烧制了光盘,通过光盘启动了受感染计算机。

这个工具非常好用,我可以通过互联网,连接到远程计算机,并且完全控制它。虽然连接很慢,但幸运的是,我使用的远程桌面访问工具对带宽要求不高。

一个文本终端就足够完成这项工作,通过较慢的拨号互联网服务也能够胜任。我设法帮助系统所有者获取到受感染系统的磁盘镜像,发现了恶意文件和相关文件的位置,最为重要的是,提取了有关威胁的重要信息,包括一个恶意软件释放器和造成感染的鱼叉式钓鱼邮件。

随着时间的推移,类似的情况出现过多次。在同国际刑警组织进行合作时,我们也采用了同样的模式:首先,执法人员前往物理磁盘采集地点,在得到当地执法机关的许可后,帮助我们在现场收集最重要的证据,而且速度非常快。这种方法节省了我们的出差时间,帮助执法机关快速获取网络攻击后留下的关键证据。”

此次发布的版本为Bitscout v2.0,其1.0版本至今未公开发布过。这款工具可以帮助取证调查人员对目标系统进行远程分析,并允许系统拥有者随时监控调查人员的取证活动以确保他们只能访问受限的目标磁盘。

无论是对于安全研究人员、网络犯罪执法部门或是教育机构,这都是一款非常棒的工具。

研究人员此次发布的是Bitscout的镜像文件,因此该工具必须写入一个可移动存储驱动器(U盘)中才可以使用。

让系统从U盘启动之后,研究人员可以使用VPN和SSH远程连接至Bitscout。Bitscout中包含了几种专门为取证分析而设计的热门工具,但用户也可以根据自己的需要来自定义配置这些工具或者添加其他工具。

为了帮助有兴趣的朋友把这款开源数字取证工具用起来,这里放上一则视频教程。

以便新手可以对照着在Ubuntu上构建出成品。

视频地址:http://v.qq.com/x/page/f0744agppqa.html

该工具的几个特点:

1.手动修复受感染的计算机(从rootkit感染中修复)。

2.共享远程会话,可以培训用户,提高分析的速度。

3.能够通过网络从原始服务器硬件克隆磁盘,不需要待在冰冷的服务器室监控整个进度。

4.避免图形界面连接效果不佳。Bitscout使用的是基于文本的用户交互界面(TUI)。

下载地址:

https://github.com/vitaly-kamluk/bitscout

The Kaspersky BitScout Cyber Forensics Tool Revealed

用上Micro:bit离线开发工具Windows 10版本

Micro:bit 是一款由英国广播电视公司(BBC)为青少年编程教育设计,并由微软,三星,ARM,英国兰卡斯特大学等合作伙伴共同完成开发的微型电脑。

为了降低门槛,早期只提供了Web版的在线开发工具(makecode.microbit.org)供大家创作。

可随着玩家数量的增多以及对调试效率的追求,离线开发工具成为了很多玩家追求的目标。

后来官方提供了Android、iOS……等需要借助蓝牙,借助Web的伪离线版本。但始终没有为广大Windows用户提供一个支持积木编程的“真”离线版本。

前几天逛Windows App Store,突然发现 Micro:bit 官方 IDE 支持Windows 10了。

虽然还在BETA,但总比在线版好用多了 —— 代码编译下载后还要手动写入程序,效率很低。

该版本同时支持“积木”和 JavaScript 两种编程方式。界面和Web在线版一样,但不用担心像Web版那样,经常刷不出来。

写入程序时也不用多余工序 —— 在 Micro:bit 硬件联机状态点击“下载”即可。

怎么样?还不赶紧试一下,为自己提高创作效率。

另外也欢迎Micro:bit的同好关注我们的公众号“IoT前哨站”,一起来为物联网学习添砖加瓦。

用树莓派实现网站访客LED闪亮提醒

用树莓派实现网站访客LED闪亮提醒,每当有用户访问你博客时LED就会闪一下,闪得频率越快访问者越多。

以下是清单列表:

LED 1个、公/母杜邦线2条、220欧姆电阻1个、面包版1个。
首先我们先来安装WiringPi(通过它我们可以用php来控制GPIO)

sudo apt-get update
sudo apt-get upgrade
sudo apt-get install git-core
git clone git://git.drogon.net/wiringPi
cd wiringPi
git pull origin
./build

下面我们开始链接LED到GPIO,直接看图就好,你可以连接到任何一个绿色的借口,我们这里连接的是GPIO.0(LED正负极我就不讲了自己百度吧),PS,图不是我画的如果严谨点GND应该用黑线。

好了接下来我们来写点PHP代码,可以直接嵌入到网站的PHP页面内。

<? php
exec(“gpio mode 0 out”);/*mode 0就是蓝线插入的针脚,可以使用0-7*/
exec(“gpio write 0 1”);/*点亮led*/
exec(“gpio write 0 0”);/*关闭led*/
? >

到这里我们的游客提醒功能就完成了,各位还可以发挥想象力,比如用三(绿,黄,红)显示剩余内存,CPU使用率等等。

Scratch 2.0 安装和配置

Scratch是一款由麻省理工学院(MIT) 设计开发的少儿编程工具。其特点是:使用者可以不认识英文单词,也可以不会使用键盘。构成程序的命令和参数通过积木形状的模块来实现。用鼠标拖动模块到程序编辑栏就可以了。

IoT前哨站这里来教大家安装和配置 Scratch 2.0的IDE(集成开发环境)。

第一步:登录官方网站。 https://scratch.mit.edu/download

你能看到目前该 IDE 主要支持 Mac OS X 和 Windows 两种操作系统。

第二步:下载并安装Adobe AIR(请对应自己当前的操作系统)

第三步:下载并安装Scratch Offline Editor(请对应自己当前的操作系统)

好了,这样整个环境就可以用了。

 

怎么用 Fio 来测试树莓派的磁盘性能

为了测试系统IO性能的高低,在实际开发中,需要使用IO性能测试工具进行测试。

这里要介绍一款经典神器 —— Fio(Flexible I/O Tester)。

这是一款由 Jens Axboe 开发的用于测评和压力/硬件验证的开源软件。

它支持 19 种不同类型的 I/O 引擎 (sync、mmap、libaio、posixaio、SG v3、splice、null、network、 syslet、guasi、solarisaio,以及更多), I/O 优先级(针对较新的 Linux 内核),I/O 速度,fork 的任务或线程任务等等。它能够在块设备和文件上工作。

Fio被广泛的应用在非常多的地方,包括测评、QA,以及验证用途。它支持 Linux、BSD、OS X、Android 以及 Windows。

简单来说,Fio是用来测试系统IO性能的工具,它的强大之处在与提供了一套测试框架,能够支持多线程多进程的IO测试,用户只需进行参数的配置,便能够方便地定制不同的IO行为(顺序读写,随机读写等),并对其性能进行监测。

对于Debian/Raspbian来说,Fio的安装很容易。

执行 sudo apt-get install fio 即可。

一般的参数和说明:

bs : 设置IO请求的块大小,可以给出上下限
支持对read,write,trim分别进行设置,以逗号隔开
比如:bs=1k-2k,3k-4k,5k-6k
size : 文件请求的大小,控制job结束
rw : 控制读写类型: read/write/rw/randread/randwrite/randrw
direct : 1表示绕过buffer,直接作用于设备
ioengine: io引擎:libaio(异步IO),syslet等
iodepth : 异步IO情况下,IO队列的长度
runtime : 执行时间限制,控制job结束
filename: 输出文件或者设备名,eg:/dev/sba

例子:

bs=4k:单次io的块文件大小为4k
ioengine=libaio:IO引擎使用libaio方式
direct=1: 测试过程绕过机器自带的buffer,使得测试结果更真实,等效于buffered=0
runtime=7200:运行时间设置7200s
size=20G :设置本次测试的空间为20G
filename=/dev/sdb20 :被测裸盘的盘符
group_reporting=1:汇总每一个进程的信息
rate_iops=5000 : rate_iops设置额定的iops,一般测试不需要设置
time_based :设置测试基于时间,注:虽然设置了runtime为7200s,如果没有设置time_based,在空间写满之后停止。
write_iops_log=w-4kb-7200s-numjobs4-iodepth128-ssd:表示将iops写入到一个在fio目录下名叫4kb-7200s-numjobs4-iodepth128.iops.1.log的文件中,注:如果numjobs设置为多线程,则每一个线程的iops写入到一个log文件中。
log_avg_msec=1000: 每隔1000ms往log中写一次数据
rw=randwrite : 测试方式随机写

numjobs=4:设置测试线程数
iodepth=128:io 深度设置为128

实际操作:

随机写入的性能测试:

sudo fio –name=randwrite –ioengine=libaio –iodepth=1 –rw=randwrite –bs=4k –direct=0 –size=512M –numjobs=2 –runtime=240 –group_reporting

输出的结果:

随机读取的测试:

sudo fio –name=randread –ioengine=libaio –iodepth=16 –rw=randread –bs=4k –direct=0 –size=512M –numjobs=2 –runtime=240 –group_reporting

输出的结果:

结果里面包含吞吐量和时间。io=表示总共完成的IO量。在基于容量的测试中,这个值能匹配size参数。aggrb是所有进程/设备的汇总带宽。minb/maxb表示测量到的最小/最大带宽。mint/maxt表示测试的最短和最长耗时。和io=参数类似,时间值对于基于时间的测试应该能匹配runtime参数,对于基于容量的测试是一个变量。

如果对相关参数搞不明白可以看帮助:

好了,IoT前哨站希望大家熟练掌握这个性能检测工具。