пародонтология в москве, стоматология юго западная, имплантация зубов отзывы цены

Авторизация

Вы можете войти через одну из учетных записей:

ИЛИ



Напомнить пароль
Регистрация

РуководствоМонтируем сменные устройства под одними и теми же именами

Смонтируйте ваш диск USB так, чтобы он каждый раз отображался как /media/music. Смонтируйте ваш диск FireWire так, чтобы он каждый раз отображался как /media/data.

Мои хранилища данных настроены на моей домашней машине с Ubuntu несколько необычно. У меня есть внешний диск, предназначенный для хранения музыки, и еще один внешний диск, который является резервной копией музыкального диска. У меня также есть внешний диск, на котором находятся все мои личные документы, фотографий и фильмы, а также еще четвертый диск, который является резервной копией третьего диска. Все эти четыре диски подключены к моему настольному компьютеру через FireWire. Наконец, у меня есть еще один внешний носитель, который используется как временное хранилище: когда я скачиваю новый фильм или серию картинок, или копирую с нового CD аудиозапись, я помещаю все эти файлы на временный диск, пока не смогу их правильно разместить на музыкальном диске или на диске с личными данными. В отличие от первых четырех дисков, диск с временным хранилищем данных использует подключение через USB.

Пять дисков звучит здорово, но с этим связана одна большая неприятность. Когда я перезагружаю Ubuntu (случается редко, но, конечно, это происходит), то точки монтирования изменяются. Иногда диск FireWire с номером 1 монтируется как /media/sdb1, а иногда — как /media/sdc1. То же самое происходит и с другими дисками, и, в результате, возникают проблемы с работой моих скриптов резервного копирования и с моими попытками подключиться через SSH из других машин, и это лишь только две проблемы, с которыми я столкнулся. Я хочу, чтобы имена этих устройств не менялись, так чтобы диск FireWire с номером 1 всегда назывался /media/<что-то>, диск FireWire с номером 2 всегда назывался /media/<что-то еще>, и так далее.

