Во-первых, используйте дисковые UUID, как сказал @grawity.
Если вы хотите узнать UUID всего, что выглядит как блочное устройство для Linux, используйте команду blkid
. Я думаю, что вы можете сделать что-то вроде blkid /dev/sda
чтобы узнать UUID sda
.
Другое, что вы можете сделать, это использовать символические ссылки в /dev/disk/by-id
которые создаются для каждого диска на основе шины, к которой он подключен, а также сообщаемой модели и серийного номера.
Технически, Linux не знает и не заботится об устройстве, с которого он был загружен, потому что
- это задача загрузчика - которая выполняется до запуска ядра - загружать ядро в память.
- все, что не входит в ядро, необходимое для загрузки, находится в initramfs (initrd), например, драйверы, ранние утилиты пользовательского пространства - загрузка это тоже работа загрузчика.
Теперь, после загрузки Linux, загрузочные скрипты или любой другой механизм, работающий под ядром, пытается смонтировать корневую файловую систему, чтобы у вас были другие функции, кроме ядра, а также подкачки и т.д. В основном все вещи в вашем /etc/fstab
. Это то, что вас действительно волнует, и этот файл будет содержать необходимую информацию. Вы можете использовать UUID в /etc/fstab
(и я полагаю, что большинство дистрибутивов уже используют их), поэтому с помощью пары grep
и cut
вы можете получить UUID отсюда, что вам нужно.
Пример (это, вероятно, можно сделать лучше): cat /etc/fstab | grep "/ " | cut -f 1 -d " "
И вы можете использовать вывод этого для blkid
чтобы найти UUID вашей корневой файловой системы или любого другого раздела.