So we are all familiar at some point with the advice to use the command
dd if=image.iso of=/dev/sdx
or similar. People almost religiously think of dd as the tool to do this. It certainly can do the job, but not only is it really bad at it (mostly because it doesn't let the kernel automatically select a good block size), but it is also infamous for having a very fragile command syntax that is easy to typo and destroy your data with. dd wasn't actually written as a disk copying tool and is meant to be used as a data conversion tool. People using it to copy images to disks without doing any sort of conversion are kind of just abusing the fact that it reads one file in and writes another out. A lot of people don't know this, but on Linux/UNIX systems you can interact with block devices like they are normal files. As a result it's generally faster and safer to do something like
cp image.iso /dev/sdx
instead. People frequently uselessly risk using dd in places where ordinary file commands like cat and cp work fine. Some of you nerds probably already knew this but I want to spread it because people recommending dd is way too common.
Also, regardless of what commands you are using, when you finish doing anything involving writing to block devices always remember to run the command sync to make sure the kernel has actually written the data to the disk and isn't waiting to later.
man when they say everything is a file they really mean it huh
You can also use the
gzip
command directly on block devices (as input) to make backups, because everything is a file.plan9 actually took that idea all the way to its conclusion but it doesn't actually pan out on unixes. but it does way more often than people realize. like here's a one-liner to test network connectivity with nothing but a bash shell:
there's probably a cleaner way to do that with exec but you get the idea. super useful when you're in a container that doesn't have many useful network utilities.
I was just typing out a comment about Plan9, and you beat me to it.