Я использую Ubuntu и хочу узнать, UUID
какая именно файловая система (не раздел). Я знаю, что могу использовать, e2label /dev/sda1
чтобы узнать метку файловой системы, но, похоже, нет похожего способа найти UUID
.
Я использую Ubuntu и хочу узнать, UUID
какая именно файловая система (не раздел). Я знаю, что могу использовать, e2label /dev/sda1
чтобы узнать метку файловой системы, но, похоже, нет похожего способа найти UUID
.
Ответы:
Еще одна команда, которая может быть доступна, но для этого также достаточно хорошо работает, это 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
blkid
, получил именно то, что я хотел, но не совсем то, что я просил. (Я все равно принимаю это, потому что я уверен, что буду использовать это часто)
blkid -L
теперь используется эквивалентная команда для blkid -o list
; -L
вариант был изменен , -L label
чтобы посмотреть устройство , которое использует указанную метку.
blkid
. Спасибо за упоминание этого.
blkid
; Я всегда только что сделал ls -l /dev/disk/by-uuid
. На Gentoo, blkid
находится вsys-apps/util-linux
Только для разделенных 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
-i1
или -i 1
, в отличие от -i:1
, с sgdisk 1.0.1.
Сценарий-чистый способ сделать это, который работает на любой тип файловой системы:
lsblk -no UUID <device-containing-FS>
Или, учитывая точку монтирования (или любой файл внутри нее):
lsblk -no UUID $(df -P <file> | awk 'END{print $1}')
Выходными данными является UUID, весь UUID и ничего кроме UUID.
blkid
в ответе @ christopher-cashell, потому что вам не нужно становиться пользователем root. Для точки монтирования или файла лучше сделать: lsblk -no UUID $(findmnt -n -o SOURCE --target <file>)
.
findmnt -n -o SOURCE --target ~
дает:/dev/mapper/vg_svelte-home[/@home]
lsblk -no UUID $(findmnt -n -o SOURCE --target <file> | cut -d[ -f1)
должен избавиться от подобъема при его наличии.
Самый простой способ сделать это для ext2 / ext3 / ext4:
/sbin/tune2fs -l /dev/sda1
Couldn't find valid filesystem superblock.
Рекомендуемый способ сделать это состоит в том, чтобы сделать
sudo vol_id -u /dev/sda2
Дополнительную информацию об использовании UUID см. В этой статье (из справки по Ubuntu, но она должна работать для любого дистрибутива Linux, использующего UUID).
Как отмечено в комментариях к этому вопросу, vol_id может не оказаться на вашем пути. На Ubuntu он находится в / sbin, так что выше будет работать. По-видимому, для Fedora необходимо
sudo /lib/udev/vol_id -u /dev/sda2
Если в других дистрибутивах есть vol_id в других местах, тогда оставьте комментарий, и я добавлю его в этот ответ.
/sbin/vol_id
на/lib/udev/vol_id
Кажется, это работает для меня:
sudo dumpe2fs /dev/sda1 | grep UUID
Предполагая, что вы хотите 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, а ля:
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, которые по умолчанию находятся в путь для любого пользователя.
Вы также можете использовать это для печати всех 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' \;
ls -l /dev/disk/by-uuid | grep `lsblk | grep "/" | awk '{print $1}'` | awk '{print $9}'
Вышеприведенное, кажется, работает на большинстве (все, что я нашел) систем Linux в течение многих лет. У него могут быть недостатки, я не знаю. Я бы предпочел получить серийный номер, но ... это UUID корневой файловой системы.
Если у кого-то есть способ получить серийный номер без необходимости иметь права root (как у меня) и не устанавливать «необычные» пакеты, которые отличаются в разных версиях Unix, я был бы признателен - всегда может чему-то научиться. И я знаю, что я смешиваю вещи - это UUID корневой файловой системы, а не диск.
Кстати, целью является создание уникального номера для каждой машины, который не может быть изменен (например, серийный номер диска и как MAC-адреса, когда-то давно).
Он используется для кодирования программного обеспечения на одной машине. MAC-адрес был в порядке, пока они не позволили им быть виртуальными ... некоторые неряшливые клиенты просто установили свой MAC-адрес на постоянный (в разных сетях, конечно) и избегали платить мне.
В AIX существует один вызов для получения одного номера, идентифицирующего машину. Это не волнует, происходят ли аппаратные изменения или обновления программного обеспечения, поэтому я понятия не имею, как они это делают ... Если меняется материнская плата, то меняется число, поэтому я думаю, что они скрывают это там. И это за редкость.
Вы можете использовать следующее, чтобы получить UUID для конкретного диска,
sudo vol_id -u /dev/sda1
или вы можете использовать это, чтобы перечислить все UUID для подключенного носителя,
ls /dev/disk/by-uuid