Le periferiche rimovibili stanno invadendo le nostre case, Memory Key, HardDisk USB o FireWire, Telecamere,
Macchine Fotografiche etc. etc.
Oramai il supporto di Linux e Mandrake a queste periferiche è quasi perfetto solo che per seplificare la
vita agli utenti viene a crearsi una situazione caotica.
Ipotizziamo di avere un disco e una memory key USB, quando colleghiamo il disco gli viene assegnato il punto di
mount /mnt/removable e quando inseriamo la memory key gli viene assegnato il mount point /mnt/removable1.
Il risultato si inverte se invertiamo l'ordine di inserzione dei device.
Se uno ha molti dispositivi rimovibili si entra in confusione totale non sapendo esattamente a quale dispositivo
fisico corrisponde il mount point.
Scopo di questa guida è proprio quello di spiegare come assegnare un mount point univoco ad ogni dispositivo in
modo da evitare spiacevoli errori.
esclusivamente per le versioni 10.2 di Mandrake (dalla Beta1 in poi) e ovviamente per Cooker.
In futuro sono in cantiere cambiamenti ancora più radicali per cui non è detto che questa guida sia ancora valida
per le prossime versioni di Mandrake.
1)
Per prima cosa apriamo una bella finestra terminale e diventiamo root.
Password: ***********
2)
Inseriamo il dispositivo removibile che vogliamo identificare nella porta USB o FireWire.
3)
Per prima cosa dobbiamo capire quale device è stato assegnato al dispositivo.
Questo comando ci permette di visualizzare il contenuto di fstab.
Di seguito ci sono le righe che ci interessano.
/dev/sdd1 /mnt/removable auto pamconsole,exec,noauto,noatime,sync,managed 0 0
La prima riga si riferisce ad un dispositivo che ha già subito il trattamento infatti il mount point è /mnt/hdusb.
La seconda riga invece si riferisce invece ad un dispositivo da sistemare.
A noi interessa solo sapere a quale device è assegnato il dispositivo, in questo caso /dev/sdd1.
Usciamo da less
4)
Ora ci interessa ricavare tutte le informazioni utili ad identificare univocamente il dispositivo,
per far ciò si usa il comando lshal.
less hal.txt
Questo file anche se è un file di testo non è proprio user frendly.
Esso è composto da oggetti logici che hanno un tipo come volume, storage e usb etc.
Ogni oggetto ha un suo identificativo univoco chiamato udi e gli oggetti sono collegati fra di loro
usando proprio questo udi come riferimento.
Oltre all'udi ogni oggetto ha un certo numero di proprietà di vario genere (testo, numerico booleano etc).
Il nostro dispositivo viene descritto più o meno così:
Oggetto Dispositivo USB --> Oggetto Disco --> Oggetto Partizione
Di seguito è riportato tutto il testo relativi al dispositivo collegato a /dev/sdd1.
volume.mount_point = '/mnt/removable' (string)
volume.policy.mount_option.noatime = true (bool)
volume.policy.mount_option.sync = true (bool)
volume.policy.desired_mount_point = 'removable' (string)
volume.policy.mount_filesystem = 'auto' (string)
volume.policy.should_mount = true (bool)
info.udi = '/org/freedesktop/Hal/devices/block_8_49' (string)
volume.size = 130793472 (0x7cbc000) (uint64)
volume.block_size = 512 (0x200) (int)
volume.num_blocks = 255456 (0x3e5e0) (int)
volume.partition.number = 1 (0x1) (int)
volume.is_partition = true (bool)
volume.is_mounted = true (bool)
volume.is_disc = false (bool)
volume.uuid = '' (string)
volume.label = '' (string)
volume.fsversion = '' (string)
volume.fsusage = 'filesystem' (string)
volume.fstype = 'vfat' (string)
info.product = 'Volume' (string)
block.storage_device = '/org/freedesktop/Hal/devices/block_8_48' (string)
block.minor = 49 (0x31) (int)
block.major = 8 (0x8) (int)
info.capabilities = 'block volume' (string)
info.category = 'volume' (string)
info.parent = '/org/freedesktop/Hal/devices/block_8_48' (string)
block.device = '/dev/sdd1' (string)
block.is_volume = true (bool)
block.have_scanned = false (bool)
block.no_partitions = false (bool)
linux.sysfs_path_device = '/sys/block/sdd/sdd1' (string)
linux.sysfs_path = '/sys/block/sdd/sdd1' (string)
info.bus = 'block' (string)
udi = '/org/freedesktop/Hal/devices/block_8_48'
storage.policy.should_mount = true (bool)
info.udi = '/org/freedesktop/Hal/devices/block_8_48' (string)
storage.requires_eject = false (bool)
storage.hotpluggable = true (bool)
storage.removable = true (bool)
info.product = 'Flash Drive' (string)
info.vendor = 'STF' (string)
storage.drive_type = 'disk' (string)
block.storage_device = '/org/freedesktop/Hal/devices/block_8_48' (string)
storage.physical_device = '/org/freedesktop/Hal/devices/usb_usb_device_ea0_6828_110_-1_8324B3BF3D696C49_0' (string)
storage.vendor = 'STF' (string)
storage.model = 'Flash Drive' (string)
storage.automount_enabled_hint = true (bool)
storage.no_partitions_hint = false (bool)
storage.media_check_enabled = false (bool)
storage.bus = 'usb' (string)
block.minor = 48 (0x30) (int)
block.major = 8 (0x8) (int)
info.capabilities = 'block storage' (string)
info.category = 'storage' (string)
info.parent = '/org/freedesktop/Hal/devices/scsi_3_0_0_0' (string)
block.device = '/dev/sdd' (string)
block.is_volume = false (bool)
block.have_scanned = false (bool)
block.no_partitions = false (bool)
linux.sysfs_path_device = '/sys/block/sdd' (string)
linux.sysfs_path = '/sys/block/sdd' (string)
info.bus = 'block' (string)
udi = '/org/freedesktop/Hal/devices/usb_usb_device_ea0_6828_110_-1_8324B3BF3D696C49_0'
info.udi = '/org/freedesktop/Hal/devices/usb_usb_device_ea0_6828_110_-1_8324B3BF3D696C49_0' (string)
info.product = 'USB Mass Storage Interface' (string)
usb.interface.subclass = 6 (0x6) (int)
usb.interface.protocol = 80 (0x50) (int)
usb.interface.number = 0 (0x0) (int)
usb.interface.class = 8 (0x8) (int)
usb.configuration_value = 1 (0x1) (int)
usb.device_class = 0 (0x0) (int)
usb.device_protocol = 0 (0x0) (int)
usb.device_subclass = 0 (0x0) (int)
usb.max_power = 100 (0x64) (int)
usb.num_configurations = 1 (0x1) (int)
usb.num_interfaces = 1 (0x1) (int)
usb.device_revision_bcd = 272 (0x110) (int)
usb.is_self_powered = false (bool)
usb.can_wake_up = false (bool)
usb.serial = '8324B3BF3D696C49' (string)
usb.product_id = 26664 (0x6828) (int)
usb.vendor_id = 3744 (0xea0) (int)
usb.vendor = 'Ours Technology, Inc.' (string)
usb.product = 'OTI-6828 Flash Disk' (string)
usb.bus_number = 3 (0x3) (int)
usb.port_number = 2 (0x2) (int)
usb.level_number = 1 (0x1) (int)
usb.linux.device_number = 2 (0x2) (int)
usb.linux.parent_number = 2 (0x2) (int)
usb.num_ports = 0 (0x0) (int)
usb.speed_bcd = 4608 (0x1200) (int)
usb.version_bcd = 272 (0x110) (int)
info.parent = '/org/freedesktop/Hal/devices/usb_device_ea0_6828_110_-1_8324B3BF3D696C49' (string)
usb.linux.sysfs_path = '/sys/devices/pci0000:00/0000:00:0a.1/0000:06:00.1/usb3/3-2/3-2:1.0' (string)
linux.sysfs_path_device = '/sys/devices/pci0000:00/0000:00:0a.1/0000:06:00.1/usb3/3-2/3-2:1.0' (string)
linux.sysfs_path = '/sys/devices/pci0000:00/0000:00:0a.1/0000:06:00.1/usb3/3-2/3-2:1.0' (string)
info.bus = 'usb' (string)
Usciamo da less
Se il nostro dispositivo è sufficientemente moderno ed ha un unica partizione la proprietà che lo caratterizza
in maniera univoca è sicuramente serial
usb.serial = '8324B3BF3D696C49' (string)
Questo numero dovrebbe essere unico per ogni dispositivo.
Se vogliamo andare sul sicuro possiamo anche aggiungere vendor e product
usb.vendor = 'Ours Technology, Inc.' (string)
usb.product = 'OTI-6828 Flash Disk' (string)
Se poi ha più di una partizione occorre utilizzare anche la proprietà uuid
volume.uuid = '' (string)
In questo caso è vuoto perchè le partizioni VFAT non hanno uuid.
Ora dopo avere ricavato tutte le informazioni che ci servono dobbiamo creare il file di configurazione per
il nostro device.
5)
Estraiamo il dispositivo dalla porta USB o FireWire.
6)
Apriamo un editor e scriviamo una cosa più o meno come questa:
<br /><!-- Assegna al mio disco USB il Mount Point mio_mount_point --><br /><deviceinfo version="0.2"><br /><device><br /> <match key="block.is_volume" bool="true"><br /> <match key="volume.fsusage" string="filesystem"><br /> <match key="@block.storage_device:@storage.physical_device:usb.serial" string="8324B3BF3D696C49"><br /> <match key="@block.storage_device:@storage.physical_device:usb.vendor" string="Ours Technology, Inc."><br /> <match key="@block.storage_device:@storage.physical_device:usb.product" string="OTI-6828 Flash Disk"><br /> <merge key="volume.policy.desired_mount_point" type="string"><b>mio_mount_point</b></merge><br /> </match><br /> </match><br /> </match><br /> </match><br /> </match><br /></device><br /></deviceinfo> <br />
Chiaramente i valori di serial, vendor e product saranno diversi ma la struttura rimane invariata.
Affinche alla variabile volume.policy.desired_mount_point sia assegnato il nostro punto di
mount mio_mount_point occorre che si verifichino tutte le condizioni definite dai vari match.
7)
Ora dobbiamo salvare il file in /usr/share/hal/fdi/95userpolicy/mio_mount_point.fdi
(Il nome del file non sembra importante, l'importante è l'estensione fdi).
8) Reinseriamo il dispositivo ed incrociamo le dita.
/dev/sdd1 /mnt/mio_mount_point auto pamconsole,exec,noauto,noatime,sync,managed 0 0
Come avete visto impostare il mount point di un device in modo univoco non è proprio una cosa che si fa al volo,
speriamo che in futuro sviluppino dei tool di configurazione più user frendly.
in automatico.
A questo scopo, fortunatamente, esistono pacchetti come gnome_volume_manager (funziona solo con i DeskTop Manager) o
meglio ivman che essendo un demone si avvia direttamente al boot.
Spero che questa mia fatica vi piaccia.
Ciao Ciao Moreno
Commenti
Inviato da Stefano il Mer, 23/03/2005 - 20:32.
Complimenti....
Moreno non si smentisce mai.
Guida fantastica.
Voto: 10
Stefano Mainardi - Founder of ILDN & CEO of Twinbit
Inviato da Madman il Mer, 23/03/2005 - 21:02.
Re: Complimenti....
Guida interessante e molto ben fatta.
Quoto il voto datoti da Stefano.
Inviato da Moreno il Mer, 23/03/2005 - 21:33.
Manca un pezzo fondamentale
Ciao
A causa della tipologia del testo che ho inserito in un riquadro esso non viene assolutamente visualizzato.
Provo a ripostarlo qui sperando che si legga.
<?xml version="1.0" encoding="ISO-8859-1"?> <!-- -*- SGML -*- -->
<!-- Assegna al mio disco USB il Mount Point mio_mount_point -->
<deviceinfo version="0.2">
<device>
<match key="block.is_volume" bool="true">
<match key="volume.fsusage" string="filesystem">
<match key="@block.storage_device:@storage.physical_device:usb.serial" string="8324B3BF3D696C49">
<match key="@block.storage_device:@storage.physical_device:usb.vendor" string="Ours Technology, Inc.">
<match key="@block.storage_device:@storage.physical_device:usb.product" string="OTI-6828 Flash Disk">
<merge key="volume.policy.desired_mount_point" type="string">mio_mount_point</merge>
</match>
</match>
</match>
</match>
</match>
</device>
</deviceinfo>
Sì si legge anche se manca l'indentazione.
Questo testo va posto nel riquadro dove appare solo mio_mount_point
Ciao Ciao Moreno
Addio, e grazie per tutto il pesce.
Avatar by moonlight-dream.
Inviato da Madman il Gio, 24/03/2005 - 01:38.
Re: Manca un pezzo fondamentale
Quel riquadro mi sembrava un po' troppo grande e poi avevo la sensazione che mancasse qualcosa. :-P