как узнать свой uuid
Как узнать 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 несмотря на то, что обычные имена разделов намного удобнее и проще запоминаются. Надеюсь, эта информация была полезной для вас.
UUID и браузеры. Почему фронтенд живет без страшных айдишников?
Решил я делать свой пет-проект по учету прочитанных книг на PWA. Покорять новые технологии и все такое. Расчет был на то, что с его выложу и установлю на телефон и вот у меня есть мобильное приложение, которое можно использовать оффлайн. Хочу я сгенерировать UUID, чтобы сохранить книгу, а не нахожу API. Предлагаю разобраться почему.
Что такое UUID
UUID — стандарт идентификации данных используемый, преимущественно, для распределенных систем. Его задача позволить генерировать ключи, которые не вызовут конфликтов при сохранении в то, или иное хранилище данных.
UUID представляет собой 16-байтное число в HEX’е формате:
Здесь я не буду вдаваться в подробности, что из этого что означает. С этим вы подробно можете ознакомиться в википедии.
Способы генерации UUID
Все способы генерации UUID сводятся к тому, что мы берем уникальные данные клиента прогоняем через хеш-функцию и получаем наш 128-битный ключик.
1 и 2 версии использовали время с точностью до 0.1 микросекунды + MAC адрес, что гарантировало практически полное отсутствие возможности получить дубликат. Чтобы полностью добить эту вероятность первая версия добавляет рандомную соль, а вторая ничего не делает (вторую версию мы не любим, она вообще может сгенерировать только 64 уникальных id за семь минут).
3 и 5 хешируют пространство имен (Url, FQDN, OID) + само имя. Таким образом в каждый момент времени мы получаем абсолютно идентичные UUID для одних и тех же входных параметров.
Отличие 3 и 5 версии только в том, что 3 использует для хеширования MD-5, а 5 — SHA-1.
4 же версия просто использует рандом ¯_(ツ)_/¯.
Почему его нет в браузере
JS не имеет доступа к данным машины
Мы не можем получить MAC-адрес пользователя, мы не можем получить данные его IP, а так же вообще что-либо с его машины без разрешения пользователя.
Да, мы можем загружать файлы и делать красивые file-инпуты на фронте, но мы можем получить только конкретный файл, который нам предоставит пользователь. Но согласитесь, как бы не шибко удобно запрашивать на каждый UUID по файлу. Неудобно их запрашивать даже каждый раз при входе на сайт.
Сделано же это из благих целей: представьте, что читаете вы Хабр, а тут:
И больше никаких проблем с высшим образованием.
Потому что до недавних пор он был просто не нужен
Браузер для того, чтобы сидеть в интернете.
Через браузер мы заходим на сайт. Если мы зашли на сайт — нам отдали страничку. А раз нам ее отдали — значит мы связаны с сетевым узлом который может сгенерировать UUID и сами мы можем этого не делать. По факту, нам как фронту вообще на ID информации все равно, мы отдали, а дальше это уже проблема принимающей стороны.
Вы можете возразить, что есть PWA, и что оно есть аж с 2007 года. Но так уж вышло, что PWA никому не нужен, примерно, с того же самого времени. (Хотя нынче Play Market позволяет загружать PWA как приложения, но. ). Сами посудите, много вы PWA приложений установили? Я даже Хабр не поставил.
Но осадочек остался.
Какие трудности вас ждут
Точность времени
Я бы не стал называть это большой проблемой.
Мы можем получить время с точностью только до миллисекунды, в то время как первая версия UUID делала это с точностью до 100 наносекунд.
Ну чисто теоретически мы можем получить и с точностью до 1 микросекунды, но это будет время от открытия вкладки (это если мы сейчас про performance.now() ), что уже не так заманчиво.
Идентификация браузера
Браузеры вообще не уникальны и сейчас я вам это докажу.
Для идентификации клиента HTML Living Standard нам предлагает использовать The Navigator object.
А теперь внимание сравним то, что нам предлагают сравнивать
Браузер | appCodeName | appName | platform | product | productSub | vendor | vendorSub |
---|---|---|---|---|---|---|---|
Chrome | Mozilla | Netscape | Win32 | Gecko | 20030107 | Google Inc. | — |
Mozilla 75 | Mozilla | Netscape | Win32 | Gecko | 20100101 | — | — |
Mozilla 45 | Mozilla | Netscape | Win32 | Gecko | 20100101 | — | — |
Internet Explorer | Mozilla | Netscape | Win32 | Gecko | — | — | — |
Microsoft Edge | Mozilla | Netscape | Win32 | Gecko | 20030107 | Google Inc. | — |
Как вам такое? Почувствовали все разнообразие клиентов? Вот и я нет.
Но надо признать, что местами отличаются userAgent и appVersion :
Тут Edge впереди планеты всей, так как он отображает IP, и мы можем использовать его. Но это только в Edge. А так, как видите, многого с навигатором не навоюешь.
Как это реализовал я
Для себя я решил отталкиваться от своих нужд и особенностей архитектуры своего приложения.
Последние 6 байт я беру из SHA-1 хеша логина — можно идентифицировать 281,474,976,710,656 уникальных пользователей (если взять расчет на то, что не будет коллизий). Тоже с запасом (у меня их всего 30).
1 байт у нас отводится на версию (M) и вариант (N).
Оставшиеся 3 байта я солю рандомом.
Если вдруг мое приложение станет супер-пупер популярным и 100,000 и они будут за минуту каждый делать по 100 книг, то за миллисекунду будет генерироваться:
$$
100,000 * 100 / 60,000 = 166
$$
Вероятность того, что совпадут два:
Это очень мало и этого мне хватает
Реализацию можно посмотреть тут.
Предвещая вопрос «А почему же не рандом?»
Да, есть такой легендарный код
В моем случае на бэкенде UUID используется как первичный ключ.
Когда первые байты ключа идут по порядку больше вероятность, что новая запись встанет в конец таблицы. Даже если на клиенте будет запущена синхронизация. Ведь вряд ли юзер выполнит синхронизацию данных внесенных полгода назад и СУБД будет сдвигать половину таблицы.
В случае же с рандомом — данные будут вставляться в табличку куда ни попадя.
Системный номер раздела диска UUID / GUID / serial number
На чистом диске нет никаких разделов и соответственно нет никаких номеров раздела.
В чем отличие UUID от GUID
UUID (Universally unique identifier «универсальный уникальный идентификатор») – UUID представляет собой 16-байтный (128-битный) номер. В каноническом представлении UUID изображают в виде числа в шестнадцатеричной системе счисления, разделённого дефисами на пять групп в формате 8-4-4-4-12.
GUID (Globally Unique Identifier) – это так называется у Microsoft – фактически это последняя реализация UUID (да, там были свои предыдущие версии и свой зоопарк).
Именно по этому актуальная разметка диска от Microsoft называется GPT (GUID Partition Table), читаем статью
В целом используется как идентификатор (в составе также закодирована дата и время создания):
Почему такая загадочная запись?
Очень удобно переводить двоичные числа в шестнадцатеричный формат (а в десятичный формат – очень неудобно).
Помним, что для половинки байта (4 бита):
Bin | Hex | Dec |
0000 | 0 | 0 |
0001 | 1 | 1 |
0010 | 2 | 2 |
0011 | 3 | 3 |
0100 | 4 | 4 |
0101 | 5 | 5 |
0110 | 6 | 6 |
0111 | 7 | 7 |
1000 | 8 | 8 |
1001 | 9 | 9 |
1010 | A | 10 |
1011 | B | 11 |
1100 | C | 12 |
1101 | D | 13 |
1110 | E | 14 |
1111 | F | 15 |
Т.е. один байт (8 бит) вида 11111111 легко представляется в виде FF = т.е. каждая половинка байта – это F (15 в десятичной системе).
Поэтому 128 бит легко превращаются в номер из 32 цифр в шестнадцатеричной системе счисления, 128/4 = 32
В номере UUID <8e44ac32-40e2-11ea-93a4-bff4e4da2abb> каждые два разряда фактически кодируют один байт.
Посмотрим на структуру номера
xxxxxxxx-xxxx-Mxxx–Nxxx-xxxxxxxxxxxx
4 бита M обозначают версию (“version”) UUID, а 1-3 старших бита N обозначают вариант (“variant”) UUID.
Первые две цифры кодируют дату и время создания.
Такое разделение на группы основано на структуре UUID:
Название поля | Длина (в байтах) | Длина (число 16-ричных цифр) | Содержимое |
---|---|---|---|
time_low | 4 | 8 | целое число, обозначающее младшие 32 бита времени |
time_mid | 2 | 4 | целое число, обозначающее средние 16 бит времени |
time_hi_and_version | 2 | 4 | 4 старших бита обозначают версию UUID, младшие биты обозначают старшие 12 бит времени |
clock_seq_hi_and_res clock_seq_low | 2 | 4 | 1-3 старших бита обозначают вариант UUID, остальные 13-15 бит обозначают clock sequence |
node | 6 | 12 | 48-битный идентификатор узла |
Как вытащить дату и время из GUID?
bdb62d89-cede-11e4-b12b-d4ae52b5e909
дата содержится в первых символах, bdb62d89-cede-11e4 которые нужно переставить задом наперед: 11e4-cede-bdb62d89
первый символ отбрасываем, убираем “лишние” знаки “-“(тире)
интервал в десятых долях микросекунд (HEX) получается равным: интервал 16= 1E4CEDEBDB62D89
переводим его в десятичный интервал интервал 10 = HexToDec(интервал 16);в результате получаем: интервал 10 = 136 461 344 788 852 105
находим интервал в секундах: интервал Сек = интервал 10 / 10 000 000;
Делаем сдвиг даты от 15.10.1582 г. + 13 646 134 478 + сдвиг на часовой пояс (Московское время) от “мирового времени” (GMT) = 20.03.2015 16:54:38
Использование UUID / GUID как номера раздела (тома) на диске
В LInux изначально используется UUID как системный номер раздела.
В Windows свой зоопарк.
Для FAT 32 – серийный номер из 4 байт = 8 символов в шестнадцатеричной системе
Для NTFS – серийный номер из 8 байт = 16 символов в шестнадцатеричной системе
Системный номер раздела записан непосредственно на диске – создается при форматировании диска. В серийном номер также закодирована дата и время создания раздела.
ВАЖНО: каждый диск “помнит” дату и время создания на нем конкретного раздела, это фактически записано в номере созданного раздела (при форматировании). Нужна шапочка из фольги…
Этот номер мы можем увидеть в свойствах раздела, который показывают программы для управления разделами.
Номер 4610e64f 10e64611 – 16 цифр в шестнадцатеричной системе
Правую половинку номера тома мы также можем увидеть через команду DIR в режиме командной строки
10e6-4611
Он используется Windows уже для регистрации (например раздела) – как устройства, подключенного к системе, вот на фото ниже (как это красиво называется – “точка монтирования” – Mount point).
Этот номер уже записан в недрах реестра – в отличии от серийного номера раздела, записанного в заголовке тома на диске.
Этот же номер мы можем увидеть в bcdedit – как номер основного диска С для работы системы
Видно, что номер GUID используется также для идентификации текущей операционной системы (т.е. в загрузчике явно указано, какую операционную систему нужно загружать и на каком диске она находится).
Вы можете сохранить ссылку на эту страницу себе на компьютер в виде htm файла
Как узнать UUID’ы разделов? Команды blkid и vol_id
Статья из серии «HuMan»
Предисловие
Удобство понимания и заполнения таких конфигурационных файлов как, скажем, /etc/fstab «значительно повысилось». Стало невозможным понять о каком разделе идет речь. Хорошо если у вас всего пять-шесть разделов, еще можно помнить, на каком своп, а на каком корень. А если разделов в три раза больше? Да если еще и постоянно удаляешь одни, и создаешь другие? Мода требует жертв.
Кому же нужны UUID’ы и для кого они действительно удобны? Сисадминам больших серверов, у которых одновременно присутствуют носители всевозможных типов, да еще и объединенные во всякие RAID’ы и прочие сиадминские заморочки. Для них, когда возникает необходимость перенести содержимое с одного носителя на другой, потом встает большая проблема правильно внести изменения в ту же /etc/fstab вручную. С UUID’ами же ядро, при помощи специальных программ, автоматически находит и размечает разделы по соответствующим носителям. Это им экономит много сил и времени.
Простым же смертным, имеющим два компьютера с тремя винчестерами на обоих, эти UUID’ы нужны как зайцу стоп-сигнал. Я лично первым делом безжалостно удаляю все эти номера из файлов /etc/fstab и /boot/grub/menu.lst. Это позволяет мне избежать головной боли при клонировании разделов, когда возникают два раздела с одинаковыми «Уникальными номерами».
Но многим почему-то нравятся UUID’ы, и они озабочены, если какой-нибудь раздел, например подкачки, вдруг прописан по «имени-отчеству». В Сети иногда встречаются такие вопли о помощи: «Мой раздел своппига не имеет UUID’а. Как мне узнать его и вписать в /etc/fstab?». Для вас, любители UUID’ов, эта статья.
Команда blkid
Однако программа blkid по умолчанию не считывает информацию о разделах непосредственно из соответствующих нод устройств, а считывает ее из файла /etc/blkid.tab. Этот файл зачем-то называется в мане команды blkid кэш файлом, а всем известно, что слово cache имеет множесто значений, а потому совершенно бессмысленно. Должен вас сразу предупредить, что в файле /etc/blkid.tab со временем накапливается устаревшая информация о давно несуществующих разделах, поэтому не думайте читать сам файл в поисках UUID’ов, можете жестоко обмишулиться. Пользуйтесь командой blkid с соответсвующими опциями.
Команда blkid без опций
Совсем другое дело, не правда ли?
Опция
Выдает сведения об указанном устройстве.
Найдет все устройства, отвечающие заданному критерию, будь то TYPE, LABEL, или UUID. Можно сужать круг поиска, вводя в командную строку имена интересующих устройств:
Выдаст только указанный критерий нужного устройства.
По моему, проще переадресовать в файл «file» вывод команды.
Вот все, что касается команды blkid. Однако существуют и другие возможности узнать UUID раздела.
Там четыре субдиректории, одна из которых by-uuid. Посмотрим:
Вот поди, догадайся, что к чему относится! Нет, это не метод.
Команда vol_id
Хорошая и удобная команда, жаль, что не во всех дистрибутивах встречается.
Заключение
Если говорить о разделах жесткого диска, то UUID’ы присваиваются им в процессе создания файловой системы (некоторые утверждают, что они вычисляются из характеристик раздела), и записываются где-нибудь в суперблоках. Во всяком случае, еще не отформатированный раздел не имеет UUID’а. А при клонировании раздела командой dd, раздел, в который устанавливают клон, меняет свой UUID на идентификатор клона.
Нравится мне это или нет, но UUID’ы прочно вошли в повседневный быт линуксоида. И нет в них никакой мистики.
Как узнать 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 будет не очень полезен при работе на ноутбуках или домашних компьютерах. Там где обычно не используются высококачественные устройства хранения данных.