UUID: соображения по замене n символов версии 4 на слово

327
user217893

36 символов UUID - это круто. Но моя интуиция заключается в том, что в моем личном домашнем использовании мне не нужна вся уникальность, которую обеспечивают 36 персонажей. Но я не думаю о всех ситуациях, в которых они вступают в игру.

Я хотел бы удалить несколько символов в UUID версии 4, заменив их чем-то, что я могу понять. Например, замените 4 символа в UUID на cafe. Это поможет мне при написании сценариев. Например, поскольку контейнеры crypto-LUKS не принимают метки (о которых я знаю), я застрял в работе с их UUID ( если я не напишу правила udev )

Это увеличивает риск столкновения. Но если моя личная сфера в течение следующих 5 лет включает 10 000 UUID, риск кажется незначительным, я думаю. Но я могу ошибаться.

Кто-нибудь с опытом с этим?

0
Формальное примечание: вы говорите о каноническом представлении из 36 символов? Если это так, заменить 6 символов на «ночи» невозможно, потому что эти буквы не являются шестнадцатеричными цифрами. Вы можете пойти с `bad-1dea`, хотя. Kamil Maciorowski 6 лет назад 2
лол, и хорошая мысль, пересмотренный вопрос от «ночи» до «кафе» и т. д. user217893 6 лет назад 0

1 ответ на вопрос

0
Rod Smith

Резюме:

Вместо того, чтобы пытаться «взломать» UUID таким способом, я предлагаю вместо этого использовать метки файловой системы, метки разделов, имена логических томов или переменные скрипта, поскольку все эти инструменты предназначены для того, что вы предлагаете. Детали того, что будет работать лучше всего, зависят от ваших конкретных потребностей, которые не ясны на 100% из вашего вопроса.

Расширенная рекомендация:

Универсально уникальный идентификатор (UUID) является 128-бит (16 байт) число, как правило, выражается в виде шестнадцатеричной строки, что, с «-» символами между некоторыми элементами, работает до 36 символов. Это не алфавитно-цифровые символы; это шестнадцатеричные числа. Таким образом, вы не можете вводить любые буквы, которые вам нравятся, только шестнадцатеричные значения. Даже несмотря на то, что вы будете бросать вызов духу UUID, выполняя, как вы предлагаете, ограничение использования только первых шести букв латинского алфавита является большой проблемой для вашей идеи.

Глобальные уникальные идентификаторы (GUID), по сути, такие же, как UUID, но разные стандарты используют разные имена, и существуют варианты обоих. Ваша ссылка на udevправила заставляет меня думать, что вы используете Linux, в котором UUID обычно назначаются файловым системам, тогда как GUID связаны с разделами (при использовании схемы разбиения GPT). В Linux идентификаторы разделов часто упоминаются (в /etc/fstabи т. Д.) С использованием PARTUUIDидентификатора.

Обе файловые системы и разделы GPT могут иметь метки в дополнение к UUID / GUID. Поскольку кажется, что вы хотите, чтобы ваши идентификаторы были понятны вам как человеку, я рекомендую вам использовать метки вместо UUID / GUID. Во многих инструментах Linux метки файловой системы упоминаются с использованием LABELидентификатора, а метки разделов используют PARTLABELидентификатор.

Из вашего вопроса неясно, где именно вы хотите использовать идентификатор (вы подразумеваете в сценарии, но не говорите, что делает этот сценарий), поэтому я не знаю, подойдет ли вам использование или, LABELили the PARTLABEL, но Вы можете захотеть посмотреть на это. Кроме того, я бы не стал исключать написание udevправил, если это необходимо, для получения символических ссылок на устройства, использующие метки; udevправила не так сложны для написания, и если они решат вашу проблему, написание таких правил будет лучше, чем взлом значений UUID / GUID в нарушение соответствующих стандартов.

Однако обратите внимание, что метки разделов являются функцией GPT, но не MBR. Таким образом, если вы используете MBR, метки разделов не подойдут. Вы можете переключиться на GPT (даже без переустановки ОС, хотя вам потребуется переустановить загрузчик), если это будет полезно.

Другой возможностью может быть перенастройка вашей системы для использования LVM. Например, я использую LVM на одном из моих компьютеров и зашифровал определенные LV в моем LVM. В этой конфигурации может быть зашифрованный LV /dev/mapper/myvg-homeи расшифрованная версия /dev/mapper/myvg-home_crypt. Поскольку LV называются и на них обычно ссылаются таким образом, вы получите более понятную ссылку на «свободный», как это было раньше.

Другой вариант: вы ссылаетесь на скрипты. Если вы пишете сценарии, которые ссылаются на разделы по значениям UUID / GUID, вы можете назначить эти значения переменным, как в:

HOME_PART="c5424f69-5016-48bd-adf4-76bd95b1f6bc" 

Детали синтаксиса, очевидно, будут зависеть от вашего языка сценариев, но это суть идеи. Затем вы сможете ссылаться на HOME_PARTдругое место в сценарии. Если сценарий предназначен для запуска в нескольких системах, вы можете найти способ идентифицировать определенные разделы и отобразить их значения UUID / GUID - скажем, путем анализа /etc/fstabдля извлечения соответствующих данных по точкам монтирования. Это может быть чрезвычайно гибкий подход, в зависимости от ваших конкретных потребностей.

Независимо от того, используете ли вы метки файловой системы, метки разделов, имена LV или переменные скрипта, вы получите преимущество (более или менее) полного набора буквенно-цифровых символов, и вам не придется иметь дело даже с частичным шестнадцатеричным UUID / Значение GUID. Некоторые символы могут быть недоступны из-за практических ограничений рассматриваемых стандартов, но по крайней мере вы можете использовать любые цифры и буквы ASCII, которые вам нравятся.