Войти

Показать полную графическую версию : Автомонтирование CD\DVD в Linux


rrev
07-05-2007, 09:57
Доброго времени суток, уважаемые Гуру!
Система SuSe 10.0. Монтирование работало как-то через пень-колоду, но не примонтирует, то примонтирует в дирректорию, названную по метке диска. Захотелось сделать автомонтирование. По мотивам статьи в и-нете (http://www.suseclub.ru/articles/automount/), сделал файл cddvd.fdi и положил его в /usr/share/hal/fdi/policy/10osvendor


<?xml version="1.0.gif" encoding="ISO-8859-1"?><!-- -*- SGML -*- -->
<deviceinfo version="0.gif.2">
<device>
<!-- Mount CD/DVD-rom drives as /media/dvd and CD/DVD Writers
as /media/dvdrecorder instead of as /media/<<VOLUME_NAME>> -->
<match key="block.device" string="/dev/hdd">
<match key="volume.is_disc" bool="true">
<merge key="volume.policy.should_mount" type="bool">true</merge>
<merge key="volume.policy.desired_mount_point" type="string">dvd/</merge>
</match>
</match>
</device>
</deviceinfo>


Поскольку в XML я полный профан, для меня почти весь файл загадка, кроме, естессно, /dev/hdd (мой DVD, не пишущий) и dvd - точка монтирования. Так понимаю, этот файл определяет политику, по которой все новые носители, вставляемые в устройство /dev/hdd (у меня он же /dev/dvd и /dev/cdrom) монтируются в точку /media/dvd.
Вставляю CD диск, и радуюсь, все примонтировалось само куда надо. Нажал кнопочку на приводе, диск отмонтировался, лоток выехал. Вставляю другой CD диск - все впорядке. При этом в системном логе пишется, что subfs все видит и отрабатывает. Т.е. с обычными CD дисками схема работает.

Но при вставке DVD диска, он не монтируется автоматически (вручную проблем нет). При этом в сист. логе не появляется ровным счетом ничего, т.е. hal как-бы "не видит" DVD диски.

Я зашел на сайт Novell и там нашел файл cddvd.fdi, он был несколько иной:


<?xml version="1.0.gif" encoding="ISO-8859-1"?><!-- -*- SGML -*- -->
<deviceinfo version="0.gif.2">
<device>
<match key="@info.parent:storage.drive_type" string="cdrom">
<match key="@info.parent:storage.policy.desired_mount_point" string="cdrom">
<merge key="volume.policy.desired_mount_point" type="string">dvd</merge>
</match>
</match>
</device>
</deviceinfo>


Устройство другое (cdrom). Но у меня это одно и то же, и /dev/dvd и /dev/cdrom ссылаются на /dev/hdd. Точка монтирования та же (dvd). При таком содержании файла cddvd.fdi все осталось точно также (автомонтирование DVD дисков не работает). Естественно после изменения файла cddvd.fdi делал полную перезагрузку.

fstab:

/dev/hdb1 / reiserfs acl,user_xattr 1 1
/dev/hdb2 swap swap defaults 0 0
proc /proc proc defaults 0 0
sysfs /sys sysfs noauto 0 0
usbfs /proc/bus/usb usbfs noauto 0 0
devpts /dev/pts devpts mode=0620,gid=5 0 0
/dev/dvd /media/dvd subfs fs=cdfss,procuid,nosuid,nodev,exec,iocharset=utf8 0 0
/dev/fd0 /media/floppy subfs noauto,fs=floppyfss,procuid,nodev,nosuid,sync,user 0 0
none /subdomain subdomainfs noauto 0 0
/dev/hdb3 /media/hdb3 auto auto,iocharset=utf8,user,umask=0,rw,nosuid 0 0
/dev/hda2 /media/hda2 auto auto,iocharset=utf8,user,umask=0,rw,nosuid 0 0


Меня не устраивает работа automount, все таки хотелось сделать бы все на subfs. Подскажите, где "собачка порылась"?

rrev
10-05-2007, 09:29
Как вспомнил, и раньше CD монтировались сами (хоть и не в стат. точку), а DVD не монтировались (только вручную). Почему такое?
И еще в продолжение темы: хотелось бы знать, где хранятся конфиги, или как настраивается авт. подключение по submount? Поясню: например флэшка монтируется с параметром "sync", а хотелось бы "async" (так быстрее пишет на нее), но этот параметр можно указать только при монтировании вручную (где это можно сделать для автомонтирования не нашел). Пытался искать по всем файлам на компе по содержанию текста "sync" и т.п. Ранее тема поднималась в форуме, ответа не было...
Жду совета уважаемых Гуру, не переставая рыть и-нет...

rrev
18-05-2007, 11:23
Так. Проблему с флэшкой решил.
Сделал файл 80-usbflashm.fdi (для монтирования в одну точку usbdisk )

<?xml version="1.0.gif" encoding="ISO-8859-1"?><!-- -*- SGML -*- -->
<deviceinfo version="0.gif.2">
<device>
<!-- Mount usb-flash drives as /media/usbdisk -->
<match key="block.device" string="/dev/sda1">
<merge key="volume.policy.should_mount" type="bool">true</merge>
<merge key="volume.policy.desired_mount_point" type="string">usbdisk/</merge>
</match>
</device>
</deviceinfo>


И еще файл 90-storage-nosync.fdi (для того, чтобы убрать опцию 'sync' при автомонтировании). Сведения об этом нашел просто в хэлпе, правда кое что пришлось изменить. Но все довольно просто.


<?xml version="1.0" encoding="ISO-8859-1"?>
<deviceinfo version="0.2">
<device>
<!-- disable sync for mount -->
<match key="block.is_volume" bool="true">
<match key="volume.fsusage" string="filesystem">
<match key="block.device" string="/dev/sda1">
<merge key="volume.policy.mount_option.sync" type="bool">false</merge>
</match>
</match>
</match>
</device>
</deviceinfo>


Здесь "/dev/sda1" моя флэшка.

Положил это все в папку /usr/share/hal/fdi/policy/20thirdparty, далее #rchal restart и все заработало.

Однако с автомонтированием DVD вопрос остается открытым.
Скачал новую версию hal. Ей понадобилось новое ядро. После установки нового ядра (без переустановки hal) все в порядке (звук, сеть, Xserver работают нормально), а автомонтироание пропрадает совсем (даже флопика). Вопрос: что проще, разбираться почему не работает автомонтирование с новым ядром (или может переставить hal, udev и т.п. на новом ядре) или все таки разбираться со старой проблемой?

rrev
22-05-2007, 18:10
Что характерно, HAL все же распознает DVD диски

Сокращенный вывод lshal:


udi = '/org/freedesktop/Hal/devices/volume_part_1_size_1709867008'
volume.policy.desired_mount_point = 'dvd' (string)
volume.policy.should_mount = true (bool)
info.udi = '/org/freedesktop/Hal/devices/volume_part_1_size_1709867008' (string)
info.product = 'Volume' (string)
volume.disc.is_svcd = false (bool)
volume.disc.is_vcd = false (bool)
volume.disc.is_videodvd = false (bool)
volume.disc.is_rewritable = false (bool)
volume.disc.is_appendable = false (bool)
volume.disc.is_blank = false (bool)
volume.disc.has_data = true (bool)
volume.disc.has_audio = false (bool)
volume.disc.type = 'dvd_rom' (string)
volume.size = 1709867008 (0x65ea8000) (uint64)
volume.num_blocks = 3339584 (0x32f540) (int)
volume.block_size = 2048 (0x800) (int)
info.capabilities = {'volume', 'block'} (string list)
info.category = 'volume' (string)
volume.is_partition = true (bool)
volume.is_disc = true (bool)
volume.is_mounted = false (bool)
volume.mount_point = '' (string)
volume.label = '' (string)
volume.uuid = '' (string)
volume.fsversion = '' (string)
volume.fsusage = '' (string)
volume.fstype = '' (string)
block.storage_device = '/org/freedesktop/Hal/devices/storage_model_ASUS_DVD_E616A' (string)
block.is_volume = true (bool)
block.minor = 64 (0x40) (int)
block.major = 22 (0x16) (int)
block.device = '/dev/hdd' (string)
linux.hotplug_type = 3 (0x3) (int)
info.parent = '/org/freedesktop/Hal/devices/storage_model_ASUS_DVD_E616A' (string)
linux.sysfs_path_device = '/sys/block/hdd/fakevolume' (string)
linux.sysfs_path = '/sys/block/hdd/fakevolume' (string)


Т.е. распознает, что это DVD, столько то блоков, диск с данными (если вставить видео диск, то распознает что это диск с видео (volume.disc.is_videodvd = true )) и т.д. но не монтирует. Если сравнить c выводом lshal для CD диска:


udi = '/org/freedesktop/Hal/devices/volume_label_001'
info.callouts.remove = {'hald-subfs-mount'} (string list)
info.callouts.add = {'hald-add-selinux-mount-option', 'hald-subfs-mount'} (string list)
volume.policy.desired_mount_point = 'dvd' (string)
volume.policy.mount_filesystem = 'iso9660' (string)
volume.policy.should_mount = true (bool)
info.udi = '/org/freedesktop/Hal/devices/volume_label_001' (string)
info.product = '001' (string)
volume.disc.is_svcd = false (bool)
volume.disc.is_vcd = false (bool)
volume.disc.is_videodvd = false (bool)
volume.disc.is_rewritable = false (bool)
volume.disc.is_appendable = false (bool)
volume.disc.is_blank = false (bool)
volume.disc.has_data = true (bool)
volume.disc.has_audio = false (bool)
volume.disc.type = 'cd_rom' (string)
volume.size = 553347072 (0x20fb6800) (uint64)
volume.num_blocks = 1080756 (0x107db4) (int)
volume.block_size = 2048 (0x800) (int)
info.capabilities = {'volume', 'block'} (string list)
info.category = 'volume' (string)
volume.is_partition = true (bool)
volume.is_disc = true (bool)
volume.is_mounted = true (bool)
volume.mount_point = '/media/dvd' (string)
volume.label = '001' (string)
volume.uuid = '' (string)
volume.fsversion = 'Joliet Extension' (string)
volume.fsusage = 'filesystem' (string)
volume.fstype = 'iso9660' (string)
block.storage_device = '/org/freedesktop/Hal/devices/storage_model_ASUS_DVD_E616A' (string)
block.is_volume = true (bool)
block.minor = 64 (0x40) (int)
block.major = 22 (0x16) (int)
block.device = '/dev/hdd' (string)
linux.hotplug_type = 3 (0x3) (int)
info.parent = '/org/freedesktop/Hal/devices/storage_model_ASUS_DVD_E616A' (string)
linux.sysfs_path_device = '/sys/block/hdd/fakevolume' (string)
linux.sysfs_path = '/sys/block/hdd/fakevolume' (string)


Сразу бросаются в глаза строчки с информацией о вызове hald-subfs-mount, чего нет при вставке DVD. В чем дело то?

rrev
29-05-2007, 18:46
У меня складывается ощущение, что я сам с собой говорю... ;-)




© OSzone.net 2001-2012