%20%D0%B2%20Linux%20(Debian).png)
Я хочу сделать резервную копию таблицы разделов диска с помощью такого скрипта:
sfdisk --dump /dev/sda > partition_table.dump
Но
Я не хочу использовать
/dev/sda
, так как он может быть ненадёжным./dev/disk/by-id
кажется такжене быть надежным./dev/disk/by-uuid
иdf
включить только разделы (не диски).
Однако fdisk -l
показывает UUID "Disk Identifier". Можно ли как-то получить имя диска ( sda
) из идентификатора диска? Или есть другой способ надежно идентифицировать диск?
решение1
Используйте /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но серийные номера должны быть жестко закодированы в оборудовании. Я хочу сказать, что если какой-либо серийный номер изменится по какой-либо причине, то у вас могут возникнуть проблемы посерьезнее, чем скрипт резервного копирования, который внезапно не работает.
Обратите внимание, что серийный номер идентифицирует физическое устройство независимо от того, какая у него таблица разделов (или если она вообще есть, изучите термин «супердискета» иэтот вопрос). Если вы хотите идентифицировать сами таблицы разделов, то эти UUID «Disk Identifier», которые вы обнаружили, будут правильным подходом (обратите внимание, что это 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 ссылаются на структуры внутри разделов (например, файловые системы или подкачка), а не на сами разделы (и если вы имеете дело с супердискетой, то это будет целый диск). Каждый из этих 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/
если вам это нужно.