В любом случае используйте /dev/disk/by-id/
. Проблема, на которую вы ссылаетесь, выглядит для меня как редкая неисправность оборудования или что-то похожее плохое.
сравнить
ls -l /dev/disk/by-id/
в
# 'lsblk' is from 'util-linux' package
lsblk -pdo NAME,VENDOR,MODEL,SERIAL,WWN
Однако в некоторых моих системах приведенная выше команда отображает пустые значения; еще можно попробовать:
# the below 'smartctl' command (from 'smartmontools' package) probably needs 'sudo'
for sd in $(lsblk -pdo NAME | tail -n +2); do
printf "%s\n" "$sd"; smartctl -i "$sd" |
grep -E "Model:|Number:|WWN"
done
Я не знаю много о WWN, но серийные номера должны быть аппаратно закодированы. Я хочу сказать, что если какой-либо серийный номер изменится по какой-либо причине, у вас могут возникнуть большие проблемы, чем сценарий резервного копирования, который вдруг не работает
Обратите внимание, что серийный номер идентифицирует физическое устройство независимо от того, какова его таблица разделов (или, если она вообще существует, изучите термин "superfloppy" и этот вопрос). Если вы хотите идентифицировать сами таблицы разделов, то обнаруженные вами UUID "Идентификатор диска" будут правильным подходом (обратите внимание, что это 128-битные UUID в схеме GPT, но 32-битные необязательные подписи в MBR, пример здесь). Это всего лишь несколько байтов на диске, которые можно изменить, клонировать, создать резервную копию. Я не нашел быстрого способа идентифицировать узел устройства по этому типу идентификатора, кроме просмотра доступных устройств:
id=8080fdb4-6905-4f34-91fa-61389615d7d3
# the below 'fdisk' command (from 'util-linux' package) probably needs 'sudo'
for sd in $(lsblk -pdo NAME | tail -n +2); do
fdisk -l "$sd" | grep -qi " ${id}$" && printf "%s\n" "$sd"
done
/dev/disk/by-uuid
[...] включает только разделы (не диски).
Ну, это может включать даже не все из них, потому что эти UUID ссылаются на структуры внутри разделов (например, файловые системы или подкачки), а не на сами разделы (и если вы имеете дело с superfloppy, он будет здесь как целый диск). Каждый из этих UUID записан где-то внутри соответствующего раздела (или устройства, если он суперфлоппи). Это идентификаторы, которые вы видите, когда вы вызываете, например,
# 'file' is from 'file' package
file -s /dev/sda2
Если вам нужны идентификаторы разделов, они находятся в /dev/disk/by-partuuid/
. Это так же, как в
# 'partx' is from 'util-linux' package
partx --show /dev/sda
и они хранятся в соответствующей таблице разделов, а не внутри какого-либо раздела. Вы можете получить более широкую картину, запустив
# 'blkid' (from 'util-linux' package) probably needs 'sudo'
blkid
Чтобы определить устройство, которое содержит раздел с данным UUID, попробуйте:
id=68e3b991-5c7a-4d18-a120-834ef4effe00
readlink -e "/dev/disk/by-partuuid/$id" | sed 's/[0-9]*$//'
(sed
просто удаляет последние цифры здесь). Это решение может быть легко адаптировано для извлечения информации из /dev/disk/by-uuid/
если вам нужно.