Вопрос: Как найти UUID файловой системы


Я запускаю Ubuntu и хочу узнать UUID конкретной файловой системы (а не раздела). Я знаю, что могу использовать e2label /dev/sda1 чтобы узнать метку файловой системы, но похоже, что нет похожего способа найти UUID,


110
2018-05-02 15:47


Источник


Спасибо за все ответы, я уверен, что буду использовать их все в разных обстоятельствах. - Brad Gilbert
Обратите внимание, что заголовок использовался как «Как найти UUID раздела». Этот вопрос имеет смысл только при использовании таблицы разделов GPT. Вот ответ на этот вопрос, - Alastair Irvine


Ответы:


Другая команда, которая может быть доступна, а также хорошо работает для этого, - «blkid». Это часть пакета e2fsprogs. Примеры использования:

Посмотрите данные на / dev / sda1:

topher@crucible:~$ sudo blkid /dev/sda1
/dev/sda1: UUID="727cac18-044b-4504-87f1-a5aefa774bda" TYPE="ext3"

Показать данные UUID для всех разделов:

topher@crucible:~$ sudo blkid
/dev/sda1: UUID="727cac18-044b-4504-87f1-a5aefa774bda" TYPE="ext3"
/dev/sdb: UUID="467c4aa9-963d-4467-8cd0-d58caaacaff4" TYPE="ext3"

Показывать данные UUID для всех разделов в более удобном для чтения формате: (Примечание: в новых версиях, blkid -L имеет другое значение и blkid -o list следует использовать вместо этого)

topher@crucible:~$ sudo blkid -L
device     fs_type label    mount point    UUID
-------------------------------------------------------------------------------
/dev/sda1 ext3             /              727cac18-044b-4504-87f1-a5aefa774bda
/dev/sdc  ext3             /home          467c4aa9-963d-4467-8cd0-d58caaacaff4

Покажите только UUID для / dev / sda1 и ничего больше:

topher@crucible:~$ sudo blkid -s UUID -o value /dev/sda1
727cac18-044b-4504-87f1-a5aefa774bda

139
2018-05-04 19:11



На моем компьютере Ubuntu мне не нужно использовать sudo. - Brad Gilbert
Просто набрав blkid, дал мне именно то, что я хотел, но не совсем то, что я просил. (Я все равно принимаю его, потому что я уверен, что буду использовать его часто) - Brad Gilbert
В более новых версиях Ubuntu эквивалентная команда для blkid -L сейчас blkid -o list; -L опция была изменена на -L label для поиска устройства, использующего указанную метку. - aculich
@aculich Я обновил ответ, включив недавний синтаксис для blkid, Спасибо, что упомянул об этом. - Christopher Cashell
Отлично, я никогда не знал о blkid; Я всегда делал ls -l /dev/disk/by-uuid, На Gentoo, blkid в sys-apps/util-linux - AdmiralNemo


Только для разделенных дисков GPT

На диске с форматированием GPT каждому разделу присваивается идентификатор GUID, который является формой UUID, хотя, вероятно, не тот, на что ссылался оригинальный плакат. Поэтому этот ответ, вероятно, менее полезен для первоначального вопрошающего. Тем не менее, я считаю, что необходимо отметить важное различие.

Чтобы получить GUID раздела 1 на форматированном диске GPT / dev / sda, а также его метку раздела и так далее:

sudo sgdisk -i 1 /dev/sda

или все с:

ls -l /dev/disk/by-partuuid

Для загрузки с корнем файловой системы, находящейся на определенном разделе, вы должны использовать синтаксис синтаксиса ядра Linux:

root=PARTUUID=87654321-4321-4321-abcd-123456789012

В этом случае вы можете указать только начало UUID - достаточно, чтобы быть уникальным. Этот параметр более примитивен и может быть понят ядром ранее в процессе загрузки.


Между ними есть разница в семантике:

