blkid возвращает больше информации, чем ожидалось

blkid возвращает больше информации, чем ожидалось

Я следую рецепту, который создал пару лет назад, когда в какой-то момент мне нужно было blkidполучить UUID файловой системы.

Я записал эту команду вместе с ожидаемым примером возвращаемого значения:

blkid -o export -s UUID /dev/mapper/thathost_crypt_md3
UUID=JNbF5T-vhSD-3aVv-intG-1Tk2-IEOZ-ABWXYZ

Однако времена меняются, и я больше не использую Debian "wheezy", а вместо этого использую "jessie". Я вижу, что в этой более новой версии Debian у меня теперь другое возвращаемое значение для той же команды:

blkid -o export -s UUID /dev/mapper/thishost_crypt_sdb
DEVNAME=/dev/mapper/thishost_crypt_sdb
UUID=bddac63e-3510-4d24-a6fb-4d0a89abcdef

На странице руководства blkid, кажется, говорится, что следует включать только значения, соответствующие этому ключу, однако там -s UUIDесть и кое-что постороннее .DEVNAME

У меня есть обходной путь, поскольку я могу написать это в обоих случаях, но кажется странным, что структура вывода должна была измениться:

echo "UUID=$(blkid -o value -s UUID /path/to/device)"
UUID=bddac63e-3510-4d24-a6fb-4d0a89abcdef

Версии пакетов util-linux— 2.20.1-5.3 и 2.25.2-6 соответственно.

Вопросы

  1. Почему изменилась форма UUID и имеет ли это значение?
  2. Почему изменился формат вывода?

решение1

DEVNAME — псевдоним устройства, см.Постоянное имя устройства с использованием псевдонима

Более того, похоже, что теперь по международным стандартам UUID должен быть написан строчными буквами.

ОтТип символа, сгенерированный UUID

Для ясности, UUID на самом деле является 128-битным значением, а не текстом или цифрами. Вы можете думать о них как о 128-битных беззнаковых целых числах.

В последней международной спецификации от 2008-08 гг. указано (выделено мной):

6.5.4 Программное обеспечение, генерирующее шестнадцатеричное представление UUID, не должно использовать заглавные буквы. ПРИМЕЧАНИЕ. Рекомендуется, чтобы шестнадцатеричное представление, используемое во всех читаемых человеком форматах, было ограничено строчными буквами. Однако программное обеспечение, обрабатывающее это представление, должно принимать как заглавные, так и строчные буквы, как указано в 6.5.2.

Что касается печати UUID и псевдонима/DEVNAME

Из util-linux/blkid.c видно, что DEVNAME выводится, потому что вы используете-o export

} else if (ctl->output & OUTPUT_EXPORT_LIST) {
        if (num == 1 && devname)
            printf("DEVNAME=%s\n", devname); 

Поэтому я подозревал, что без -o exportнего будет выводиться только UUID, и действительно:

$blkid -s UUID /dev/sda2
/dev/sda2: UUID="67169dd7-f319-4402-a9b2-cebcf2f3657a"
$ blkid -o export -s UUID /dev/sda2
DEVNAME=/dev/sda2
UUID=67169dd7-f319-4402-a9b2-cebcf2f3657a

Связанный контент