Linux: get the current boot disk's device name
When booting a machine by USB stick,
sudo fdisk -l
outputs you two devices marked with an asterisk, and you'll never know which was the boot device.
I need a list of all disks attached to the current machine where
sed -ne 's/.*\([sh]d[a-zA-Z]\+$\)/\/dev\/\1/p' /proc/partitions
is a good way, it outputs
/dev/sda
/dev/sdb
That does give me a clue which is the boot device, which is essential as a want to boot from the one and secure delete the other - automatically (stick in, boot, let it run...) as I do that on a bunch of machines at one time, making sure that no data remains on customer computer hard disks.
awk '$2 == "/"' /proc/self/mounts
That gives you the UUID-number - but how to find the /dev/sd?
belonging to it?
(Hint about "use UUID" isn't helpful - I don't want to reconfigure the system, I want to clean it. Of course I can assign new UUIDs when doing that, it costs a second, but that is definitely not the goal, and still misses the fact that I don't know which device /dev/sd?
to give a new one.)
dban
did the job, but won't be free to use in future.
You almost have it with your awk
invocation. A few small tweaks should be enough.
awk '$1 ~ /^\/dev\// && $2 == "/" { print $1 }' /proc/self/mounts
The $1 ~ /^\/dev\//
part requires that any satisfying line names a device somewhere under /dev. Now all we need is a mapping from the device UUID name to the kernel-assigned name, which is easy since all names listed will either be that name directly, or a symbolic link (ultimately) pointing to that name, so we can just feel them to ls -l
like so:
ls -l $(awk '$1 ~ /^\/dev\// && $2 == "/" { print $1 }' /proc/self/mounts)
This should give you a single line of output which tells you which physical device the root file system is currently mounted from. It won't be foolproof, so I wouldn't automate anything potentially destructive based on this alone, but for a human who just wants some help in figuring out which device to point at, it should be enough.
You should find where your /
is mounted.
findmnt -n / | awk '{ print $2 }'
Lets say the result you get is /dev/sda1
. Use that to find parent device:
lsblk -no pkname /dev/sda1
And that should give you lets say sda
. You can prepend that with /dev/
if need be.
Dunno how fool proof this is. But it might be better than this answer.