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

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

$ 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

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

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

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

Или blkid:

by-uuid

UUID — это механизм присвоения каждой файловой системе уникального идентификатора. Эти идентификаторы генерируются утилитами файловой системы (например, mkfs.*) при форматировании устройства и разработаны таким образом, что случайные совпадения разных идентификаторов маловероятны. Все файловые системы 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

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

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

также создаёт ссылки World Wide Name для устройств, которые его поддерживают. В отличие от других ссылок , WWN полностью постоянны и не изменяются в зависимости от используемой подсистемы.
$ ls -l /dev/disk/by-path/
total 0
lrwxrwxrwx 1 root root 10 May 27 23:31 pci-0000:00:1f.2-ata-1 -> ../../sda
lrwxrwxrwx 1 root root 10 May 27 23:31 pci-0000:00:1f.2-ata-1-part1 -> ../../sda1
lrwxrwxrwx 1 root root 10 May 27 23:31 pci-0000:00:1f.2-ata-1-part2 -> ../../sda2
lrwxrwxrwx 1 root root 10 May 27 23:31 pci-0000:00:1f.2-ata-1-part3 -> ../../sda3
lrwxrwxrwx 1 root root 10 May 27 23:31 pci-0000:00:1f.2-ata-1-part4 -> ../../sda4
lrwxrwxrwx 1 root root 10 May 27 23:31 pci-0000:07:00.0-platform-rtsx_pci_sdmmc.0 -> ../../mmcblk0
lrwxrwxrwx 1 root root 10 May 27 23:31 pci-0000:07:00.0-platform-rtsx_pci_sdmmc.0-part1 -> ../../mmcblk0p1

by-partlabel

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

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

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

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

Или blkid:

by-partuuid

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

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

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

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

$ lsblk -dno PARTUUID /dev/sda1
d0d0d110-0a71-4ed6-936a-304969ea36af

Или blkid:

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

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

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

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

fstab

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

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

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

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

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

root="LABEL=Arch Linux"

С использованием UUID и формата , в этом примере 0a3407de-014b-458b-b5c1-848e92a327a3 — это 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 и формата , в данном примере — это метка корневого раздела.

root="PARTLABEL=GNU/Linux"
gollark: This is the annoying question, photographed very blurrily.
gollark: Well, I found something alternate-segmenty, good enough.
gollark: The alternate segment theorem?
gollark: Contingency -44-B.
gollark: yes.
This article is issued from Archlinux. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.