#!/bin/bash # This file is part of Ian Kelling's automated-distro-installer # Copyright (C) 2024 Ian Kelling # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License # as published by the Free Software Foundation; either version 2 # of the License, or (at your option) any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # input eg: /dev/sda1 or /dev/sda # output: /dev/disk/by-id/model+serial, or if no link exists, the same as input short_dev=$1 if [[ ! -e $short_dev ]]; then echo "devbyid: error: argument=$short_dev does not exist" exit 1 fi # devices are identified by model+serial num # and for ssd/hdd: wwn, and for nvme: eui. # model+serial gives me more info, so use that. shopt -s extglob for id in /dev/disk/by-id/!(nvme-eui*|wwn*); do [[ -e $id ]] || break # if we matched nothing if [[ $(readlink -f $id) == "$short_dev" ]]; then printf '%s\n' "$id" exit fi done # a vm may not have a by-id link. printf '%s\n' "$short_dev"