Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Общий по Linux (http://forum.oszone.net/forumdisplay.php?f=9)
-   -   Автомонтирование CD\DVD в Linux (http://forum.oszone.net/showthread.php?t=83681)

rrev 07-05-2007 09:57 583934

Автомонтирование CD\DVD в Linux
 
Доброго времени суток, уважаемые Гуру!
Система 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 584982

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

rrev 18-05-2007 11:23 588275

Так. Проблему с флэшкой решил.
Сделал файл 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 589756

Что характерно, 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 592590

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


Время: 02:15.

Время: 02:15.
© OSzone.net 2001-