На диске хранятся разделы, раздел содержит файловую систему, файловая система содержит каталоги и файлы. Для некоторых настроек и операционных систем существует больше уровней.

GUID UUID и связанная метка относятся к разделу, но не к содержимому раздела. Новый раздел на том же диске или раздел на новом диске будет иметь новый GUID UUID. Один и тот же раздел может содержать одну файловую систему один день, а другой - в другой день. Он существует только для дисков с форматированием GPT, но не для устаревших секционированных дисков. Здесь обычно нет никакой полезности, кроме указания root=/dev/sda1 или root=8:1,

Другие текущие ответы относятся к UUID файловая система в некотором содержащем разделе. Если файловая система скопирована в целом на другой раздел или жесткий диск, значение остается неизменным. Этот UUID полезен при поиске перемещенной файловой системы. Поэтому это, вероятно, более уместно для большинства людей. Параметр ядра Linux root=UUID=87654321-4321-4321-a567-123456789012 относится к этому.

я верю root=LABEL= а также root=UUID= реализованы ранним пользовательским пространством, код инициализации, который я видел на днях в моей системе, перевел эти параметры в / dev / disk / by-uuid и / dev / disk / by-label (ссылки, которые, я считаю, созданы udev в пользовательском пространстве на моем система).

[1] http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/init/do_mounts.c#n183


8
2018-06-23 21:55



Правильное использование -i1 или -i 1, в отличие от -i:1, с помощью sgdisk 1.0.1. - Charles Duffy
@CharlesDuffy благодарит за обнаружение этой ошибки. Я отредактировал ответ, чтобы исправить его. - John S Gruber


Самый простой способ сделать это для ext2 / ext3 / ext4:

/sbin/tune2fs -l /dev/sda1

5
2018-05-02 15:57



Это будет работать, если ваша файловая система отформатирована как ext2, ext3 или ext4. Большинство файловых систем - одна из них, но не все. Он также не будет работать для разделов подкачки. См. Мой ответ на универсальный путь. - Hamish Downer
Это приводит к тому, что мое дело Couldn't find valid filesystem superblock. - Michel


Рекомендуемый способ сделать это - сделать

sudo vol_id -u /dev/sda2

Более подробно об использовании UUID см. Эта статья (из справки ubuntu, но он должен работать для любого дистрибутива linux, используя UUID).

Как отмечено в комментариях к этому вопросу, vol_id может быть не на вашем пути. На ubuntu он находится в / sbin, поэтому выше будет работать. Для федералов это, по-видимому, нуждается

sudo /lib/udev/vol_id -u /dev/sda2

Если в других дистрибутивах есть vol_id в других местах, отправьте комментарий, и я добавлю его к этому ответу.


3
2018-05-02 16:53



Это не работает на моем ноутбуке Fedora 10. - Eddie
Это гораздо лучшее решение, чем мое. Eddie, vol_id находится в / lib / udev. Миш, не могли бы вы отредактировать свой ответ, чтобы префикс полного пути перед vol_id? / lib / udev по умолчанию не входит в корневой каталог любого дистрибутива, о котором я знаю. - Mihai Limbăşan
«/ lib / udev / vol_id / dev / sda2», похоже, работает. Немногие будут иметь / lib / udev на своем пути. - Eddie
На моем компьютере Ubuntu имеется символическая ссылка от /sbin/vol_id в /lib/udev/vol_id - Brad Gilbert
vol_id был исключен из Ubuntu с Karmic (9.10), поэтому он не является полезным или актуальным. Он прошел через множество искажений, чтобы добраться туда, как vol_id был в какой-то момент построен для замены BLKID, - Alain O'Dea


Кажется, это работает для меня:

sudo dumpe2fs /dev/sda1 | grep UUID

2
2017-09-18 21:08





Предполагая, что вы хотите UUID для sda1, вы можете попробовать что-то вроде этого:

