XPG SX8100 Real-World Performance

This NVMe SSD achieves 736MB/s reads and 174MB/s writes.

The numbers were calculated using the badblocks command, and tracking how long it took to complete the read and write phases.

badblocks -wsv /dev/sda

Dream Hosting

I just transitioned from onsite WordPress hosting (in my garage) to using a cloud provider.

I went with the provider DreamHost.


  • The one-click migration tool is really easy. It truly did streamline copying everything from the old site to the new one (including database tables, user accounts, everything). That part took about 10 minutes.
  • Free Let’s Encrypt SSL Certs without having to do any configuration / API interaction yourself.
  • Unlimited WordPress instances/sites and unmetered bandwidth. Others may have different requirements, but for running some basic sites (like the one you are reading right now) it’s an all-inclusive service.
  • Uptime – This is an assumption because I just starting using the service. However, I know for sure that my house has experienced long term power outages, I needed to physically move things around the garage, etc. My overall uptime on my own equipment was probably around 90%.


  • Slow
  • My dedicated hardware responded to UptimeRobot with times hovering just over 100ms (1/10th of a second)
  • The shared hosting server responds in around 2500ms (2.5 seconds)
  • That’s about 25 times slower.
Left part of the graph is dedicated hardware. Right side is DreamHost.

Another con: The Let’s Encrypt certificate took a few hours to process. Not a huge deal, but it’s inconvenient because it’s long enough that you have to idle and wait, or do it another day. Just frustrating because you are basically sitting there with everything else done just waiting for this process to happen.

Hosting Cost Versus Power Cost

The servers, UPS, etc took just over 100 watts to run. That’s approximately $10 per month.

The yearly DreamHost unlimited plan has an intro rate of $2.95 per month, and then renews at $12.95 per month.

So basically, having everything done for me is the same as the cost of just power.

“Gochas” / Tips

Complete the one-click migration before making any DNS changes. Otherwise, the software has trouble pulling the data from your old/existing site.

Be sure about how you plan to handle www in the URL before copying the site over. It can be tricky to change later.

For example, know whether you want the URL to be or


Another circumstance where a long-winded explanation brings us to a fact we already know!

Shared cloud hosting is easier to manage, but has lower performance.

If you have a simple site, and can live with average response times in the 2-3 second range, I highly recommend shared hosting!

If not, explore other options.

Quotes Tech

The End of an Era

It is with a surreal sense of melancholy I announce that on July 15th, 2020, I will be shutting down the last of our user hosting. It has been a long, winding journey…

hon1nbo /

I am not in the same position as hon1nbo, but I feel like their story and mine do have many parallels.

For the past few years, I’ve physically set up and managed several web servers in my garage.

I am giving them up. Doing my own web hosting was a ton of fun! There was lots to learn, and it was engaging. However, I want to make room for other things in my life.

When I am administering the physical and software configuration of these machines, I am not journaling, working out, or connecting with friends.

Therefore, I’ve migrated this website, along with to a cloud provider.

This is the most recent step in my ongoing quest to spend my limited time in life wisely.

Open Source Tech

Boot Log Information on Linux

I’ve always struggled to find info about the boot!

  • What drives are in the system?
  • What’s the IP address?
  • What are some details about the hardware?
  • Etc.

Turns out, it is really easy.

journalctl -b
Open Source Tech

Use InfluxDB 2 as a Metric Server for Proxmox


InfluxDB will run on in a Docker container.

This setup assumes that a Docker host is accessible on the LAN. In this example, the local domain is vnet and the host name is docker4.

Therefore, the Docker host FQDN is docker4.vnet

InfluxDB Container

Your USERNAME, PASSWORD, and ORG will vary.

I made my org the same as my local networking domain, but that is not a requirement.

docker run -d \
     -p 8086:8086 \
     --mount type=volume,source=influx-data,target=/var/lib/influxdb2 \
     --mount type=volume,source=influx-conf,target=/etc/influxdb2 \
     --name idb \
     -e DOCKER_INFLUXDB_INIT_PASSWORD=secret-password \

Connect Proxmox to InfluxDB 2

As of Proxmox 6.4, it is possible to use the version 2 API of Influx.

Before that, Proxmox would connect to Influx 1.x, but it was sending graphite line protocol over UDP (yuck). Now it connects via TCP/HTTP to the Influx API.

Get the Token

Log into the Influx web user interface, and copy the token for the user.

Click the token name to reveal the token.


There is probably a command-line way to do that, but I don’t know it.

Configure Proxmox Metric Server

The name can be whatever you want.

Paste the token from the last step into the “Token” field in the Proxmox UI.

