Во времена, когда PATA IDE был единственным доступным стандартом для бытовых компьютеров (SCSI я не беру в расчёт), не возникало проблем с именованием дисковых устройств и разделов. Когда стандарт SATA IDE пошёл в массы, возникли проблемы с порядком именования устройств. Суть вот в чём: при включении компьютера, ядро опрашивает всё оборудование компьютера и создаёт им файлы в /dev . С шиной PATA проблем нет - имена устройствам даются в строгом соответствии с разъёмом контроллёра и перемычками на диске (primary-secondary\master-slave), но вот с SATA можно наткнуться на изменение порядка именования, если в компьютере работает больше одного SATA-диска. Независимо от того, в какой разъём включен жёсткий диск на материнской плате (sata1, sata2 и тд), порядок именования будет проходить по мере опроса, а он не зависит от номера разъёма. Так если, диск включённый в sata1 может обзываться как sda1 и как sda2, если дисков 2 и больше. Для решения этой проблемы именования, можно использовать **UUID** (Universally Unique Identifier) - это стандарт идентификации для физических или псевдо- устройств, используемый в создании программного обеспечения. Задача, которую решает стандарт - это присвоить и использовать уникальный идентификатор для устройства\диска\раздела. Таким образом, отказавшись от стандартных имён SATA устройств в linux, и используя UUID, можно решить проблему с монтированием устройств и разделов. ===== Задача ===== **Дано:** компьютер с установленной ОС Linux, 3 SATA жёстких диска, один из которых съёмный. disk1 и disk2 - не съёмные, disk3 - съёмный. Описание системы: система устанавливалась когда к компьютеру были подключены 2 диска: disk1 и disk2. Корневая система находится на disk1 и каталоги с disk2 монтируются к ней. disk3 иногда отключается пользователем от компьютера для переноса информации. Каталоги этого диска также монтируются к корневой системе.\\ **Проблема:** когда в системе работают только disk1 и disk2, имена распределяются так: disk1 = /dev/sda и disk2 = /dev/sdb . После подключения третьего диска, имена меняются: disk1 = /dev/sda , disk2 = /dev/sdс , disk3 = /dev/sdb . Соответственно, при загрузке, система не находит каталоги в disk2 и переходит в однопользовательский режим. Приходится каждый раз редактировать записи для disk2 и disk3 в /etc/fstab , что совсем не удобно.\\ **Задача:** обеспечить монтирование disk1 и disk2 независимо от disk3.\\ **Уровень пользователя:** средний, знающий команды монтирования и умеющий работать в одном из текстовых редакторов: vi, nano, mcedit, emacs\\ **Решение:**\\ Примерный план работы: - Загрузиться в нормальном режиме, когда disk1 и disk2 работают в системе. - Выяснить UUID разделов дисков. - Модифицировать /etc/fstab - Перезагрузиться с новыми параметрами в /etc/fstab - Повторить пункты с 2-4 только для диска disk3. **Процесс:**\\ Необходимо загрузиться в нормальном режиме, когда disk1 и disk2 работают в системе. Выясняем какие разделы присутствуют в системе: # fdisk -l Disk /dev/sda: 250.1 GB, 250059350016 bytes 255 heads, 63 sectors/track, 30401 cylinders, total 488397168 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x000b5f01 Device Boot Start End Blocks Id System /dev/sda1 * 63 979964 489951 83 Linux /dev/sda2 489952 738928 248976 82 Linux swap / Solaris /dev/sda3 738929 488392064 487653135 5 Extended /dev/sda6 738930 488392064 487653134 83 Linux Disk /dev/sdb: 640.1 GB, 640135028736 bytes 81 heads, 63 sectors/track, 245005 cylinders, total 1250263728 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0xc65c2ceb Device Boot Start End Blocks Id System /dev/sdb1 2048 1250263727 625130840 83 Linux disk1 разбит на 3 раздела: * sda1 - /boot * sda2 - swap * sda6 - / disk2 и disk3 (не показан) имеют по одному разделу.\\ Смотрим куда что монтируется /etc/fstab $ cat /etc/fstab # # /etc/fstab: static file system information # # devpts /dev/pts devpts defaults 0 0 shm /dev/shm tmpfs nodev,nosuid 0 0 /dev/cdrom /cdrom auto ro,user=user,noauto,unhide 0 0 /dev/sda1 /boot ext3 defaults 0 1 /dev/sda2 swap swap defaults 0 0 /dev/sda6 /boot ext3 defaults 0 1 # 650Gb disk /dev/sdb1 /disk2 ext3 defaults 0 1 # Removable # /dev/sdc1 /disk3 ext3 defaults 0 1 Обратите внимание, что строка с sdс1 помечена ремаркой и не обрабатывается. С ним будем работать после всех настроек. Теперь делаем листинг директории, где система создаёт UUID имена и сохраняем его: $ ls -l /dev/disk/by-uuid/ total 0 lrwxrwxrwx 1 root root 10 Apr 11 11:42 484b1cbb-5a3d-4a54-841b-424da3254db6 -> ../../sda1 lrwxrwxrwx 1 root root 10 Apr 11 11:42 d14021bb-912e-4801-b6a8-874c41b8225c -> ../../sda2 lrwxrwxrwx 1 root root 10 Apr 11 11:42 dedd9b49-5410-4c72-a018-f8293311c28e -> ../../sda6 lrwxrwxrwx 1 root root 10 Apr 11 11:42 182ecbac-dd36-4113-b019-58f181c755a5 -> ../../sdb1 Для сохранения вывода команды в файл, можно попробовать: $ ls -l /dev/disk/by-uuid/ | /home/username/имя_файла.txt Если работа производится в графической среде, можно просто скопипастить непосредственно в редактор. Делаем резервную копию файла /etc/fstab на случай, если UUID будет неправильно введён и система не сможет загрузиться. # cd /etc # cp fstab fsab.bak Кстати, не помешает и какой-нибудь liveCD с Linux`ом "на борту" на всякий аварийных случай. Редактируем сам файл /etc/fstab и вместо sda1, sda2,... sdb1 подставляем UUID раздела. Должно получиться что-то типа: $ cat /etc/fstab # # /etc/fstab: static file system information # # devpts /dev/pts devpts defaults 0 0 shm /dev/shm tmpfs nodev,nosuid 0 0 /dev/cdrom /cdrom auto ro,user=user,noauto,unhide 0 0 UUID=484b1cbb-5a3d-4a54-841b-424da3254db6 /boot ext3 defaults 0 1 UUID=d14021bb-912e-4801-b6a8-874c41b8225c swap swap defaults 0 0 UUID=dedd9b49-5410-4c72-a018-f8293311c28e /boot ext3 defaults 0 1 # 650Gb disk UUID=182ecbac-dd36-4113-b019-58f181c755a5 /disk2 ext3 defaults 0 1 # Removable # /dev/sdc1 /disk3 ext3 defaults 0 1 Если в Вашей системе не оказалось каталога **/dev/disk/by-uuid/** , можно воспользоваться утилитой **blkid** для выяснения UUID: # blkid /dev/sda1 /dev/sda1: UUID="484b1cbb-5a3d-4a54-841b-424da3254db6" TYPE="ext3" Нужно будет получить номер для каждого монтируемого раздела.\\ **Внимание!**\\ В файле **/etc/fstab** , в самом конце всегда нужно оставлять пустую строку, иначе система не сможет корректно распознать записи и загрузиться! Когда fstab отредактирован, для проверки, пробуем отмонтировать disk2 и снова примонтировать: # umount /disk2 # mount /disk2 //Примечание:// предполагается, что ресурсы на disk2 не заблокированы каким-либо процессом, иначе система не сможет отмонтировать disk2. Если всё прошло удачно, перезагружаем машину. Если загрузка прошла удачно, можно выключить компьютер, подключить disk3, выяснить его UUID и модифицировать строку fstab, касающуюся монтирования disk3. ===== Смотрите также ===== * [[http://www.nixzeya.ru.net/forum/index.php?topic=92.0|Обсуждение статьи на форуме]] * [[Монтирование устройств и файловых систем в nix]]