for v in /dev/disk/by-uuid/* ; do echo "`readlink $v`: $v" | grep ../sda1 | cut -d\: -f2 | cut -d/ -f5 ; done

Отрегулируйте sda1 соответственно. Чтобы получить UUID для всех разделов, сбросьте greps и cuts, a la:

for v in /dev/disk/by-uuid/* ; do echo "`readlink $v`: $v" ; done

Пример вывода для sda1 на моем рабочем столе:

[mihailim@home ~]$ for v in /dev/disk/by-uuid/* ; do echo "`readlink $v`: $v" | grep ../sdb3 | cut -d\: -f2 | cut -d/ -f5 ; done
dc8c49f1-e2dc-46bc-ba02-013f26c85f70

Изменить: Обратите внимание, что это решение, хотя и более изобретенное, чем udev-> vol_id, делает не требуют привилегии root, будут работать на любом ядре после 2005 года или в нем, и полагаются на инструменты, присутствующие в любом дистрибутиве Linux, которые по умолчанию находятся в пути для любого пользователя.


1
2018-05-02 16:22



Это будет работать на любом компьютере, на котором запущено достаточно долгое devfs. - Eddie


Вы можете использовать следующее, чтобы получить UUID для определенного диска,

sudo vol_id -u /dev/sda1

или вы можете использовать это, чтобы перечислить все UUID для подключенного носителя,

ls /dev/disk/by-uuid

0
2018-05-02 17:24



Больше не применимо с Ubuntu 9.10 как vol_id был удален. - Alain O'Dea


Вы также можете использовать это для печати всех UUID:

for disk in /dev/disk/by-uuid/*; do 
    basename "$(readlink "$disk")"
    basename "$disk"
    echo
done

или это, возможно, более простая команда, заменяющая sda1 с устройством, которое вы хотите найти:

disk=sda1
find /dev/disk/by-uuid -type l -exec sh -c "readlink {} | grep -o $disk && basename {}" \;

адаптация второго метода для печати всех UUID:

find /dev/disk/by-uuid -type l -exec sh -c 'basename $(readlink {}); basename {}; echo' \;

0
2017-11-30 23:09





ls -l /dev/disk/by-uuid | grep `lsblk | grep "/" | awk '{print $1}'` | awk '{print $9}'

Вышеизложенное, похоже, работает на большинстве (все, что я нашел) систем Linux на протяжении многих лет. У меня могут быть недостатки, я не знаю. Я бы предпочел получить серийный номер, но ... это UUID корневой файловой системы.

Если у кого-то есть способ получить серийный номер, не нуждаясь в том, чтобы быть root (как мой), а не устанавливать «необычные» пакеты, которые отличаются в разных версиях Unix, я был бы признателен - всегда может чему-то научиться. И я знаю, что я смешиваю вещи - это корневая файловая система UUID, а не диск.

Цель BTW состоит в том, чтобы генерировать уникальный номер на машину, которая не может быть изменена (например, серийный номер диска и аналогичные MAC-адреса раньше).

Он используется для кодирования программного обеспечения на одну машину. MAC-адрес был прекрасен, пока они не позволили им быть виртуальными ... некоторые неряшливые клиенты просто установили свой MAC-адрес на постоянную (в разных сетях, конечно) и избежали платить мне.

В AIX есть один вызов, чтобы получить один номер, который идентифицирует машину. Меня не волнует, произошли ли изменения в оборудовании или обновления программного обеспечения, поэтому я понятия не имею, как они это делают ... Если материнская плата меняется, число меняется, поэтому я думаю, что они скрывают ее. И это невозможно.


0
2018-03-24 01:11





Сценарий - чистый способ сделать это, который работает на любом типе файловой системы:

lsblk -no UUID <device-containing-FS>

Или, учитывая точку монтирования (или любой файл внутри нее):

lsblk -no UUID $(df -P <file> | awk 'END{print $1}')

Результатом является UUID, весь UUID и ничего, кроме UUID.


0
2017-12-30 13:29