Fstab
UUID
Постоянные именования (persistent naming) в обозначении блочных устройств стали возможным с появлением udev и предоставляют несколько преимуществ по сравнению с наименованиями на базе Bus таких как /dev/hda1 или /dev/sda2.
Развитие Linux дистрибутивов и udev сделало более надежным опознавание аппаратных средств, но одновременно с этим поставило необходимость решения ряда новых вопросов:
Порядок подключения при наличии более чем одного контроллера SATA/SCSI или простых контроллеров IDE становится случайным. Как следствие имена одного и того же устройств вида hdx/hdy или sdx/sdy случайно чередуются после каждой загрузки.Использование постоянных именований позволяет больше не беспокоиться об этом. Для машин с контролёрами IDE (включая, например, машины со всеми жёсткими дисками SATA и только одним IDE cdrom), переход на стандартное ядро Squeeze может вызвать проблемы: с введением поддержки новой libata PATA, устройство IDE hdX станет устройством sdX. Опять же, если используется постоянное именование, этого даже не будет заметно. (postinst для пакета linux-base содержит код помогающий с переходом, но сначала имеет смысл получить представление и заранее понять как это работает.) На больших машинах, с большим количеством CPU и Fiber Channel Host Bus Adapters, FC коммутаторами с переменной нагрузкой/задержкой, контролёрами SCSI, и/или высокопроизводительными сетевыми картами, могут возникнуть проблемы с синхронизацией при работе с udev и многолучевым I/O, из за почти непредсказуемого порядка определения устройств и автоматического назначения имен в процессе загрузки. Существуют и другие причины. Но перечисленные - наиболее важны как в настоящий время, так и в ближайшем будущем. Поэтому Debian рекомендует использование схемы наименования блочных устройств с постоянными именами.
Схемы для постоянных наименований
Посредством UUIDs UUID является механизмом присвоения уникальных обозначений каждой файловой системе. Все файловые системы Linux включая swap, поддерживают UUID; файловые системы FAT и NTFS не поддерживают верный UUID, но перечислены в /dev/disk/by-uuid с уникальным идентификатором:
$ ls -l /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 и NTSF имеют короткие имена (sda6 и sdb1), но всё равно показаны в uuid. Смысл 32-х разрядных base-62 строк состоит в том, чтобы сделать вероятность совпадения идентификаторов ничтожно малой; если всё случается, что sda1 и sda2 имеют одинаковый UUID система может не загрузиться (или использовать последний найденный идентификатор как основной).
Посредством Меток (Labels)
Практически каждый тип файловой системы может иметь метку. Разделы с меткой находят в каталоге /dev/disk/by-label:
$ ls -l /dev/disk/by-label 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
Так как в качестве меток используются повторяющиеся имена, нужно быть предельно внимательным, чтобы избежать путаницы; также учитывать тот факт, что при перезагрузке устройства USB/firewire подключены могут быть по-разному.
Обозначение метки может изменяться следующими командами:
Type | Command | Notes |
EXT3: | e2label /dev/XXX <label> | также верно и для EXT2/EXT4 |
FAT/VFAT: | dosfslabel /dev/XXX <label> | bug #506786 в Lenny; или mlabelв утилитах mtools |
JFS: | jfs_tune -L <label> /dev/XXX | |
NTFS: | ntfslabel /dev/XXX <label> | или изменить из-под Windows |
ReiserFS: | reiserfstune -l <label> /dev/XXX | |
swap: | mkswap -L <label> /dev/XXX | также см. ниже для swapoff /swaponкоманд |
XFS: | xfs_admin -L <label> /dev/XXX |
Посредством Hardware ID
by-id создает уникальное имя на основе апаратного серийного номера. Они предназначены чтобы быть неизменными для данной аппаратной конфигурации.
# ls -l /dev/disk/by-id/ итого 0 drwxr-xr-x 2 root root 440 фев 1 17:19 . drwxr-xr-x 5 root root 100 ноя 24 20:22 .. lrwxrwxrwx 1 root root 9 фев 1 17:19 ata-SAMSUNG_HD204UI_S2H7J9FZC03394 -> ../../sdb lrwxrwxrwx 1 root root 10 фев 1 17:19 ata-SAMSUNG_HD204UI_S2H7J9FZC03394-part1 -> ../../sdb1 lrwxrwxrwx 1 root root 16 ноя 21 01:17 cciss-3600508b10010463956563832464f0003 -> ../../cciss/c0d1 lrwxrwxrwx 1 root root 18 фев 1 17:14 cciss-3600508b10010463956563832464f0003-part1 -> ../../cciss/c0d1p1 lrwxrwxrwx 1 root root 18 ноя 21 01:17 cciss-3600508b10010463956563832464f0003-part2 -> ../../cciss/c0d1p2 lrwxrwxrwx 1 root root 18 ноя 21 01:17 cciss-3600508b10010463956563832464f0003-part5 -> ../../cciss/c0d1p5 lrwxrwxrwx 1 root root 16 дек 20 03:44 cciss-3600508b10010463956563832464f0005 -> ../../cciss/c0d0 lrwxrwxrwx 1 root root 18 ноя 21 01:17 cciss-3600508b10010463956563832464f0005-part1 -> ../../cciss/c0d0p1 lrwxrwxrwx 1 root root 18 ноя 21 01:17 cciss-3600508b10010463956563832464f0005-part2 -> ../../cciss/c0d0p2 lrwxrwxrwx 1 root root 18 ноя 21 01:17 cciss-3600508b10010463956563832464f0005-part5 -> ../../cciss/c0d0p5 lrwxrwxrwx 1 root root 9 фев 1 17:19 wwn-0x50024e9203f46cb7 -> ../../sdb lrwxrwxrwx 1 root root 10 фев 1 17:19 wwn-0x50024e9203f46cb7-part1 -> ../../sdb1 lrwxrwxrwx 1 root root 16 ноя 21 01:17 wwn-0x600508b10010463956563832464f0003 -> ../../cciss/c0d1 lrwxrwxrwx 1 root root 18 фев 1 17:14 wwn-0x600508b10010463956563832464f0003-part1 -> ../../cciss/c0d1p1 lrwxrwxrwx 1 root root 18 ноя 21 01:17 wwn-0x600508b10010463956563832464f0003-part2 -> ../../cciss/c0d1p2 lrwxrwxrwx 1 root root 18 ноя 21 01:17 wwn-0x600508b10010463956563832464f0003-part5 -> ../../cciss/c0d1p5 lrwxrwxrwx 1 root root 16 дек 20 03:44 wwn-0x600508b10010463956563832464f0005 -> ../../cciss/c0d0 lrwxrwxrwx 1 root root 18 ноя 21 01:17 wwn-0x600508b10010463956563832464f0005-part1 -> ../../cciss/c0d0p1 lrwxrwxrwx 1 root root 18 ноя 21 01:17 wwn-0x600508b10010463956563832464f0005-part2 -> ../../cciss/c0d0p2 lrwxrwxrwx 1 root root 18 ноя 21 01:17 wwn-0x600508b10010463956563832464f0005-part5 -> ../../cciss/c0d0p5
Посредством sysfs Paths
by-path создает единственное обозначение на основе самого короткого физического пути (по sysfs). Оба вышеупомянутых метода содержат строки символов, которые снимают показания, к какой подсистеме они принадлежат, и таким образом не подходят, для решения выше упомянутых проблем и здесь в дальнейшем не обсуждаются.
Подготовка для постоянных именований
Для просмотра вновь созданных, или любых других доступных для монтирования разделов жесткого диска выполните:
$ ls -lR /dev/disk
также есть более удобная команда blkid (которая находится в /sbin, но не требует привилегий root) дающая более удобный вывод:
$ /sbin/blkid /dev/sda1: LABEL=Root UUID="87f2b245-6ab3-4021-bf07-d069b4d387a1" TYPE="ext3" /dev/sda2: TYPE="swap" /dev/sda3: LABEL=Home UUID="a6f7a63f-71ac-4361-b49a-39d62b06f18a" TYPE="ext3"
Как видно, раздел swap здесь не имеет UUID или label; инсталлер Debian Lenny использует версию partman которая не делает раздел swap. Тем не менее, разделу подкачки может быть дано "постоянное имя" через mkswap.
Назначение постоянных имен для раздела Swap Сначала, необходимо чётко убедиться в том, что раздел подкачки определён верно (см. /proc/swaps)! Затем (от имени суперпользователя - root) отмонтировать существующий раздел подкачки, пересоздать его (тут можно добавить также и метку), и вновь примонтировать/запустить, примерно таким образом:
# swapoff /dev/sda2 # mkswap -L Swap /dev/sda2 Setting up swapspace version 1, size = 1998737 kB LABEL=Swap, UUID=7cdfeb21-613b-4588-abb5-9d4049854e9a # swapon /dev/sda2 Результат можно проверить от имени обычного пользователя: $ /sbin/blkid /dev/sda1: LABEL=Root UUID="87f2b245-6ab3-4021-bf07-d069b4d387a1" TYPE="ext3" /dev/sda2: LABEL=Swap UUID="7cdfeb21-613b-4588-abb5-9d4049854e9a" TYPE="swap" /dev/sda3: LABEL=Home UUID="a6f7a63f-71ac-4361-b49a-39d62b06f18a" TYPE="ext3" $ free total used free shared buffers cached Mem: 33017956 298700 32719256 0 17060 148668 -/+ buffers/cache: 132972 32884984 Swap: 1951888 0 1951888
Использование постоянных именований
Выбрав-таки наиболее удобный способ именования устройств, можно приступить к использованию постоянных именований в системе:
В fstab Включение постоянных имён в /etc/fstab легко: для каждой файловой системы в файле fstab нужно заменить имя устройства в первом столбце (где указано что-то вроде /dev/sda7) на постоянное имя. Это делается путём замены соответствующих путей в /dev/disk, примерно так:
/dev/disk/by-label/home
или
/dev/disk/by-uuid/31f8eb0d-612b-4805-835e-0e6d8b8c5591
Тем не менее, вместо задания явных путей в /dev/disk, обычно рекомендуется использовать ключевые слова LABEL=<label> или UUID=<uuid> для монтирования файловых систем, например:
LABEL=home
или
UUID=31f8eb0d-612b-4805-835e-0e6d8b8c5591