Confirm Proxmox is Saving to InfluxDB

Navigate back to the InfluxDB web UI, and confirm that data is flowing. http://docker4.vnet:8086/

If things are working, there will be some measurements that clearly look related to Proxmox resource utilization.

Next Steps

In the next post, we will connect the InfluxDB bucket to a pre-built dashboard using Grafana.

Open Source Tech

Disable Multipath for Identical NVMe Drives on Ubuntu Server

I have 4 identical NVMe drives installed in my system.

Ubuntu treats them as one “multipath” device by default. This is not accurate.

I posted something on Ubuntu Forums, but no response at time of writing. (2021-02-18)

Here’s the problem:

 nvme0n1                   259:0    0   1.9T  0 disk  
 └─mpatha                  253:1    0   1.9T  0 mpath 
 nvme1n1                   259:1    0   1.9T  0 disk  
 └─mpatha                  253:1    0   1.9T  0 mpath 
 nvme2n1                   259:2    0   1.9T  0 disk  
 └─mpatha                  253:1    0   1.9T  0 mpath 
 nvme3n1                   259:3    0   1.9T  0 disk  
 └─mpatha                  253:1    0   1.9T  0 mpath 

The fix is relatively simple. It is outlined in some SUSE Documentation.


blacklist {
       devnode "^nvme[0-9]"

Once the config file has been changed, apply the changes according to the Ubuntu Server Documentation.

sudo systemctl restart multipathd

And all is good!

 nvme0n1                   259:0    0   1.9T  0 disk 
 nvme1n1                   259:1    0   1.9T  0 disk 
 nvme2n1                   259:2    0   1.9T  0 disk 
 nvme3n1                   259:3    0   1.9T  0 disk 

How Bloated is Windows 10?

Despite the click-bait header, I will not comment on whether the size of a Windows installation is “too” big.

However, I do have facts!

I installed Windows 10 version 20H2 on a VM with no internet connection.

Once I was on the home/welcome/desktop screen, the installation used 18.8 GiB.

After performing Windows updates, and installing VirtIO drivers (to help performance of VM) the total install size was 23.5 GiB.

These results were logged on 2021-02-07.

Open Source Tech

Fail: USB Passthrough to Dexcom 6 Reciver

My T1 Diabetic Connundrum

I want to connect my Dexcom receiver to a computer. This will allow me to track my blood glucose over time. Then, I can identify trends and patters to help improve my insulin dosing.

Mac and Linux

Dexcom’s software only appears to work for Windows. I only have Mac/Linux/FreeBSD machines at home. I want to pass the USB Dexcom device through to a Windows VM.

Proxmox USB Passthrough: Success

For many people and use cases, this seems to work fine!

I was able to pass a USB flash drive through to a Windows VM with no issue.

Proxmox USB Passthough: Fail

Things were looking promising after the USB flash drive worked!

They looked even more promising after the Qemu Monitor recognized the Dexcom device.

qm> info usbhost
   Bus 1, Addr 15, Port 10, Speed 12 Mb/s
     Class 02: USB device 22a3:0047, DexCom Gen4 USB Serial

Unfortunately, the device was not recognized by the Windows Device Manager.

I thought this might be fine, and that the Dexcom software would find the right driver and solve the problem! However, the Dexcom program gave prompts as if the device was not plugged in.


Proxmox has robust documentation on USB passthrough on their wiki.

The basic things I tried were

  • Physically unplug and re-plug the device
  • Drop/Add the Qemu USB device using USB bus/port numbers
  • Drop/Add the Qemu USB device using Vendor and Product IDs

Sample Commands:

#device info
 qm> info usbhost
   Bus 1, Addr 15, Port 10, Speed 12 Mb/s
     Class 02: USB device 22a3:0047, DexCom Gen4 USB Serial
#by bus and port
 device_add usb-host,hostbus=1,hostport=10,id=usb1
 device_del usb1

#by vendor and product ID
 device_add usb-host,vendorid=0x22a3,productid=0x0047,id=usb1
 device_del usb1

I tried in different USB ports, after restarting VM, and other miscellaneous troubleshooting as well.

The results were consistently the same failure.


I borrowed a Windows laptop, and it worked fine!

I’m not sure what the root cause is for this issue. One possibility is that the Vendor ID seems to be in USB device databases on the web, but the product ID is not.

It is possible that Proxmox needs to have a valid/known product ID to pass to the VM.

It is also possible that the Dexcom software is written in a way that just doesn’t work when the USB device is not on the bare-metal machine. After all, the VM does need a virtualized USB hub etc., so it might just inevitably break some code.

Another possibility is that the Windows OS layer isn’t pulling the device details through properly, even though Proxmox is sending all it can.

Who knows! With such a tall software stack, combined with a tiny user base (type 1 diabetics with this particular device who are tech nerds like me) the answer to this question is likely to remain a mystery forever. Oh well.

Open Source Tech

Bulk Resize Images for WordPress

Here’s a python script.

import os
import subprocess

# inspired by this post

def main():
    # the maximum length in any direction (width or height)
    # setting at 1600 because full HD (1920x1080) seems larger than necessary
    # this will allow 1600x900 (or portrait 900x1600) images.
    MAX_LEN = "1600" 
    size_parm = MAX_LEN+'x'+MAX_LEN+'>' #
    # files in the input directory will (at least SHOULD) remain untouched.
    # files with identical names will be created in the output directory.
    # files in the output directory are OVERWRITTEN (if they already exist and the names match)
    IN_DIR = '/home/vince/Pictures/WordPress'
    OUT_DIR = '/home/vince/Pictures/WordPressSmall'

    # show what is about to happen
    print ('Input: ', IN_DIR)
    print ('Output:', OUT_DIR)
    print ('Resize Geometry:', size_parm)

    for filename in os.listdir(IN_DIR):
        # get full file paths
        infile =  os.path.join(IN_DIR, filename)
        outfile = os.path.join(OUT_DIR, filename)

        # this is not necessary because the ImageMagick library supports shrinking only
        # AND maintaining aspect ratio. all the logic is basically done.
        # the '>' in size_parm prevents making the image larger.
        # #get width and height
        # width = subprocess.check_output(['identify', '-format', '%w', filepath])
        # width = int(width.decode())

        # convert and print output
        subprocess.check_output(['convert', infile, '-verbose', '-resize', size_parm, outfile])

if __name__ == '__main__':

Open Source Tech

Torrent Container for Proxmox

Why Do This?

I always end up downloading ISO images for use in VMs using my laptop. I’m rarely running the torrent program on my laptop, so I am a leecher!

Proxmox is running 24/7, so I can help the rest of the community by being a seeder!

Creating a container to avoid having too much configuration on the Proxmox server itself. The idea is to keep Proxmox a pure VM host, not a Torrent server.

Plus, the setup is finicky, so being able repeatedly wipe the container and start over is helpful!

Before We Begin

The setup assumes that networking has been configured for both the Proxmox host, and the container that will run the Transmission torrent client.

In case local DNS is not configured, IP addresses are fine!

  • pve1: Physical server that is running Proxmox
  • torrent0: Debian container to run Transmission and Samba.

Both of these servers have IP addresses on the network.

Transmission (Torrent)

root@torrent0:~# apt install transmission-daemon transmission-cli
root@torrent0:~# cp /etc/transmission-daemon/settings.json /etc/transmission-daemon/settings.json.original

root@torrent0:~# service transmission-daemon stop

root@torrent0:~# nano /etc/transmission-daemon/settings.json
    "download-dir": "/srv/smb/template/iso",
    "rpc-password": "YourSecretPassword",
    "rpc-whitelist": "192.168.27.*",

root@torrent0:~# service transmission-daemon start

Downloading a torrent will cause that that directory to be automatically created if it doesn’t exist. Avoid doing that until we’ve completed more steps in the setup.

For more information, see Debian’s documentation.

Samba (CIFS / SMB)

root@torrent0:~# apt install samba

root@torrent0:~# smbpasswd -a debian-transmission
root@torrent0:~# mkdir /srv/smb
root@torrent0:~# chown debian-transmission:debian-transmission /srv/smb/

root@torrent0:/etc/samba# cp smb.conf smb.conf.default 
root@torrent0:/etc/samba# nano smb.conf

   comment = SMB Share 
   path = /srv/smb 
   guest ok = no
   browseable = yes
   readonly = no

root@torrent0:~# systemctl restart smbd
root@torrent0:~# systemctl status smbd

For more information, see Debian’s documentation.

Connect Proxmox

I had buggy issues removing/editing CIFS shares from the web GUI. Falling back to command line.

root@pve1:~# pvesm add cifs tor0 --server torrent0.vnet --share smb --username debian-transmission --password 'YourSecretPassword'
--then manually edited to change storage type to ISO in GUI

This automatically creates /template/iso/ under whatever share you give it.

For more information, see the Proxmox Storage Documentation

And also, forum post related to bugs adding/removing CIFS.

Download ISO Files

The Web GUI can be accessed here: http://torrent0:9091

  • Default UN: transmission
  • PW: Configured earlier in tutorial

I’ve had better luck with .torrent files than magnet links, but YMMV.