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

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

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

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

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

1 ответ

Резюме:

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

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

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

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

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

It's unclear from your question precisely where you want to use the identifier (you imply in a script, but you don't say what that script does), so I don't know if using either the LABEL или PARTLABEL would work for you, but you might want to look into this. Also, I wouldn't rule out writing udev rules, if necessary, to get symlinks to devices that use labels; udev rules aren't that hard to write, and if they solve your problem, writing such rules would be better than hacking UUID/GUID values in defiance of the relevant standards.

Note, however, that partition labels are a feature of GPT, but not of MBR. Thus, if you're using MBR, partition labels won't be an option. You could switch to GPT (even without re-installing the OS, although you'd need to re-install your boot loader) if this would be helpful, though.

Another possibility might be to reconfigure your system to use LVM. As an example, I use LVM on one of my computers and have encrypted specific LVs within my LVM. In this configuration, an encrypted LV might be /dev/mapper/myvg-home and the decrypted version is /dev/mapper/myvg-home_crypt, Because LVs are named and are typically referred to in this way, you'll get a more intelligible reference for "free," as it were.

Another option: You refer to scripts. If you're writing scripts that refer to partitions by UUID/GUID values, you could assign those values to variables, as in:

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

Syntax details would obviously depend on your scripting language, but that's the core of the idea. You'd then be able to refer to HOME_PART elsewhere in the script. If the script was meant to be run on multiple systems, you might be able to find a way to identify specific partitions and map their UUID/GUID values -- say, by parsing /etc/fstab to extract the relevant data by mount points. This could be an extremely flexible approach, depending on your specific needs.

Whether you use filesystem labels, partition labels, LV names, or script variables, you'd get the benefit of the (more-or-less) full set of alphanumeric characters, and you would not need to deal with even a partial hexadecimal UUID/GUID value. Some characters might be off limits because of practical limits of the standards in question, but at the very least you could use whatever ASCII numbers and letters you like.

Другие вопросы по тегам