iESP
contents
- what it is
- iSCSI on a microcontroller?!
- videos and pictures of it running
- how to setup
- performance measurements on a microcontroller
- changelog
what it is
iESP is an iSCSI target.
Initially it was designed for microcontrollers (originally for the Wemos32 but other boards like the Teensy4.1 and RP2040W followed) but eventually it was generalized into software that runs on Linux, Microsoft Windows and MacOSX as well.
To monitor it, it also includes an (optional) SNMP agent.
iSCSI on a microcontroller?!
The iSCSI protocol is quite an endeavour to implement on a memory-limited system like a ESP32 microcontroller.
It can serve a disk image file on an SD-card as if it was a virtual disk. That way you can e.g. boot a VMware cluster from an SD-card.
iSCSI SANs are usually large boxes with tons of harddisks/SSDs consuming loads of power (e.g. this), an ESP32 not so much.
how to setup
The source code is on GitHub together with instructions how to build and set it up. License is the MIT license.
microcontroller hardware setup
You only need an SD-card reader and maybe a few LEDs. Connect the cardreader to the SPI pins of the microcontroller and set the GPIO pin numbers in data/cfg-iESP.json. I used this reader from Adafruit (this one works as well) and a wemos32. As said, you can connect a few LEDs (e.g. red for errors, yellow for write access and green for read access) to it. Again configure the GPIO pin numbers in data/cfg-iESP.json.
miscellaneous
If you like to test it, there is a public iESP iSCSI instance on iscsi://vps001.vanheusden.com/test/1 with a GFS2 filesystem on it (label: debian:test).
changelog
I added a new backend to it: NBD. So instead of using a file- or disk-device, you can use an NBD-server as backend. This makes it into an iSCSI proxy for NBD. Sofar this does not work on microcontrollers yet, only Linux/*BSD/etc.
2024-10-03: ported to windows via mingw
2024-10-04: ported to the Raspberry Pi Pico (RP2040W) microcontroller