I stumbled upon this post in /r/thinkpad, which got my attention. It showcases an ExpressCard to M.2 NGFF adapter that they purchased from AliExpress. The adapter has a similar purpose to the one designed by thinkmods.store, with the added bonus that it could fit longer NVMe SSD-s if you didn’t mind them sticking out of the case. You could also order one instantly, so I did.

For those interested, the title of the listing at the time of writing of this article is “ExpressCard interface to m.2 NGFF nvme solid state disc x201 t430 hp8570 w520”. The listing I chose was this one. I’m not affiliated with the manufacturer or the seller in any way.

Bits and pieces.
Bits and pieces.

The idea

I try to avoid buying things that I don’t need, which is why I came up with an excuse for getting this adapter: adding a cache SSD to my ThinkPad-as-a-server.

The OS is running off of an mSATA SSD that I could theoretically use for the same purpose, but eventually killing the SSD that also hosts the OS with constant writes sounded like a really bad idea. I also didn’t want to have excessive writes on my pair of Samsung 870 QVO 4TB SATA SSD-s, because replacing those will be quite expensive down the line.

Here’s what we’re working with:

Quick word on the packaging: it was packaged in a small cardboard box, which held up okay, but a more rough treatment of the box would probably have broken the tiny PCB.

The SSD, adapter PCB, and the case.
The SSD, adapter PCB, and the case.

Assembly

According to comments I saw before purchasing the adapter, I expected the assembly to be a bit tricky, and after assembling it I have to agree with that sentiment.

First, you’ll have to squeeze the SSD in there. Unlike M.2 slots that are common in laptops and desktops alike, this one requires you to horizontally push the SSD in without breaking anything. Don’t be afraid to use a bit of force here, but be careful in how you apply it.

na-no
na-no
Bottom of the adapter.
Bottom of the adapter.

After the SSD is in, screw it in properly and place the assembly on one of the metal parts.

Now comes the fun part: you’ll have to clip on the top part as well. My recommendation is to first clip in the part that sits near the contact pins, then the one at the other end of the adapter, and then push in the metal shielding at the edges.

The adapter, 100% assembled.
The adapter, 100% assembled.
For some reason, mine ended up a bit crooked near the connector.
For some reason, mine ended up a bit crooked near the connector.
This opening allows for the installation of longer M.2 SSD-s.
This opening allows for the installation of longer M.2 SSD-s.

Tests

To test this adapter out, I just plugged it into my main ThinkPad T430 running Fedora 36 and Linux kernel version 5.19.12. It worked right out of the box.

Yes, it has a blue LED that blinks.
Yes, it has a blue LED that blinks.
When not blinking, it looks something like this.
When not blinking, it looks something like this.
Fedora picked it up with no issues.
Fedora picked it up with no issues.

My ThinkPad T430 can now support hotpluggable NVMe SSD-s, and 4 internal SSD-s in total. Not quite tricked out as this setup, but not bad for a 10 year old laptop.

4 SSD-s on a ThinkPad T430. Bonkers.
4 SSD-s on a ThinkPad T430. Bonkers.

Please note that these tests are not done with any meaningful testing methodology and are just quick one-off tests that aim to showcase what to expect when using this adapter with the configuration I’m using it with.

To check how well the adapter performs, I opened gnome-disks and did a quick benchmark offered by it.

Results of the quick one-off benchmark.
Results of the quick one-off benchmark.

The average read speed is at 411.2 MB/s, and writes at 366.7 MB/s.

The results are in line with the limitations of a PCIe 2.0 x1 link, which has a theoretical cap of 500 MB/s.

What’s more noteworthy is the latency. Average access time is at 0.03 ms, which compares well to a Samsung 870 EVO 1TB SATA SSD that’s connected to the same machine, which reports an average access time of 0.07 ms.

When copying files to the SSD, the temperature sensor reported a maximum of 60°C. Additional read operations in the form of an ZFS scrub hit 63°C, which was the maximum I observed during my quick testing.

When I threw both read and write operations to the SSD, the total I/O bandwidth for both operations was capped at around 390 MB/s according to zpool iostat 1 -v. If your workloads do a lot of read-write operations in parallel, then take this into account.

I/O stats during heavy read-write operations.
I/O stats during heavy read-write operations.

As for my use case, it seems to be holding up okay. I’ll have to report back after this adapter and SSD combo has been in use for a longer time.