Строка вида 28803f59-3a75-4058-995f-4ee5503b023c в выводе shell-команды — это классический UUID (универсальный уникальный идентификатор) в стандартном формате 8-4-4-4-12 шестнадцатеричных символов. Такие идентификаторы встречаются при работе с разделами диска, виртуальными машинами, задачами планировщика, объектами Active Directory и многими другими подсистемами. Понимание того, откуда взялся конкретный UUID и что с ним делать, избавляет от лишних часов диагностики.
В этой статье разберём, как определить источник идентификатора, как сгенерировать собственный UUID в Linux и Windows, как искать объект по известному идентификатору и каких ошибок стоит избегать при автоматизации скриптов.
Что представляет собой идентификатор такого формата
UUID — это 128-битное значение, записываемое в виде пяти групп шестнадцатеричных цифр, разделённых дефисами. В примере 28803f59-3a75-4058-995f-4ee5503b023c первая группа содержит 8 символов, затем идут три группы по 4 и завершающая из 12. Символ «4» в начале третьей группы (4058) указывает на версию 4 — идентификатор сгенерирован случайным образом, что является самым распространённым вариантом.
Термины UUID и GUID обозначают по сути одно и то же: GUID — название, принятое в экосистеме Microsoft, UUID — в открытых стандартах и миру Unix. В shell-скриптах обе системы вы встретите один и тот же формат записи.
- 🔢 Версия 1 — генерируется на основе MAC-адреса и метки времени
- 🔢 Версия 4 — полностью случайная генерация (наш случай)
- 🔢 Версия 5 — хеш от имени и пространства имён (SHA-1)
- 🔢 Nil UUID — все нули, используется как заглушка
Где в shell чаще всего встречаются такие идентификаторы
Наиболее частый сценарий — идентификаторы разделов и файловых систем в выводе blkid или в файле /etc/fstab. Там же встречаются UUID томов в PowerShell при работе с Get-Volume. Вторая типичная область — виртуализация: VirtualBox, Hyper-V и VMware присваивают каждой ВМ и каждому виртуальному диску собственный GUID.
Также UUID фигурируют в системных журналах как идентификаторы сессий, заданий и транзакций. Если вы нашли непонятный идентификатор в логе — первым делом выясните, какая подсистема его сгенерировала, иначе поиск объекта превратится в гадание.
Как сгенерировать UUID в командной строке
В Linux самый прямой способ — утилита uuidgen из пакета util-linux, которая присутствует в большинстве дистрибутивов по умолчанию. Альтернатива без установки пакетов — чтение из псевдофайла ядра:
cat /proc/sys/kernel/random/uuid
В PowerShell (Windows) идентификатор создаётся через .NET-метод:
[guid]::NewGuid().ToString()
Обе команды выдают значение версии 4 в том же формате, что и наш пример. Обратите внимание: регистр символов может отличаться — Windows традиционно выводит GUID в верхнем регистре, а Linux-утилиты — в нижнем. При сравнении строк в скриптах приводите обе стороны к одному регистру, иначе сравнение даст ложное несовпадение.
Чтобы сравнение UUID в скрипте не ломалось из-за регистра, используйте tr 'A-F' 'a-f' в bash или .ToLower() в PowerShell перед сопоставлением.
Поиск объекта по известному идентификатору
Допустим, у вас есть UUID, и нужно понять, чему он принадлежит. Порядок действий зависит от контекста, но общая логика такова: сначала проверяем дисковую подсистему, затем виртуализацию, затем системные журналы.
Для поиска раздела по UUID в Linux достаточно одной команды:
blkid | grep 28803f59-3a75-4058-995f-4ee5503b023c
Если идентификатор относится к задаче планировщика Windows, поиск выполняется через Get-ScheduledTask с фильтрацией по свойству. Для журналов событий удобен grep -r по каталогу /var/log — так вы найдёте все записи, где фигурировал этот идентификатор, и поймёте контекст его появления.
☑️ Диагностика неизвестного UUID
Типичные ошибки при работе с UUID в скриптах
Первая ошибка — жёсткое зашивание UUID в скрипт без комментария, чему он принадлежит. Через полгода никто не вспомнит, что это за идентификатор, и при миграции на новый диск скрипт молча перестанет работать. Всегда добавляйте поясняющий комментарий рядом со значением.
Вторая проблема — сравнение строк с учётом регистра и наличия фигурных скобок. PowerShell иногда возвращает GUID в формате {28803F59-...}, а в файле конфигурации тот же идентификатор записан без скобок и строчными буквами. Перед сравнением нормализуйте обе строки: уберите скобки, приведите к одному регистру.
⚠️ Внимание: не используйте UUID как пароль или секретный токен. Случайность версии 4 достаточна для уникальности, но идентификаторы часто попадают в логи и вывод команд в открытом виде — для криптографических целей применяйте специальные генераторы ключей.
UUID гарантирует уникальность, но не секретность. Его задача — однозначно идентифицировать объект, а не защищать доступ к нему.
UUID разделов и монтирование: практические нюансы
При монтировании разделов через /etc/fstab рекомендуется использовать именно UUID, а не имена устройств вида /dev/sda1: буквы дисков могут меняться при подключении новых накопителей, а идентификатор раздела остаётся постоянным. Узнать UUID всех разделов поможет команда lsblk -f или уже упомянутый blkid.
Важный нюанс: UUID присваивается файловой системе при её создании. Переформатирование раздела генерирует новый идентификатор, и все ссылки на старый в fstab станут недействительными — система может уйти в аварийный режим при загрузке. После любых операций с разделами обновляйте записи и проверяйте конфигурацию командой mount -a до перезагрузки.
⚠️ Внимание: при клонировании дисков побайтово (например, через
dd) копия получает тот же UUID, что и оригинал. Одновременное подключение обоих носителей к одной системе вызовет конфликт — смонтируется непредсказуемый раздел. Меняйте идентификатор на клоне штатными утилитами файловой системы.
Как изменить UUID файловой системы
Для ext2/3/4 используется tune2fs -U random /dev/sdXN, для XFS — xfs_admin -U generate, для swap — swaplabel -U random. Все операции выполняются на отмонтированном разделе. После изменения обновите /etc/fstab и конфигурацию загрузчика, если она ссылается на старый идентификатор.
Сравнение инструментов работы с UUID
| Инструмент | Платформа | Назначение |
|---|---|---|
uuidgen | Linux | Генерация новых UUID |
blkid | Linux | Просмотр UUID разделов |
tune2fs -U | Linux | Смена UUID ext-разделов |
[guid]::NewGuid() | Windows / PowerShell | Генерация GUID |
Get-Volume | Windows / PowerShell | Просмотр идентификаторов томов |
Выбор инструмента определяется задачей: для разовой генерации достаточно встроенных средств, для массовой обработки в скриптах удобнее программные интерфейсы — они возвращают структурированные данные, которые проще фильтровать.
Часто задаваемые вопросы
Могут ли два UUID случайно совпасть?
Теоретически вероятность коллизии существует, но для версии 4 она настолько мала, что на практике ею пренебрегают. Для уникальности в пределах одной системы случайной генерации достаточно.
Почему один и тот же GUID выглядит по-разному в Windows и Linux?
Различаются регистр символов и наличие фигурных скобок — это особенности представления, а не разные значения. Байтовое содержимое идентификатора одинаково.
Что делать, если система не загружается из-за неверного UUID в fstab?
Загрузитесь с Live-носителя, узнайте актуальные идентификаторы через blkid и исправьте запись в /etc/fstab. Перед перезагрузкой проверьте конфигурацию командой mount -a.
Можно ли задать собственный UUID вручную?
Да, утилиты вроде tune2fs -U принимают произвольное значение в правильном формате. Это бывает нужно при восстановлении системы, когда требуется сохранить прежний идентификатор раздела.
Куда девается UUID при переформатировании раздела?
Создание новой файловой системы генерирует новый идентификатор — старый безвозвратно теряется вместе с данными раздела. Заранее сохраните старое значение, если оно где-то используется.