6

Может кто-нибудь сказать мне, что стоит за соглашением об именовании hdX и sdX для жестких дисков под Linux? Я понимаю, что это "конвенция", но что это значит? Это означает, например, что диск SCSI должен называться sdX, или он не будет работать?

Фоном является то, что я слоняюсь с пользовательской ОС на базе Linux и VMware, и поэтому я могу называть диски как я хочу. Я знаю, что соглашение хорошо для пользователей, мне просто интересно, требуется ли оно ядру.

3 ответа3

6

Ядро работает с двумя типами дисков:

  • Диски IDE, такие как старые жесткие диски и многие приводы CD/DVD - они используют имя hd $ x
  • Диски SCSI - они используют имя sd $ x

Все диски SATA, SAS и USB используют подсистему SCSI, поскольку у нее есть определенные преимущества, которых нет у более старых драйверов IDE. Таким образом, эти устройства контроллера выглядят как хост-компьютер как контроллеры SCSI, содержащие устройства SCSI.

Для дисков IDE соглашение об именах довольно жесткое:

  • хда мастер диск на первой шине
  • hdb - это ведомый диск на первой шине
  • Хде мастер диск на третьей шине

...и так далее. (И да, возможно иметь более двух автобусов IDE.) Поэтому, когда у вас есть привод CD или DVD на шине IDE, нередко можно увидеть, как эти приводы подвешены на второй шине IDE (потому что так было всегда - но это другое обсуждение). Так что вполне возможно иметь HDC без HDA и HDB.

Это важно знать, потому что подсистема SCSI отличается. Диски помечены в том порядке, в котором они были обнаружены.

Скажем, у вас была старая шина SCSI, и вы повесили диски с ID SCSI 0, 3 и 5. Эти диски будут определены как sda, sdb и sdc соответственно.

Теперь предположим, что вы купили четвертый диск, и по причинам, известным только вам, вы назначаете его для SCSI ID 4. Этот новый диск теперь определяется как sdc, тогда как ранее существующий диск с SCSI ID 5 теперь является sdd. Это может вызвать все виды веселья, если вы ссылаетесь на разделы с абсолютным именем - после загрузки с вставленным новым диском /dev /sdc1 уже не то, что было раньше, вы имеете в виду /dev /sdd1 сейчас.

Это одна из причин, почему RedHat (и другим) нравится функциональность e2label, где вы назначаете уникальную метку разделу и монтируете ее, ссылаясь на нее.

Я не знаю, почему Linux был построен так. Операционные системы старых версий, такие как Solaris, заставляют вас обращаться к диску по адресу SCSI - например, /dev /dsk /c0t0d0s0 (контроллер 0, целевой (или ID) 0, диск 0 (устаревший, не спрашивайте), фрагмент (или раздел) 0) будет абсолютным, независимо от того, какие другие диски находятся на шине. Такая же проблема возникает, если вы вставляете новый scsi-контроллер, вводящий новый идентификатор шины, но это относительно редко, и большинство компьютеров знают, что предпочитают свои внутренние контроллеры добавленным позже. Способ Linux может быть проще - вам не нужно знать или заботиться о вашей информации контроллера / идентификатора. Вы просто знаете, что это первый или второй диск. И для большинства пользователей это действительно так, у вас есть только пара дисков, с которыми вам приходится иметь дело, поэтому вам не важно, как он называется, пока вы можете его найти.

Номера разделов - это нечто другое. Стандартная таблица разделов MS (DOS), используемая на ПК, содержит четыре основных раздела. Не больше, не меньше. Они могут иметь длину 0, и нет необходимости начинать с определения раздела 1. Вы можете начать с раздела 3, если хотите. Я не думаю, что они даже должны быть смежными на диске - вы можете определить раздел 3, чтобы начать с блока 0, и раздел 1, чтобы начать где-то после этого. Большинство инструментов Linux для создания разделов будут писать таблицы разделов, начиная с раздела 1 и т.д. Большинство ядер Linux будут рассматривать раздел 0 длины как пустой или несуществующий раздел и не будут объявлять о его существовании.

Если вам нужно больше разделов, вы должны пометить один из вас как основной контейнер для "расширенных" разделов. Затем вы можете разделить это на столько расширенных разделов, сколько захотите (с учетом некоторого ограничения, которого я не знаю, в верхней части моей головы). Разница в том, что расширенные разделы всегда перечисляются ядром, начиная с раздела № 5. Поэтому, если у вас есть диск hda с двумя основными разделами и двумя расширенными разделами (по любой причине), они будут перечислены как hda1, hda2, hda5 и hda6. Раздел 3 будет помечен как содержащий расширенные разделы и не будет перечисляться.

Так что много слов, чтобы объяснить названия устройств. Это действительно просто для того, чтобы сообщить вам, что устройство является IDE или SCSI-контролируемым устройством, и дать вам некоторое представление о том, как устройство разделено.

Если бы не было веской причины поступить иначе, я бы не стал с ними связываться. Их изменение только позже запутает пользователей, которые думают, что знают, что делают.

2

AFAIK Все, что требуется ядру, это то, что у устройства есть правильные старшие и младшие номера устройств.

До тех пор, пока основные и второстепенные номера устройств были правильными, то, что называется /dev /sda3, НЕ могло бы быть третьим разделом первого устройства SCSI в цепочке (или чем-то еще); вместо этого это может быть N-й раздел 2-го диска IDE.

Обратите внимание, что некоторые вспомогательные вспомогательные программы могут или не могут обрабатывать нестандартные имена разработчиков. У каждого программиста есть свое представление о том, что делает разумную "проверку здравомыслия".

1

Диски IDE имеют префикс hd, а диски SCSI, SATA и SAS - sd.

например:

Первый раздел на первом диске SCSI:

/dev/sda1

третий раздел на третьем диске IDE:

/dev/hdc3

эти префиксы определяются Linux в порядке их подключения. Соглашение об именах устройств нельзя изменить, хотя вы можете изменить имена, которые они обозначают как (метку), используя e2label:

e2label /dev/sdb1 /Docs

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .