- Как узнать UUID в Linux
- Формат UUID
- Как узнать (найти) UUID
- Использование команды lsblk
- Использование команды ls
- Заключение
- Уникальные идентификаторы в GNU/Linux
- Нет пророка в своём отечестве.
- Как узнать UUID диска в Linux
- Как узнать UUID диска в Linux
- 2. blkid
- 3. lsblk
- 4. Графический интерфейс
- Выводы
- получить уникальный идентификатор машины
- Получить уникальный идентификатор компьютера в Python для Windows и Linux
- 12 ответов
Как узнать UUID в Linux
UUID (Universally Unique identifier) — это 128 битный уникальный номер, стандартизированный Open Software Foundation. UUID помогает идентифицировать разделы в системах Linux. Он генерируется с помощью библиотеки libuuid (используемой e2fsprogs), которая является частью util-linux. Доступна сразу после установки Linux начиная с версии ядра 2.15.1.
UUID создается в локальной системе и всегда уникален.
Если ваша система использует много хранилищ данных, таких как SAN, ISCSI и т. д., то у UUID появляется преимущество. Каждый раз, когда вы перемещаете хранилище, вам не нужно беспокоиться об обновлении /etc/fstab.
В этой статье вы узнаете, как найти UUID накопителей в системе Linux.
Формат UUID
UUID отображается в пяти группах, разделенных дефисами, в виде 8-4-4-4-12 в общей сложности 36 символов.
Как узнать (найти) UUID
В системах на базе Linux/Unix вы можете использовать некоторые утилиты командной строки для поиска UUID устройств. Вы можете найти UUID всех разделов диска системы Linux с помощью команды blkid. Чтобы найти UUID разделов диска, подключенных к вашей системе, выполните следующую команду.
Вы получите следующий результат:
Использование команды lsblk
Вы можете найти UUID разделов устройств с помощью команды lsblk. Например чтобы вывести список UUID разделов устройств, выполните следующую команду lsblk.
Ответ терминала будет следующим:
Вывод списка UUID с помощью команды lsblk
Использование команды ls
В системах Linux сделано так что ОС показывает все устройства как файлы. Таким образом, разделы UUID хранятся в виде файла.
Вы можете перечислить все UUID разделов с помощью команды ls. Для этого вам потребуется ввести:
Ответ в терминале вы увидите следующий.
Перечисление UUID с помощью команды ls
Заключение
Помните, что UUID будет не очень полезен при работе на ноутбуках или домашних компьютерах. Там где обычно не используются высококачественные устройства хранения данных.
Уникальные идентификаторы в GNU/Linux
Когда Вы пишете программу, которая должна взаимодействовать с приложениями, запущенными другим пользователем, в другой сессии или на другом компьютере, возникает необходимость в использовании уникальных идентификаторов. Они могут быть привязаны к различным аппаратным и программным объектам, либо присваиваться каждому процессу на время его выполнения. И зачастую, при выборе идентификатора, программист совершает ошибку.
Так начинается опубликованная на 0pointer.de короткая, но содержательная статья, посвящённая различным, уникальным и не очень, идентификаторам, которыми можно пользоваться в Линуксе. Также в статье рассмотрены их достоинства и недостатки, принципы работы и почему некоторые из них применять не стоит.
статья даже не на русском. о чём новость?
Нет пророка в своём отечестве.
Use /var/lib/dbus/machine-id! Use /proc/self/sessionid! Use /proc/sys/kernel/random/boot_id! Use getuid()! Use /dev/urandom! And forget about the rest
Не знаю, у кого как, а у меня /proc/self/sessionid совпало на всех машинах (4294967295). Очень уникальный номер.
Вроде бы на ссылку «Новости» нажимал, а тут такое вылезло.
Как узнать UUID диска в Linux
Но у этого метода есть и недостаток. UUID рассчитывается на основе метаданных раздела или диска, поэтому если вы измените его размер, UUID тоже изменится, что приведет к поломке системы и вы не сможете загрузится. Исправить ситуацию можно только указав правильный UUID.
Как узнать UUID диска в Linux
Давайте разберем как узнать UUID диска в Linux. Все диски и разделы перечислены в виртуальном каталоге /dev/. Здесь есть подкаталог /dev/disk/by-uuid/ в котором вы можете посмотреть UUID идентификаторы всех подключенных к системе дисков. Для этого выполните:
Строки состоящие из большого количества цифр и букв, подсвеченные бирюзовым цветом и есть UUID.
2. blkid
Ещё для просмотра UUID можно использовать утилиту blkid. Её необходимо запускать от имени суперпользователя, но она показывает информацию только по нужному вам разделу. Например, чтобы посмотреть UUID раздела /dev/sda6 выполните:
sudo blkid /dev/sda6
Здесь UUID выводится в таком формате:
Эту строчку уже можно целиком вставлять в /etc/fstab или настройки загрузчика grub. Утилита позволяет посмотреть информацию для нескольких устройств:
3. lsblk
4. Графический интерфейс
Если вы не хотите использовать терминал, то всегда можете посмотреть UUID в графическом интерфейсе. Для этого используйте утилиту Gnome Disks. Её можно найти в главном меню операционной системы:
Для просмотра UUID просто выберите нужный жесткий диск и кликните по разделу, для которого нужно посмотреть информацию:
Выводы
UUID довольно часто используется при работе с разделами в Linux несмотря на то, что обычные имена разделов намного удобнее и проще запоминаются. Надеюсь, эта информация была полезной для вас.
получить уникальный идентификатор машины
Постоянно использую один внешний hdd, загружая с него Linux систему на разных машинах. Хочу написать скрипт для автоматизации рутинных действий по индивидуальной настройке hardware с вызовом разных программ для разных машин.
Т.е. напр.
If (Home)
cp /etc/X11/xorg-home.conf. /etc/X11/xorg.conf
if (Notebook)
/etc/init.d/wpa_supplicant start
и т.п
Вот только как отличать друг от друга различные компьютеры в скрипте? Нужен уникальный идентификатор машины.
По смыслу подошел бы например серийный номер. мат. платы, процессора или что-то в этом духе, но как получить эту информацию в скрипте я не знаю.
Думал про легко доступные вещи типа MAС-адреса сетевых карточек и серийников hdd но это будет не очень надежно (сетевух может быть много, hdd может поменяться и тп.).
Есть ли ещё какие-то доступные из скрипта id, которые можно использовать в качестве уникального идентификатора машины?
Может подойдёт вывод dmidecode.
Как насчет hostname?
Только не hostname, а hostid. Хотя это все равно что взять mac от первой сетевой карты в системе, вроде от него вычисляется. Главное чтобы /etc/hostid не сушествовал.
Он же сам не меняется =/
dmidecode | grep UUID — уникальный id мат платы.
$ cpuid | grep «Processor serial»
Processor serial: 0001-06CA-0000-0000-0000-0000
dmidecode | grep UUID — уникальный id мат платы.
Чтобы SPD прочитать нужен модуль.
От рута dmidecode возвращает искомый UUID безо всяких modprobe eeprom, но насколько я понял условие задачи, рута может и не быть. Не говоря уже о том, что modprobe сам по себе требует рута.
Может не eeprom, у меня он тоже не загружен, i2c может быть. Не важно, раз от рута работает.
The processor serial number was introduced on Intel Pentium III, but due to privacy concerns, this feature is no longer implemented on later models (PSN feature bit is always cleared).
dmidecode от юзера у меня «not found»
А у меня «/dev/mem: Permission denied» даже после добавления юзера в группу kmem и выдаче kmem прав на запись в /dev/mem (право на чтение у kmem и так есть).
Скопировал dmidecode /usr/sbin/ в /usr/bin/ и получил то же самое.
даже после добавления юзера в группу kmem и выдаче kmem прав
Похоже не в правах дело. Даже после chmod 777 на /dev/mem
# dmidecode 2.11
/dev/mem: Operation not permitted
ядро не дает напрямую читать, защита включена
Что за защита кроме прав? Уже интересно. Руту дает, юзеру не даёт, Как знает кто есть кто?
Куски стрейса, на /dev/mem 777. Рут:
Лол, и что это должно дать?
В ядре может быть что угодно. man capabilities
Вот тебе и уникальный идентификатор
Вместо lsusb выбрать что-то по стабильней lspci к примеру
dmidecode | grep UUID — уникальный id мат платы.
очень уникальный у моего десктопа 🙂
А не, походу ошибся, у меня даже руту не даёт.
но насколько я понял условие задачи, рута может и не быть.
Это в какой системе можно писать в /etc/X11/ обычному пользователю?
От рута dmidecode возвращает искомый UUID безо всяких modprobe eeprom, но насколько я понял условие задачи, рута может и не быть. Не говоря уже о том, что modprobe сам по себе требует рута.
А системные конфиги ты собрался от пользователя менять, а не от рута? И init-скрипты тоже запускать от пользователя будешь?
🙂 Там далее в простыне был вендор материнской платы ASRock. Я к тому, что на самосборных ПК этот UUID считать уникальным рискованно.
Вот только как отличать друг от друга различные компьютеры в скрипте? Нужен уникальный идентификатор машины.
Они создаются при разметке устройства.
PS: важно: их можно клонировать командой dd.
мамка тоже может поменяться. Как раз hdd удобнее, если ты его на другую мамку сунул или клонировал.
Поскольку с получением по-настоящему уникального железного идентификатора машины вылезают всякие проблемы, я бы разово создал через uuidgen и хранил где-нибудь на каждом хосте метку.
тоже годное решение. Но я просто задаю hostname уникальный, и немного осмысленный.
Значит, я недопонял условие задачи, только и всего.
да ты, похоже, вообще топ не читал, там же первой строкой идёт:
Постоянно использую один внешний hdd, загружая с него Linux систему на разных машинах.
и как тут без рута?
А где хранить метку то? Ведь по условиям задачи речь идёт о загрузке разного железе с одно и того же внешнего винта. Нет никаких гарантий, что в системе есть другие диски, и что там есть место что-то хранить.
Тогда я бы взял MAC в качестве идентификатора. Вероятность обмена местами сетевых карт на двух хостах низка, а сложность других методов автоопределения снижает общую надёжность самого автоопределения.
В конце концов, если у скрипта возникают сомнения в достоверном определении, можно и у пользователя спросить, какой сценарий выполнять дальше.
Постоянно использую один внешний hdd, загружая с него Linux систему на разных машинах.
Для того, чтобы загрузить ту или иную ОС (в частности, Linux) с того или иного устройства, не нужен не то, что рут, но и вообще какая-либо учетка в этой ОС. Для дальнейшей работы в загруженном Linux рут вообще говоря не принципиален и даже вреден. Другое дело, что «скрипт для автоматизации рутинных действий по индивидуальной настройке hardware с вызовом разных программ для разных машин» без рута не обойдется, кто бы спорил.
да, рут присутсвует, сетевых карточек а также, других hdd может и не быть.
За dmidecode спасибо, на retail системах это может быть решением.
hostid прямой связи с mac не имеет, определяется софтом и насколько я понимаю тупо может быть изменен в любой момент вызовом sethostid().
Но вообще как подсказал qbe
информация dmidecode не очень то и надежная и в ряде случаев производители на неё забивают.
Лучше и проще всего MAC адрес.
Я предложил hostname потому что для меня это самый удобный способ идентификации машины. Зачем же привязываться к железу, если можно просто дать человекочитаемое название, для чтения которого не нужен root?
Не понял, нужен динамический id? Если ты о том, чтобы ручками изменить hostname, то это делается за минуту.
да, рут присутсвует, сетевых карточек а также, других hdd может и не быть.
вообще я бы посоветовал не привзываться к идентификации «машины» как цельного объекта, а привязываться к тому, что ты в данный момент хочешь настроить.
например:
if(видеокарта hd8700)
cp /etc/X11/xorg.conf.hd8700 /etc/X11/xorg.conf
.
if(есть вай-фай карта с маком 00:ab:cd:ef )
service networkManager start
Идея хорошая, но например для моего «Intel(R) Core(TM) i7-2630QM» никаких serial в /proc/cpuinfo не наблюдается
информация dmidecode не очень то и надежная
Там много строк, не обязательно привязываться к конкретному параметру, можно сразу к нескольким. И вы же пишите под себя, под конкретные компьютеры, зачем сразу же думать о плохом 🙂
А так, компьютерное железо позволяет сделать полные клоны, если прозводитель забъёт на id, ЕМНИП, как-то давно видел материнки у которых всё было по нулям, даже MAC-адреса встроенных сетёвок.
вообще я бы посоветовал не привзываться к идентификации «машины» как цельного объекта, а привязываться к тому, что ты в данный момент хочешь настроить.
нет, udev для моих задач не удобен. При появлении каждого устройства надо будет добавлять его руками в udev.rules. Идентификация устройства в ряде случаев будет сложнее инициализации, каждый раз надо думать по какому id, шине и пр. опознавать устройстово, копировать серийники из /sys и т.п. Кроме того ну не делать же через udev вещи типа «поставить на разных машинах разные обои» 🙂
Для моих задач проще сначала опознать машину и сделать для неё скриптами доп. инициализацию всех устройств и настройку программ в зависимости от роли этой машины. А при появлении нового девайса не морочиться с его опознанием и добавить строчку инициализации в скрипт.
Вообщем как и ожидалось простого и универсального решения не существует, для себя попробую пока такой вариант
При появлении каждого устройства надо будет добавлять его руками в udev.rules
чем это отличается от
А при появлении нового девайса не морочиться с его опознанием и добавить строчку инициализации в скрипт.
по-моему абсолютно одно и та же последовательность действий при определенном навыке.
Получить уникальный идентификатор компьютера в Python для Windows и Linux
Есть идеи, как это сделать?
12 ответов
Как насчет использования MAC-адреса в качестве уникального идентификатора?
Обсуждение здесь Получение MAC-адреса от устройств с помощью Python показывает, как получить MAC-адрес
Для python3.6 и windows необходимо использовать декодирование
Для Windows вам потребуется DmiDecode для Windows (ссылка):
Я не думаю, что есть надежный кроссплатформенный способ сделать это. Я знаю одно сетевое устройство, которое меняет свой MAC-адрес как форму сообщения об аппаратных ошибках, и существует миллион других способов, которые могут привести к сбою.
Ответ 2019 (для Windows):
Использует Windows API для получения постоянного UUID компьютера, затем обрабатывает строку, чтобы убедиться, что это действительный UUID, и, наконец, возвращает объект Python (https://docs.python.org/3/library/uuid.html), который предоставляет удобные способы использования данных (например, 128-разрядное целое число, шестнадцатеричная строка, так далее).
Проблема с MAC-адресами заключается в том, что обычно вы можете легко изменить тему программно (по крайней мере, если вы запускаете ОС на ВМ)
В Windows вы можете использовать этот C API
Вызовите один из них в оболочке или через канал в Python, чтобы получить аппаратный серийный номер компьютеров Apple, работающих под управлением OS X> = 10.5:
Или, если вы не хотите использовать подпроцесс, (это медленно) используйте ctypes. Это для Linux без прав root.
Вы можете использовать это как:
Это должно работать на окнах:
Я нашел что-то еще, что я использую. Mac-адрес для Linux, MachineGuid для Windows, а также есть что-то для Mac.