Why ZFS is not good at growing and reshaping pools (or shrinking them)

I recently read Mark McBride's Five Years of Btrfs ( via ), which has asignificant discussion of why McBride chose Btrfs over ZFS that boilsdown to ZFS not being very good at evolving your pool structure. Youmight doubt this judgment from a Btrfs user, so let me say as both a fanof ZFS and a long term user of it that this is unfortunately quite true; ZFS is not a good choice if you want to modify your pool disk layoutsignificantly over time . ZFS works best if the


More badly encoded MIME Content-Disposition headers

One of the things that our system for recording email attachmenttype information logs is the MIME Content-Disposition header for a MIME part, ifit exists. Another thing it logs is the extension of the claimedMIME filename, if this information is part of the MIME headers forthat part (people and programs don't always put it in). Under normalcircumstances, the filename of a MIME part is given as a 'filename=...'parameter on the Content-Disposition header (although it may


How big our Prometheus setup is (as of January 2020)

I talked about about our setup of Prometheus and Grafana , but what I didn't discuss then ishow big it is on various measures; things like how much disk spaceour Prometheus database takes, how many endpoints we're monitoring,how many metrics we have, how much cardinality is involved, and soon. Today I feel like running down all of those numbers for variousreasons.

We started our production Prometheus setup on November 21st and it'sbeen up since then, although the amount


The real world is mutable (and consequences for system design)

Every so often I see people put together systems on the Internetthat are designed to be immutable and permanent (most recently Go ). I generally wince, and perhaps sigh tomyself, because sooner or later there are going to be problems. Thereality of life is that the real world is not immutable . I meanthat at two levels. The first is that sometimes people make mistakesand publish things that they very strongly wish and need to change orretract. Pretending that they do not is ignoring reality. Beyond


A network interface losing and regaining signal can have additional effects (in Linux)

My office at work features a dearth of electrical sockets and as aresult a profusion of power bars and other means of powering a wholebunch of things from one socket. The other day I needed to reorganizesome of the mess, and as part of that I wound up briefly unplugging thepower supply for my 8-port Ethernet switch that my office workstation is plugged into. Naturally this meant that the networkinterface lost signal for a bit (twice, because I wound up shufflingthe power connection twice). Nothing


Go compared to Python for small scale system administration scripts and tools

We write a certain amount of scripts and tools around here . I like Go and have used it for awhile, we have some tools already written in Go ,and while I'm also a long term user of Python I'm on record as beingunhappy with various developments around Python 3. Despite all of this,Python is the programming language I default to when I need to dosomething that's more complicated than a shell script (and not becauseof our policy on internal tools ). Over


What we've written in Go at work and how it came about (as of January 2020)

In comments on yesterday's entry , Joseph asked aboutwhat we're using Go for here at work .As it happens, there's a story or two here, because the startingpoint is that some years ago we decided to standardize on usingonly a few languages for our internal tools (later updated to switch to Python 3 ) andGo was not one of those languages. This wasn't because I didn'tlike Go (I've used it for a fairly long while);


Why I've come to like that Go's type inference is limited

Although Go is a statically typed language, it has some degree of type inference to make yourlife easier and less bureaucratic. However, this type inference islimited to within a single function, so Go won't do things likeinfer the return type of your function for you even though it could.When I first started writing Go code (at the time, primarily comingfrom Python), I found this limitation irritating. The Go compilercould perfectly well see the types involved (and would complain ifI got


The value of automation having ways to shut it off (a small story)

We have some old donated Dell C6220 blades that we use as SLURMbased compute servers . Unfortunately, thesemachines appear to have some sort of combined hardware and softwarefault that causes them to lock up periodically under some loads(building Go from source with full tests is especially prone totriggering it). Fortunately these machines support IPMI and so canbe remotely power cycled, and a while back we got irritated enoughat the lockups that we set up their IPMIs and built a simplecron-based set


Python 2, Apache's mod_wsgi, and its future in Linux distributions

Sometimes I have small questions about our future with Python 2,instead of big ones. Our Django web application currently runs in Apache using mod_wsgi , and the last time weattempted a Django upgrade (which is a necessary step in an upgradeto Python 3), it didn't go well . Thismeans that we may wind up caring quite a bit about how long Ubuntuand other Linux distributions will package a version of mod_wsgithat still supports Python 2, instead of just Python 3 (assuming