Persistent block device naming (Русский)

Эта статья описывает, как использовать постоянные имена для ваших блочных устройств. Это стало возможным благодаря введению udev и имеет переимущества перед именами, основанными на используемых шинах. Если на вашем компьютере несколько контроллеров дисков SATA, SCSI или IDE, порядок добавления устройств может быть любым. Это может привести к тому, что устройства наподобие /dev/sda и /dev/sdb будут меняться местами при каждой загрузке, что может привести к невозможности загрузки системы, панике ядра или исчезновению блочного устройства. Использование постоянных имён решает подобные проблемы.

Примечание:
  • Постоянные имена имеют ограничения, которые выходят за рамки данной статьи. Например, в то время как mkinitcpio может поддерживать метод, systemd может налагать свои собственные ограничения (например, FS#42884) на имена, которые он может обрабатывать во время загрузки.
  • Эта статья не относится к LVM, так как пути /dev/VolumeGroupName/LogicalVolumeName являются постоянными.
Состояние перевода: На этой странице представлен перевод статьи Persistent block device naming. Дата последней синхронизации: 9 января 2022. Вы можете помочь синхронизировать перевод, если в английской версии произошли изменения.

Методы постоянного именования

Есть четыре схемы создания постоянных имён: by-label, by-uuid, by-id и by-path. Для дисков, использующих таблицу разделов GUID (GPT), также доступны by-partlabel и by-partuuid. Также можно задать #Постоянные имена устройств с использованием udev.

Подкаталоги внутри /dev/disk/ создаются и удаляются автоматически в соответствии с подключенными в данный момент устройствами.

Примечание: Помните, что клонирование диска приведёт к созданию двух разных дисков с одинаковыми именами.

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

Можно использовать команду lsblk для просмотра первых постоянных схем:

Для GPT используйте команду . Она более удобна для скриптов, но читается труднее.

by-label

Почти каждый тип файловой системы позволяет задать метку. Все разделы с метками есть в каталоге /dev/disk/by-label.

$ ls -l /dev/disk/by-label
total 0
lrwxrwxrwx 1 root root 10 May 27 23:31 Data -> ../../sda3
lrwxrwxrwx 1 root root 10 May 27 23:31 Arch\x20Linux -> ../../sda2

Большинство файловых систем поддерживают установку метки при создании файловой системы; смотрите справочные страницы соответствующих утилит . Для некоторых файловых систем также возможно изменение меток. Ниже приведены некоторые методы изменения меток в распространённых файловых системах:

swap 
с помощью
ext2/3/4 
с помощью
btrfs 
btrfs filesystem label /dev/XXX "новая метка" с помощью
reiserfs 
с помощью
jfs 
jfs_tune -L "новая метка" /dev/XXX с помощью
xfs 
с помощью
fat/vfat 
с помощью
с помощью mtools
exfat 
с помощью
с помощью или exfat-utils
ntfs 
с помощью
udf 
с помощью
crypto_LUKS (LUKS2 only) 
с помощью

Узнать метку устройства можно с помощью lsblk:

Или blkid:

# blkid -s LABEL -o value /dev/sda2
Arch Linux

by-uuid

UUID — это механизм присвоения каждой файловой системе уникального идентификатора. Эти идентификаторы генерируются утилитами файловой системы (например, ) при форматировании устройства и разработаны таким образом, что случайные совпадения разных идентификаторов маловероятны. Все файловые системы GNU/Linux (включая подкачку и LUKS-заголовки устройств с шифрованием) поддерживают UUID. Файловые системы FAT, exFAT и NTFS не поддерживают UUID, но отображаются в с более коротким UID (уникальным идентификатором):

Узнать UUID устройства можно с помощью lsblk:

$ lsblk -dno UUID /dev/sda1
CBB6-24F2

Или blkid:

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

Недостатком является то, что UUID затрудняют чтение длинных строк кода и нарушают форматирование во многих файлах конфигурации (например, fstab или crypttab). Кроме того, каждый раз при форматировании создаётся новый UUID, и файлы конфигурации придётся обновлять вручную.

by-id и by-path

создаёт уникальное имя по серийному номеру оборудования,  по кратчайшему физическому пути (согласно sysfs). Оба содержат строки, указывающие, к какой подсистеме они принадлежат (т. е.  для  и  для ), поэтому они связаны с аппаратным обеспечением, управляющим устройством. Это подразумевает разные уровни постоянности:  изменится при подключении устройства к другому порту контроллера,  изменится при подключении устройства к порту аппаратного контроллера, связанного с другой подсистемой.  Таким образом, оба не подходят для достижения постоянного именования, устойчивого к аппаратным изменениям.

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

также создаёт ссылки World Wide Name для устройств, которые его поддерживают. В отличие от других ссылок , WWN полностью постоянны и не изменяются в зависимости от используемой подсистемы.

by-partlabel

Примечание: Этот метод касается только дисков с таблицей разделов GUID (GPT).

GPT позволяет указывать метки для разделов.

Это похоже на метки файловой системы, но метки разделов не изменяются при изменении файловой системы на разделе.

Все разделы, имеющие метки разделов, указаны в каталоге .

Узнать метку раздела можно с помощью lsblk:

Или blkid:

by-partuuid

Каждый раздел в GPT имеет свой UUID, не привязанный к файловой системе.

MBR не поддерживает UUID разделов, но Linux и программы, использующие libblkid (например, udev), способны генерировать псевдо-PARTUUID для разделов MBR. Формат — SSSSSSSS-PP, где — дополненная нулями 32-битная сигнатура диска MBR, а — дополненный нулями номер раздела в шестнадцатеричной форме. В отличие от обычного PARTUUID раздела GPT, псевдо-PARTUUID MBR может измениться при изменении номера раздела.

Динамический каталог аналогичен другим методам и, как в случае с UUID файловой системы, использование UUID разделов предпочтительнее, чем меток.

Узнать UUID раздела можно с помощью lsblk:

Или blkid:

# blkid -s PARTUUID -o value /dev/sda1
d0d0d110-0a71-4ed6-936a-304969ea36af

Постоянные имена устройств с использованием udev

Смотрите udev (Русский)#Установка постоянных имен устройств.

Использование постоянных имён

Существуют различные приложения, которые можно настроить с использованием постоянных имён. Ниже приведены некоторые примеры их настройки.

fstab

Смотрите fstab (Русский)#Определение файловой системы.

Параметры ядра

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

Расположение корневой файловой системы задаётся параметром в командной строке ядра. Командная строка ядра настраивается из загрузчика, смотрите Параметры ядра#Настройка. Чтобы перейти к использованию постоянных имён устройств, измените те параметры, которые определяют блочные устройства, например и resume, оставив остальные параметры как есть. Поддерживаются различные схемы именования:

C использованием метки и формата , в этом примере — это метка корневой файловой системы.

root="LABEL=Arch Linux"

С использованием UUID и формата , в этом примере — это UUID корневой файловой системы.

root=UUID=0a3407de-014b-458b-b5c1-848e92a327a3

С использованием id диска и пути в , в данном примере — это id корневого раздела.

root=/dev/disk/by-id/wwn-0x60015ee0000b237f-part2

С использованием UUID разделов GPT и формата , в данном примере — это PARTUUID корневого раздела.

root=PARTUUID=98a81274-10f7-40db-872a-03df048df366

С использованием меток разделов GPT и формата PARTLABEL=, в данном примере — это метка корневого раздела.

root="PARTLABEL=GNU/Linux"
This article is issued from Archlinux. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.