Как вы меняете /dev/sda с/dev/sdb?

Мальчик, это так. а. тривиальный. вопрос, и все же никто, кажется, не может ответить на него правильно.

Как вы меняете /dev/sda с/dev/sdb?

Кто-то может предложить использовать постоянную маркировку (например./Dev/disk/by- *), но, несмотря на лучшие намерения, это НЕ отвечает на вопрос. Да, постоянные рассылки работают там, где вы можете их использовать, но если программа жестко запрограммирована для использования, например. /dev/sda, этот вопрос сохраняется.

Чтобы проиллюстрировать проблему дальше от того, что я нашел в Интернете: http://ubuntuforums.org/showthread.php?t=1569238&page=2 (Напоминает мне о "Schadenfreude")

Этот парень, похоже, нашел решение, просто не поделился им (boo!): Http://ubuntuforums.org/showthread.php?t=944515

И tbh, у меня есть потенциальная подобная опасность. Я использую CloneZilla, и если программа спрашивает: Would you like to backup/dev/sda to/dev/sdb or/dev/sdb to/dev/sda? , угадайте, как я нервничаю, когда узнаю, что Linux, похоже, случайно назначает диски. Я еще не перезаписал свои данные своей собственной резервной копией, но это просто ждет.

Что в Linux назначает /dev/sd * на диски и как вы влияете на этот процесс? Это что-то связано с udev (/etc/udev/, udevadm)? Моя ОС - CentOS, но мне нужно знать это также для Ubuntu и CloneZilla (http://clonezilla.org), и эта проблема возникает во всех системах, поэтому я предполагаю, что эта проблема не связана с распределением, а скорее для ядра, модулей ядра или чего-то очень близкого к ядру. Пожалуйста помоги!

------------------ EDIT: 25 августа 2013 г. После того, как вы указали ссылку, которую дал ypnos, я прочитал все, попробовал одну команду, а ядро только "vommitted" udev rules на всем экране. Затем запросил пароль root, чтобы разрешить обслуживание, или выйти для перезагрузки. Это свидетельствует о том, что этот материал действительно не для новичков.

Я также посмотрел его немного дальше. Я не понимаю, как и когда загружается ядро linux, но несколько сообщений в Интернете показывают, что BIOS (!! верьте или нет) передает список загружаемых дисков до grub, который затем использует файл device.map назначить устройства, для которых grub (hd *,). Обратите внимание, что /dev/sd уже определены на этом этапе, так как вы можете использовать постоянные символические ссылки dev. Кажется, что эти карты устройств каким-то образом переходят к фактической корневой файловой системе. Так это теперь вещь загрузчика?

Возвращаясь к udev в качестве потенциального решения, я обнаружил ошибку в http://www.bugs.debian.org/cgi-bin/bugreport.cgi?bug=578826, что привело к разрешению, когда было отклонено, чтобы изменить udev NAME (что в конечном итоге станет /dev/sd *, как мы его знаем).

Для предложенных страниц udev MAN:

| The following keys can get values assigned:
| 
| NAME
|  The name of the node to be created, or the name the network
|  interface should be renamed to.
   NOTE: changing the kernel-provided name of device nodes
   (except for network devices) is not supported and can result
   in unexpected behavior.
   Today, the kernel defines the device nodes names, and udev
   is expected to only manage the node permissions and
   additional symlinks.

... Но я вышел, чтобы сделать это в любом случае слегка измененным образом.

# vi /etc/udev/rules.d/00-corrections.rules

KERNEL=="sd?", ATTRS{model}=="SAMSUNG SP0411N", NAME="sda"
KERNEL=="sd??", ATTRS{model}=="SAMSUNG SP0411N", NAME="sda%n"
KERNEL=="sda", ATTRS{model}!="SAMSUNG SP0411N", NAME="sdb"
KERNEL=="sda?", ATTRS{model}!="SAMSUNG SP0411N", NAME="sdb%n"

По сути, он делает это: "Если модель является samsung, назначьте ее NAME sda *. Если модель не Samsung, но была назначена sda *, назначьте ей NAME sdb *." Это правило было поставлено перед всеми другими правилами как можно больше. Обратите внимание, что я не уверен в этом, потому что, похоже, есть и некоторые "невидимые" файлы правил. И хотя вы переименовали устройства, ядро где-то в "загруженной ядрами", все равно может иметь неправильные ссылки. Это может быть очевидным, если вы посмотрите файл /var/log/boot.log, где в моем случае начало:

%G      Welcome to [0;36mCentOS[0;39m 
Starting udev: %G[60G[[0;32m  OK  [0;39m]Setting hostname UncleFloServer:  [60G[[0;32m  OK  [0;39m]ERROR: asr: seeking device "/dev/sda" to 5999998795264
ERROR: ddf1: seeking device "/dev/sda" to 5999998795264
ERROR: ddf1: seeking device "/dev/sda" to 5999998664192
ERROR: hpt45x: seeking device "/dev/sda" to 5999998790144
ERROR: isw: seeking device "/dev/sda" to 5999998794752
ERROR: jmicron: seeking device "/dev/sda" to 5999998795264
ERROR: lsi: seeking device "/dev/sda" to 5999998795264
ERROR: nvidia: seeking device "/dev/sda" to 5999998794752
ERROR: pdc: seeking device "/dev/sda" to 137438913024
ERROR: pdc: seeking device "/dev/sda" to 137438920192
ERROR: pdc: seeking device "/dev/sda" to 137438927360
ERROR: pdc: seeking device "/dev/sda" to 137438934528
ERROR: sil: seeking device "/dev/sda" to 5999998795264
ERROR: via: seeking device "/dev/sda" to 5999998795264
Setting up Logical Volume Management:   No volume groups found
[60G[[0;32m  OK  [0;39m]Checking filesystems
_CentOS-6.4-x86_: clean, 85517/655360 files, 662649/2621440 blocks
/dev/sda1: clean, 56/65536 files, 33367/262144 blocks
[60G[[0;32m  OK  [0;39m]Remounting root filesystem in read-write mode:  [60G[[0;32m  OK  [0;39m]Mounting local filesystems:  [60G[[0;32m  OK  [0;39m]Enabling local filesystem quotas:  [60G[[0;32m  OK  [0;39m]Enabling /etc/fstab swaps:  [60G[[0;32m  OK  [0;39m]

Здесь мое устройство Samsung составляет 40 ГБ (что мне бы хотелось как /dev/sda), а мой большой Areca Raid - 6TB (который мне бы хотелось как /dev/sdb).

Остальные вопросы остаются

  1. Что означают ошибки?

  2. Являются ли эти ошибки причиной ядра или причиной того, что файл правил все еще работает до моих 00-correctctions.rules из udev?

  3. Эти ошибки указывают на то, что data- угрожает? В разделе "Арека" нет проблем в одной из моих папок в fstab.

  4. Есть ли лучший, более ранний метод назначения устройств?

Ответ 1

В настоящее время ядро Linux динамически заполняет/dev/в соответствии с правилами UDEV.

Позвольте мне сначала объяснить, как работают файлы устройств. Каждый файл устройства, обычно файл блока устройства, имеет основное и второстепенное число. Эти числа фактически описывают, на что указывает файл. Название не играет никакой роли в этом. Давайте рассмотрим наш конкретный случай с дисками:

# ls -l sd*
brw-rw---- 1 root disk 8, 0 Aug 22 15:45 sda
brw-rw---- 1 root disk 8, 1 Aug 22 15:45 sda1
brw-rw---- 1 root disk 8, 2 Aug 22 15:45 sda2
brw-rw---- 1 root disk 8, 3 Aug 22 15:45 sda3
brw-rw---- 1 root disk 8, 5 Aug 22 15:45 sda5
brw-rw---- 1 root disk 8, 6 Aug 22 15:45 sda6

Здесь вы видите, что мой первый диск имеет разные разделы и что я загрузил 22 августа, в 3 часа дня, когда ядро создало файлы в соответствии с правилами. Вы также можете увидеть, что основное число равно 8, а младшие номера используются для доступа к разделам (0 указывает на весь диск). "B" в начале каждой строки говорит, что каждый из них является специальным файлом "блок-устройства".

Как я уже сказал, ядро создает файлы динамически "в эти дни". Это было не всегда так, и это не похоже на другие системы Unix. Там файлы будут создаваться статически, и пользователь будет создавать или манипулировать этими файлами.

Вы можете создать свои собственные файлы устройств с собственным именем и основными/младшими номерами. См. Mknod (man mknod) для этого. Однако после повторного загрузки ваши пользовательские файлы исчезнут.

Вторая возможность - изменить правила UDEV. Правила будут обработаны во время загрузки системы и гарантируют вам постоянное последовательное поведение. Хорошее руководство по этим правилам можно найти здесь: http://www.reactivated.net/writing_udev_rules.html

Вы увидите, что можно определить правило, которое создает "sda *" с данными конкретного оборудования, которые соответствуют вашему устройству. Вам нужно будет заменить исходные правила, которые будут создавать sda с вашей. Как это работает, зависит от вашего распространения.

Поскольку я думаю, что это опасный бизнес для новичков, я не буду объяснять вам конкретные шаги; документ, который я привел выше, предоставит вам всю необходимую информацию, и вы действительно должны прочитать все.

Ответ 2

Насколько я знаю, это невозможно. Система выберет порт SATA 1 как SDA и так далее. Тем не менее вы можете использовать smartctl для идентификации серийного номера SDA/B или по возможности мигать светодиодами привода.

Ответ 3

Почему вы не используете UUID вместо того, чтобы полагаться на динамическое назначение? SD? всегда является динамическим, а UUID является фиксированным значением и не изменяется, даже если вы меняете, дистрибутив или если вы устанавливаете свой жесткий диск на другой Linux-машине, UUID будет таким же.

sudo blkid покажет вам UUID, после чего вы сможете использовать его на вашем компьютере fstab для монтирования разделов там, где вы хотите.