После долгих поисков, я нашел ответ на форумах Ubuntu по ссылке ubuntuforums.org/showthread.php?t=91948 и в прекрасном обзоре Даниэль Дрейка (Daniel Drake) под названием «Записываем правила udev» (http://www.reactivated.net/writing_udev_rules.html). В сущности в Ubuntu есть технология udev, которая управляет динамически подключаемыми устройствами. Я могу указать udev, как я хочу обозначить каждый отдельный диск, когда он подключается, что гораздо более эффективно и полезно, чем метод, используемый по умолчанию. Это делается следующим образом.

Вам нужно будет отредактировать файл /etc/udev/rules.d/10-local.rules. Убедитесь в том, что этот файл уже есть на жестком диске:
$ ls /etc/udev/rules.d/10-local.rules

Если он уже существует, то вам следует отредактировать его, а если его в настоящее время нет, то двигайтесь дальше и создайте пустой файл с соответствующем именем и правами доступа:
$ sudo touch /etc/udev/rules.d/10-local.rules
$ sudo chmod 777 /etc/udev/rules.d/10-local.rules

В конце процедуры, описываемой в данном совете, в файле 10-local.rules будут указаны все устройства. Например, запись, касающаяся диска USB, будет выглядеть следующим образом:

BUS=="usb", SYSFS{serial}=="6R0000065086", NAME{all_partitions}=="temp"

Первая часть, BUS==«usb», очевидна; в ней указано как этот диск подключается к машине. Третья часть, NAME{all_partitions}==«temp», также интуитивно понятна, поскольку «temp» это имя, которое, как я хочу, будет использоваться в качестве точки монтирования вместо /media/sdb1 или еще чего-нибудь, что решит использовать Ubuntu. Но что означает вторая часть? Откуда взято «6R0000065086»?

Для того, чтобы udev выполнял свою работу, он должен знать, какому конкретно диску я хочу присвоить метку «temp». Когда я подключаю диск (или любое динамически подключаемое устройство), диск идентифицирует себя по целому ряду параметров. Мне нужно выбрать уникальные данные, которые я могу передать в udev для идентификации. Для того, чтобы выяснить, какие данные видны udev, когда вы подключаете диск, я выполню следующую команду (заметьте, что указанный путь является текущим, который система Ubuntu назначила диску, в данном случае — /dev/sda):
$ udevinfo -a -p $(udevinfo -q path -n /dev/sda)

Как только я нажму клавишу Enter, будет выдан огромный поток данных, похожий на то, что приведено ниже (длина приведенного ниже листинга была существенно сокращена):
device '/sys/block/sda' has major:minor 8:0
looking at class device '/sys/block/sda':
SUBSYSTEM==«block»
SYSFS{dev}==«8:0»
SYSFS{range}==«16»
SYSFS{removable}==«0»
SYSFS{size}==«488397168»
SYSFS{stat}==" 2159 102 16586 1871738 28 17 360 204 0 14257 1871942"



looking at the device chain at
'/sys/devices/pci0000:00/0000:00:1e.0/0000:05:09.2/usb4/4-1/4-1.2/4-1.2:1.0':
BUS==«usb»
ID==«4-1.2:1.0»
DRIVER==«usb-storage»
SYSFS{bAlternateSetting}==" 0"
SYSFS{bInterfaceClass}==«08»
SYSFS{bInterfaceNumber}==«00»
SYSFS{bInterfaceProtocol}==«50»
SYSFS{bInterfaceSubClass}==«06»
SYSFS{bNumEndpoints}==«02»
SYSFS{modalias}==«usb:v04B4p6830d0001dc00dsc00dp00ic08isc06ip50»

looking at the device chain at
'/sys/devices/pci0000:00/0000:00:1e.0/0000:05:09.2/usb4/4-1/4-1.2':
BUS==«usb»
ID==«4-1.2»
DRIVER==«usb»
SYSFS{bConfigurationValue}==«1»
SYSFS{bDeviceClass}==«00»
SYSFS{bDeviceProtocol}==«00»
SYSFS{bDeviceSubClass}==«00»
SYSFS{bMaxPower}==" 0mA"
SYSFS{bNumConfigurations}==«1»
SYSFS{bNumInterfaces}==" 1"
SYSFS{bcdDevice}==«0001»
SYSFS{bmAttributes}==«c0»
SYSFS{configuration}==""
SYSFS{devnum}==«3»
SYSFS{idProduct}==«6830»
SYSFS{idVendor}==«04b4»
SYSFS{manufacturer}==«Cypress Semiconductor»
SYSFS{maxchild}==«0»
SYSFS{product}==«USB2.0 Storage Device»
SYSFS{serial}==«6R0000065086»
SYSFS{speed}==«480»
SYSFS{version}==" 2.00"

...
Видите строку, в которой указано SYSFS{serial}==«6R0000065086»? Это уникальный серийный номер этого устройства, так что это именно то, что я буду использовать в строке, которую я добавляю к файлу 10-local.rules. Обратите внимание, что также присутствует BUS==«usb» на случай, если я не знаю, каким образом устройство /dev/sda подключается к моей машине (конечно, если дисков только 5, то такого не случится!). Поэтому новая строка в файле /etc/udev/rules.d/10-local.rules будет выглядеть следующим образом:
BUS=="usb", SYSFS{serial}=="6R0000065086", NAME{all_partitions}=="temp"

Я также должен повторить эту процедуру для всех остальных дисков. Хотя все остальные четыре диска подключаются с помощью FireWire, процедура будет такой же, просто будут отличаться выдаваемые листинги:

$ udevinfo -a -p $(udevinfo -q path -n /dev/sdb)

device '/sys/block/sdb' has major:minor 8:16
looking at class device '/sys/block/sdb':
SUBSYSTEM==«block»
SYSFS{dev}==«8:16»
SYSFS{range}==«16»
SYSFS{removable}==«0»
SYSFS{size}==«234441648»
SYSFS{stat}==«1166 102 8386 739882 27 16 344 52 0 6575 739934»



looking at the device chain at
'/sys/devices/pci0000:00/0000:00:1e.0/0000:05:04.0/fw-host0/0030e0f4e020dca0/0030e0f4e020dca0-0':
BUS==«ieee1394»
ID==«0030e0f4e020dca0-0»
DRIVER==«sbp2»
SYSFS{address}==«0x0000fffff0000830»
SYSFS{ignore_driver}==«0»
SYSFS{length}==«0»
SYSFS{model_id}==«0x000001»
SYSFS{model_name_kv}==«OXFORD IDE Device LUN 0 »
SYSFS{specifier_id}==«0x00609e»
SYSFS{version}==«0x010483»

looking at the device chain at
'/sys/devices/pci0000:00/0000:00:1e.0/0000:05:04.0/fw-host0/0030e0f4e020dca0':
BUS==«ieee1394»
ID==«0030e0f4e020dca0»
DRIVER==«unknown»
SYSFS{bus_options}==«IRMC_0_ CMC_0_ ISC_0_ BMC_0_ PMC_0_ GEN_0_
LSPD_2_ MAX_REC_64_ MAX_ROM_0_ CYC_CLK_ACC_255_»
SYSFS{capabilities}==«0x0083c0»
SYSFS{guid_vendor_id}==«0x0030e0»
SYSFS{guid}==«0x0030e0f4e020dca0»
SYSFS{nodeid}==«0xffc0»
SYSFS{tlabels_allocations}==«1262»
SYSFS{tlabels_free}==«64»
SYSFS{tlabels_mask}==«0x05965272090596527209»
SYSFS{vendor_id}==«0x0030e0»
SYSFS{vendor_name_kv}==«Oxford Semiconductor Ltd. »

...
В этом случае udevinfo сообщает мне, каким образом этот диск подключен к моему настольному компьютеру с Ubuntu: BUS==«ieee1394» (не забудьте, что IEEE1394 — это официальное название FireWire). Для устройств FireWire отсутствует запись SYSFS{serial}, которая есть для устройств USB; вместо этого в качестве уникальных идентификаторов используется SYSFS{guid}. На данном диске находятся мои персональные файлы, так что я хочу, чтобы он отображался как /media/data. Соберем все вместе и добавим в файл /etc/udev/rules.d/10-local.rules следующую строку:
BUS==«ieee1394», SYSFS{guid}==«0x0030e0f4e020e229», NAME{all_partitions}==«data»
После выполнения этой же самой процедуры еще три раза файл /etc/udev/rules.d/10-local.rules будет выглядеть следующим образом:
BUS==«usb», SYSFS{serial}==«6R0000065086», NAME{all_partitions}==«temp»
BUS==«ieee1394», SYSFS{guid}==«0x0030e0f4e020e229», NAME{all_partitions}==«data»
BUS==«ieee1394», SYSFS{guid}==«0x0030e0f4e020dca0», NAME{all_partitions}==«data_copy»
BUS==«ieee1394», SYSFS{guid}==«0x0030e0f4e020912c», NAME{all_partitions}==«music»
BUS==«ieee1394», SYSFS{guid}==«0x0030e0f4e020c727», NAME{all_partitions}==«music_copy»
Теперь мне необходимо проверить мои изменения с тем, чтобы убедиться, что они действительно работают. Во-первых, мне нужно перезагрузить udev, подсистему, которая обеспечивает управление всем этим безумием:
$ sudo /etc/init.d/udev restart

Теперь я буду проверять правила для внешнего диска USB, чтобы убедиться, что все работает. Для проверки я воспользуюсь командой udevtest. Команда имеет следующий синтаксис:
$ sudo udevtest sysfs_device_path subsystem

Как я смогу узнать значения sysfs_device_path и subsystem? Вспомните, когда я запускал команду udevinfo -a -p $(udevinfo -q path -n /dev/sda) и обратите внимание, какие именно данные мне прежде всего были выданы:
looking at class device '/sys/block/sda':
  SUBSYSTEM=="block"

Поэтому моя команда udevtest будет выглядеть следующим образом:
$ sudo udevtest /sys/block/sda block

Сразу за командой будет выдан результат (был удален ряд сообщений об ошибках, связанных с другими элементами в udev, которые здесь не рассматриваются):
udevtest.c: looking at device '/block/sda' from subsystem 'block'

udevtest.c: opened class_dev->name='sda'
udev_rules.c: configured rule in '/etc/udev/rules.d/10-local.rules:1' applied, 'sda' becomes 'temp'
udev_add.c: creating device node '/dev/temp', major = '8', minor = '0', mode = '0640', uid = '0', gid = '46'
udev_add.c: creating device partition nodes '/dev/temp[1-15]'
Отлично! Теперь я знаю, что udev создаст в действительности имя устройства /dev/temp и, следовательно, точку монтирования на /media/temp вместо /dev/sda и /media/sda и всегда в будущем будет использовать это имя. Кстати, не беспокойтесь, несмотря на то, что в выходных данных сказано, что были созданы узлы, в действительности это не так. Это лишь информационное сообщение.

Итак, я знаю, диск USB работает, но что относительно одного из устройств FireWire?
$ sudo udevtest /sys/block/sdd block

Вот результаты для этого диска (опять же, ненужные данные были удалены):
udevtest.c: looking at device '/block/sdd' from subsystem 'block'

udevtest.c: opened class_dev->name='sdd'
udev_rules.c: configured rule in '/etc/udev/rules.d/10-local.rules:5' applied, 'sdd' becomes 'music_copy'
udev_add.c: creating device node '/dev/music_copy', major = '8', minor = '48', mode = '0640', uid = '0', gid = '46'
udev_add.c: creating device partition nodes '/dev/music_copy[1-15]'
Именно то, что я хотел, так что похоже, что все будет работать так, как предполагалось. Теперь перезагрузите компьютер, и, вот, появились мои диски так, как я хотел:
/media/temp
/media/data
/media/data_copy
/media/music
/media/music_copy
Конечно, ничто вам не мешает продолжить настройку udev так, чтобы цифровая камера всегда изображалась как /media/camera. Или чтобы ваш музыкальный проигрыватель IRiver Music постоянно монтировался как /media/iriver. И так далее. В принципе, если ваша система видит устройство как динамически монтируемое, вы можете использовать udev для отображения его в конкретную точку монтирования. Благодаря udev стало намного проще пользоваться системой Ubuntu.
  • +1
  • shell
  • 20 октября 2010, 04:00
  • add twitter 

Комментарии (0) Вконтакте (0) facebook (0)

Комментарии (0)

rss свернуть / развернуть

Только авторизованные пользователи могут оставлять комментарии. Авторизуйтесь, пожалуйста.