UUID (Universally Unique Identifier) — это стандарт идентификации, используемый в создании программного обеспечения, стандартизированный Open Software Foundation как часть распределенного компьютерного окружения. Основное назначение UUIDs — это позволить распределенным системам уникально идентифицировать информацию без центра координации.
Contents
Для просмотра вновь созданных и пока не включенных в fstab (скажем, sda6 или sdb7) разделов, или любых других доступных для монтирования разделов жесткого диска выполните как обычный пользователь в консоли:
ls -l /dev/disk/by-uuid
Вывод команды будет похож на приведенный ниже (выделение толстым шрифтом исключительно для примера):
lrwxrwxrwx 1 root root 10 2007-05-27 23:42 348ea9e6-7879-4332-8d7a-915507574a80 -> ../../sda4 lrwxrwxrwx 1 root root 10 2007-05-27 23:42 610aaaeb-a65e-4269-9714-b26a1388a106 -> ../../sda2 lrwxrwxrwx 1 root root 10 2007-05-27 23:42 857c5e63-c9be-4080-b4c2-72d606435051 -> ../../sda5 lrwxrwxrwx 1 root root 10 2007-05-27 23:42 a83b8ede-a9df-4df6-bfc7-02b8b7a5f1f2 -> ../../sda1 lrwxrwxrwx 1 root root 10 2007-05-27 23:42 ad662d33-6934-459c-a128-bdf0393e0f44 -> ../../sda6
В этом примере строка, содержащая ad662d33-6934-459c-a128-bdf0393e0f44 отсутствует в fstab. Следующим шагом станет добавление соответствующей данному UUID строки в файл /etc/fstab. Для этого подойдет любой текстовый редактор (такой как kate или kwrite), запущенный от имени суперпользователя root:
# <device file system> <mount point> <type> <options> <dump> <pass> UUID=ad662d33-6934-459c-a128-bdf0393e0f44 /media/sda6 ext3 auto,users,exec 0 2
Замечание: Не забудьте создать папки, указанные в fstab.
Обзор: UUID, метка раздела и fstab
Длинные имена (persistent naming) в обозначении блочных устройств стали возможным с появлением udev и предоставляют несколько преимуществ по сравнению с наименованиями на базе Bus. В дальнейшем подразумевая этот способ обозначения мы будем использовать термин "длинное наименование".
Развитие Linux дистрибутивов и udev сделало более надежным опознавание аппаратных средств, но одновременно с этим поставило необходимость решения ряда новых вопросов:
- Порядок подключения при наличии более чем одного контроллера SATA/SCSI или простых контроллеров IDE становится случайным. Как следствие имена одного и того же устройств вида hdx/hdy или sdx/sdy случайно чередуются после каждой загрузки.Использование "длинных наименований" позволяет больше не беспокоиться об этом.
- С внедрением новой библиотеки libata и поддержкой PATA все блочные устройства, до сих пор именовавшиеся как hdx, в будущем будут называться sdX. Использование "длинных наименований" и в этом случае избавляет пользователя от беспокойства.
- Ныне широко распространено одновременное использование контроллеров SATA-и IDE типа. Благодаря использованию libata в этом случае все жесткие диски, независимо от типа контроллера, получают имена вида sdX .
По вышеназванным причинам по умолчанию Debian использует UUID в/etc/fstab.
Существуют и другие причины. Но перечисленные - наиболее критичны как в настоящий момент , так и в ближайшем будущем. Поэтому Debian рекомендует использование схемы наименования блочных устройств с длинными именами.
схемы для "длинных наименований"
Посредством UUID
UUID (сокращение от "Universally Unique Identifier") является механизмом присвоения уникальных обозначений различным устройствам. Уникальность каждого конкретного обозначения обусловлена крайне низкой вероятностью коллизий(совпадения имен). Все файловые системы Linux включая swap, поддерживают UUID. Хотя FAT-и файловая система NTFS не поддерживают UUID, для них также возможно создание уникального обозначения в стиле "uuid":
$ /bin/ls -lF /dev/disk/by-uuid/
total 0 lrwxrwxrwx 1 root root 10 Oct 16 10:27 2d781b26-0285-421a-b9d0-d4a0d3b55680 -> ../../sda1 lrwxrwxrwx 1 root root 10 Oct 16 10:27 31f8eb0d-612b-4805-835e-0e6d8b8c5591 -> ../../sda7 lrwxrwxrwx 1 root root 10 Oct 16 10:27 3FC2-3DDB -> ../../sda6 lrwxrwxrwx 1 root root 10 Oct 16 10:27 5090093f-e023-4a93-b2b6-8a9568dd23dc -> ../../sda2 lrwxrwxrwx 1 root root 10 Oct 16 10:27 912c7844-5430-4eea-b55c-e23f8959a8ee -> ../../sda5 lrwxrwxrwx 1 root root 10 Oct 16 10:27 B0DC1977DC193954 -> ../../sdb1 lrwxrwxrwx 1 root root 10 Oct 16 10:27 bae98338-ec29-4beb-aacf-107e44599b2e -> ../../sdb2
Как видите, разделы с fat и ntfs имеют короткие имена (sda6 and sdb1), но всё равно показаны в uuid.
Посредством МЕТКИ (LABEL)
Практически каждый тип файловой системы может иметь метку. Разделы с меткой находят в каталоге /dev/disk/by-label:
$ ls -lF /dev/disk/by-label
total 0 lrwxrwxrwx 1 root root 10 Oct 16 10:27 data -> ../../sdb2 lrwxrwxrwx 1 root root 10 Oct 16 10:27 data2 -> ../../sda2 lrwxrwxrwx 1 root root 10 Oct 16 10:27 fat -> ../../sda6 lrwxrwxrwx 1 root root 10 Oct 16 10:27 home -> ../../sda7 lrwxrwxrwx 1 root root 10 Oct 16 10:27 root -> ../../sda1 lrwxrwxrwx 1 root root 10 Oct 16 10:27 swap -> ../../sda5 lrwxrwxrwx 1 root root 10 Oct 16 10:27 windows -> ../../sdb1
Так как в качестве меток используются повторяющиеся имена, вам надо быть предельно внимательным, чтобы избежать путаницы.
Обозначение метки может изменяться следующими командами:
* swap: mkswap -L <label> /dev/XXX * ext2/ext3: e2label /dev/XXX <label> * reiserfs: reiserfstune -l <label> /dev/XXX * jfs: jfs_tune -L <label> /dev/XXX * xfs: xfs_admin -L <label> /dev/XXX * fat/vfat: хотя изменение метки FAT раздела под Linux невозможно, но создание метки допустимо при создании файловой системы: mkdosfs -n <label> <дальнейшие опции>. Изменение метки FAT разделов может быть проведено в Windows. * ntfs: ntfslabel /dev/XXX <label> изменение метки в Windows.
ВНИМАНИЕ: Чтобы не возникло проблем, метки должны иметь уникальное обозначение. Это относится и к внешним устройствам (жесткие диски, Sticks, и т.д.), которые включаются через USB или FIrewire. Синтаксис LABEL =/UUID = для разделов UN*X предпочтительнее, чем /dev/disk/by-*/.
Посредством ID
Метод by-id создает единственное обозначение на основе серийного номера аппаратных средств.
Посредством Path
by-path создает единственное обозначение на основе самого короткого физического пути (по sysfs).
Оба вышеупомянутых метода содержат строки символов, которые снимают показания, к какой подсистеме они принадлежат, и таким образом не подходят, для решения выше упомянутых проблем и здесь в дальнейшем не обсуждаются.
Использование длинных наименований
Здесь пример включения длинных наименований в fstab.
В fstab
Включение в /etc/fstab достаточно просто. Имя устройства в первом столбце заменяется на длинное наименование. В нашем примере /dev/sda7 заменяется одним из двух вариантов:
/dev/disk/by-label/home или /dev/disk/by-uuid/31f8eb0d-612b-4805-835e-0e6d8b8c5591
Тоже самое повторяется для всех разделов в fstab.
Вместо использования непосредственно длинного имени, для обозначения подключаемого накопителя, можно использовать его UUID или метку: LABEL=<label> или UUID=<uuid>. Например:
LABEL=Boot
или
UUID=3e6be9de-8139-11d1-9106-a43f08d823a6
Использование длинных имен в менеджере загрузки
Чтобы использовать длинные наименования в диспетчере начальной загрузки необходимы следующие шаги:
- Использование mkinitcpio initramfs image
- Udev активирован в: /etc/mkinitcpio.conf
- при создании initramfs image необходимо использовать klibc-udev версии 101-3 или выше (persistent naming является в предыдущих версиях не дееспособным). Если klibc-udev обновлен на новую версию и желательно использование длинных наименований, то генерация initramfs-image осуществляется до перезагрузки.
В вышеупомянутом примере /dev/sda1 является root разделом. Замена строка ядра в файле /boot/grub/menu.lst выглядит (в зависимости от выбора схем наименования) следующим образом:
kernel /boot/vmlinuz26 root=/dev/sda1 vga=0x318 ro
модифицирована в
kernel /boot/vmlinuz26 root=/dev/disk/by-label/root vga=0x318 ro
или
kernel /boot/vmlinuz26 root=/dev/disk/by-uuid/2d781b26-0285-421a-b9d0-d4a0d3b55680 vga=0x318 ro
Альтернативный метод такой: присвоить метку файловой системе. Если, например, файловая система /dev/sda1 имеет метку (Label) "root", то строка ядра в /boot/grub/menu.lst выглядела бы следующим образом:
kernel /boot/vmlinuz26 root=LABEL=root vga=0x318 ro
