LINUX.ORG.RU

Изменение именования жёстких дисков

 archx,


0

2

Сегодня я снёс систему на своём компьютере введя /dev/sda (жёсткий диск) вместо /dev/sdb (флешка) в качестве аргумента для dd, когда хотел записать образ на флешку. Задумался о том, что было бы неплохо принять меры по предупреждению подобных событий в будущем.

А именно, я хочу, чтобы системный жёсткий диск не именовался стандартным образом. То есть сделать вместо /dev/sda какой-нибудь /dev/harddisk или ещё что-нибудь подобное. А всякие флешки и прочие съёмные носители пусть именуются как обычно, их не жалко. В общем, чтобы опечататься никак нельзя было. По идее везде жёсткий диск у меня фигурирует только в виде UUID файловых систем, так что даже ничего менять не придётся в конфигах.

Попробовал так:

$ cat /etc/udev/rules.d/10-harddisk.rules 
SUBSYSTEM=="block", ATTR{serial}=="WD-WXNxxxxxxUF1", NAME="harddisk"

Это не сработало. Впрочем, это вполне ожидаемо - ведь системный жёсткий диск определяет udev, который находится в initrd.

Собственно, вопрос - как наиболее правильно реализовать такую штуку?

И не отвалится ли чего-нибудь нужное?

★★★★★

Последнее исправление: cetjs2 (всего исправлений: 2)

На флешку права доступные юзеру на запись, группа floppy или как-нибудь иначе, но не disk как у hdd

Так что root права не нужны.

как наиболее правильно реализовать такую штуку?

ALIAS или /dev/disk/by-*

anonymous
()
  1. ATTR{serial}? Точно? Я не могу найти у себя, например, в /sys/class/block/sda файла с таким названием.
  2. Вероятно, ты имел в виду ENV{ID_SERIAL}. Но эта переменная устанавливается в 60-persistent-storage.rules, т. е. сильно позже.
  3. Цитируя man 7 udev:
    NAME
               The name to use for a network interface. See systemd.link(5) for
               a higher-level mechanism for setting the interface name. The name
               of a device node cannot be changed by udev, only additional
               symlinks can be created.
    

(Замечание — узлы устройств создаются не udev'ом, а напрямую ядром и конкретно devtmpfs. udev лишь расставляет права и симлинки.)

Отсюда ответ — скорее всего, нельзя. Можно ретроспективно сделать mv /dev/sdXY /dev/harddisk, но это убьёт симлинки /dev/disk/by-xxx/yyy и сломает вообще всё.

intelfx ★★★★★
()
Последнее исправление: intelfx (всего исправлений: 1)
Ответ на: комментарий от intelfx

А если после mv пересоздать корректные симлинки? Или сломается что-то ещё?

И к тому же если симлинки создаёт udev, то если сделать mv перед его стартом, то ведь он создаст корректные симлинки?

KivApple ★★★★★
() автор топика
Последнее исправление: KivApple (всего исправлений: 1)
Ответ на: комментарий от KivApple

А если после mv пересоздать корректные симлинки? Или сломается что-то ещё?

Судя по файлу правил (60-persistent-storage.rules), эти правила исполняются не только при ACTION==add, но и при ACTION==change. Т. е. гипотетически посередине работы системы симлинки могут внезапно так пересоздаться. Может ли такое быть на самом деле (в каких конкретно условиях возникают change-события на блочных устройствах) — я не знаю.

(Не говоря уже о том, что ты задолбаешься в точности копировать логику из udev в самописный скрипт.)

И к тому же если симлинки создаёт udev, то если сделать mv перед его стартом, то ведь он создаст корректные симлинки?

Можно проверить, но сомневаюсь. Имена устройств он наверняка получает через нетлинк от ядра, а не сканированием /dev.

(Опять же, не говоря о том, что SATA-контроллер и жёсткий диск совершенно не обязаны проинициализироваться строго до запуска udev. Это как бы причина, по которой udev вообще существует.)

intelfx ★★★★★
()
Последнее исправление: intelfx (всего исправлений: 3)

Я бы в таком случае обращался к внутренним дисками через префикс «ata», а ко всяким внешним накопителям через префикс «usb».

$ ls -1 /dev/disk/by-id/ata*
/dev/disk/by-id/ata-Hitachi_HDS723020BLA642_MN1220F30P0VTD
/dev/disk/by-id/ata-Hitachi_HDS723020BLA642_MN1220F30P0VTD-part1
/dev/disk/by-id/ata-Hitachi_HDS723020BLA642_MN1220F30P0VTD-part2
/dev/disk/by-id/ata-Hitachi_HDS723020BLA642_MN1220F30P0VTD-part3
/dev/disk/by-id/ata-Hitachi_HDS723020BLA642_MN1220F30P0VTD-part5
/dev/disk/by-id/ata-Hitachi_HDS723020BLA642_MN1220F30P0VTD-part6
/dev/disk/by-id/ata-Hitachi_HDS723020BLA642_MN1220F30P0VTD-part7
/dev/disk/by-id/ata-ST2000DM001-1ER164_W4Z0H3GM
/dev/disk/by-id/ata-ST2000DM001-1ER164_W4Z0H3GM-part1
/dev/disk/by-id/ata-ST2000DM001-1ER164_W4Z0H3GM-part2
/dev/disk/by-id/ata-WDC_WD6401AALS-00E3A0_WD-WCATR2953894
...

$ ls -1 /dev/disk/by-id/usb*
/dev/disk/by-id/usb-SAMSUNG_MP0804H_0-0:0
/dev/disk/by-id/usb-SAMSUNG_MP0804H_0-0:0-part1

justAmoment ★★★★★
()

Когда-то делал:

$ cat /etc/udev/rules.d/10-usb-disks.rules
#создание в /dev/usb-disk/ симлинков на флешки (без разделов)
SUBSYSTEM=="block", ATTR{removable}=="1", SYMLINK+="usb-disk/%k"
Для всех флешек, телефонов, usb-hdd там в папке создаются симлинки.
С жестким диском не спутать, хотя, если несколько флешек - можно ошибиться, какую именно использовать.

DiMoN ★★★
()
Последнее исправление: DiMoN (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.