Oh, yuck. ZFS-8000-8A. :(
Mon May 29 16:23:47 [bash:5.2.15 jobs:0 error:0 time:35]
# zpool status -v
status: One or more devices has experienced an error resulting in data
corruption. Applications may be affected.
action: Restore the file in question if possible. Otherwise restore the
entire pool from backup.
NAME STATE READ WRITE CKSUM
fast ONLINE 0 0 0
mirror-0 ONLINE 0 0 0
nvme-Samsung_SSD_990_PRO_2TB_S6Z2NJ0W215171W ONLINE 0 0 2
nvme-Samsung_SSD_990_PRO_2TB_S6Z2NJ0W215164J ONLINE 0 0 2
errors: Permanent errors have been detected in the following files:
I’m surprised it took me this long to figure this out. But there’s a very big problem with a command like this:
rsync var/data/ target:/var/data/
The problem is that in order to type that command, you first have to type the first part of the command, which includes this command:
rsync var/data/ target:/
That first part of the command is in fact a valid command, and if you pressed ENTER accidentally before you had finished typing the whole command, then rsync would begin to replace your entire root file system with the contents of var. That’s the sort of thing that will ruin your day.
So from now on, when I write command-line tools, I will nominate the target *before* the source, and if both the target and source are not specified then I will return an error.
p.s. Yes, the reverse problem exists, that when you nominate the target first you can still fuck up with the source, but given that you are operating on the target from the source, if you get the source wrong, you can just fix your command and run it again and it will be fixed up.