Forum Linux.général comment accéder à ma clé USB à partir du fichier /sys

Posté par  . Licence CC By‑SA.
Étiquettes : aucune
1
8
juil.
2020

Bonjour à tous,

voila je me suis renseigné un peu sur le service udev et je sais qu'il crée les fichiers /dev/sd* des que le noyau ajoute un nouveau fichier dans /sys/

Donc je peux faire un open("/dev/sdb1", …) mais avec le vrai chemin : open("/sys/",…) et ca ne devrait pas poser de probleme pour le noyau. Mais quand je met ma clée USB, ou se trouve le fichier dans /sys qui fait référence à ma clée usb.

il y a peut etre beaucoup de confusion dans mes propos, donc merci d'avance pour votre aide.

  • # un peu d'inspiration

    Posté par  . Évalué à 2 (+2/-1). Dernière modification le 08/07/20 à 15:16.

    Bonjour

    Je n'ai pas très bien compris ce que tu veux faire,
    mais les retours des deux lignes de commandes suivantes,
    lancées avec les privilèges du compte root
    pourraient t'inspirer.

    Tu peux les lancer en même temps, chacune dans son émulateur de terminal,
    et après les avoir lancées, regarde ce qu'il se passe.

    Pour en sortir, il faudra faire un Ctrl+C

    udisksctl monitor

    udevadm monitor


    Bien sûr, n'hésite pas à aller lire les pages man de ces deux commandes.

    • [^] # Re: un peu d'inspiration

      Posté par  . Évalué à 1 (+0/-0).

      Je voulais écrire :
      … et après les avoir lancées, connecte/déconnecte une clef USB et regarde ce qu'il se passe.

  • # les UUID sont la pour cela

    Posté par  . Évalué à 2 (+0/-0). Dernière modification le 08/07/20 à 21:09.

    ta clef USB à un ID, cet identifiant est renseigné dans /dev/disk/by-id/

    ex :

    /dev/disk/by-id# ls -l
    total 0
    lrwxrwxrwx 1 root root  9 May 26 17:42 ata-HGST_HUS726020ALA610_K5GX63NA -> ../../sdb
    lrwxrwxrwx 1 root root 10 May 26 17:42 ata-HGST_HUS726020ALA610_K5GX63NA-part1 -> ../../sdb1
    lrwxrwxrwx 1 root root 10 May 26 17:42 ata-HGST_HUS726020ALA610_K5GX63NA-part2 -> ../../sdb2
    lrwxrwxrwx 1 root root 10 May 26 17:42 ata-HGST_HUS726020ALA610_K5GX63NA-part3 -> ../../sdb3
    lrwxrwxrwx 1 root root 10 May 26 17:42 ata-HGST_HUS726020ALA610_K5GX63NA-part5 -> ../../sdb5

    tu peux le trouver par d'autres moyens :

    /dev/disk# ls -l
    total 0
    drwxr-xr-x 2 root root 740 May 26 17:42 by-id
    drwxr-xr-x 2 root root 140 May 26 17:42 by-label
    drwxr-xr-x 2 root root 280 May 26 17:42 by-partuuid
    drwxr-xr-x 2 root root 340 May 26 17:42 by-path

    ainsi peut importe ton système tu peux utiliser l'ID pour monter ta clef et travailler dessus à partir d'un script.

    sinon tu as aussi les UUIDs ou les PARTUUID, visible avec blkid

    root@machine:/tmp# blkid
    /dev/sda1: UUID="609d910b-e5fb-1e2a-a4d2-adc226fd5302" TYPE="linux_raid_member" PARTUUID="c83b9021-01"
    /dev/sda2: LABEL="swap-sda2" UUID="9a8dd349-3bba-4b02-b3f7-4c16e98d9ec7" TYPE="swap" PARTUUID="c83b9021-02"
    /dev/sda5: UUID="54e9d197-75c2-7ec1-a4d2-adc226fd5302" TYPE="linux_raid_member" PARTUUID="c83b9021-05"
    /dev/sdc1: UUID="609d910b-e5fb-1e2a-a4d2-adc226fd5302" TYPE="linux_raid_member" PARTUUID="caba2f3b-01"
    /dev/sdc2: LABEL="swap-sdc2" UUID="debd3bf3-7d32-4181-b9ea-d135ba64e82c" TYPE="swap" PARTUUID="caba2f3b-02"
  • # clef USB et sous-répertoire du répertoire /sys/

    Posté par  . Évalué à 4 (+3/-0). Dernière modification le 08/07/20 à 22:46.

    Une clef USB ou un disque n'a pas d'UUID,
    c'est le système de fichier d'une partition d'un disque ou d'une partition d'une clef USB (ou autre support) qui, si cette partition a été formaté, aura alors un UUID qui permettra d'identifier ce système de fichiers, et comme une clef USB n'a pas de système de fichiers elle ne peut être montée, seul un système de fichiers peut-être monté.

    Dans l'arborescence du répertoire /dev/disk/ il n'y a aucun lien vers ou sous-répertoire du répertoire /sys/


    Par contre, à l'insertion d'une clef USB, le retour de la ligne de commande udevadm monitor
    ne donne que des sous-répertoires du répertoire /sys/

    root@debT450:~# udevadm monitor
    monitor will print the received events for:
    UDEV - the event which udev sends out after rule processing
    KERNEL - the kernel uevent
    
    KERNEL[9175.621129] add      /devices/pci0000:00/0000:00:14.0/usb2/2-3 (usb)
    KERNEL[9175.622039] add      /devices/pci0000:00/0000:00:14.0/usb2/2-3/2-3:1.0 (usb)
    KERNEL[9175.625424] add      /devices/pci0000:00/0000:00:14.0/usb2/2-3/2-3:1.0/host3 (scsi)
    KERNEL[9175.625727] add      /devices/pci0000:00/0000:00:14.0/usb2/2-3/2-3:1.0/host3/scsi_host/host3 (scsi_host)
    KERNEL[9175.625835] bind     /devices/pci0000:00/0000:00:14.0/usb2/2-3/2-3:1.0 (usb)
    KERNEL[9175.625953] bind     /devices/pci0000:00/0000:00:14.0/usb2/2-3 (usb)
    UDEV  [9175.634283] add      /devices/pci0000:00/0000:00:14.0/usb2/2-3 (usb)
    UDEV  [9175.638263] add      /devices/pci0000:00/0000:00:14.0/usb2/2-3/2-3:1.0 (usb)
    UDEV  [9175.653660] add      /devices/pci0000:00/0000:00:14.0/usb2/2-3/2-3:1.0/host3 (scsi)
    UDEV  [9175.655640] add      /devices/pci0000:00/0000:00:14.0/usb2/2-3/2-3:1.0/host3/scsi_host/host3 (scsi_host)
    UDEV  [9175.657667] bind     /devices/pci0000:00/0000:00:14.0/usb2/2-3/2-3:1.0 (usb)
    UDEV  [9175.664408] bind     /devices/pci0000:00/0000:00:14.0/usb2/2-3 (usb)
    KERNEL[9176.654392] add      /devices/pci0000:00/0000:00:14.0/usb2/2-3/2-3:1.0/host3/target3:0:0 (scsi)
    KERNEL[9176.654470] add      /devices/pci0000:00/0000:00:14.0/usb2/2-3/2-3:1.0/host3/target3:0:0/3:0:0:0 (scsi)
    KERNEL[9176.654551] add      /devices/pci0000:00/0000:00:14.0/usb2/2-3/2-3:1.0/host3/target3:0:0/3:0:0:0/scsi_disk/3:0:0:0 (scsi_disk)
    KERNEL[9176.654638] bind     /devices/pci0000:00/0000:00:14.0/usb2/2-3/2-3:1.0/host3/target3:0:0/3:0:0:0 (scsi)
    KERNEL[9176.654693] add      /devices/pci0000:00/0000:00:14.0/usb2/2-3/2-3:1.0/host3/target3:0:0/3:0:0:0/scsi_device/3:0:0:0 (scsi_device)
    KERNEL[9176.655059] add      /devices/pci0000:00/0000:00:14.0/usb2/2-3/2-3:1.0/host3/target3:0:0/3:0:0:0/scsi_generic/sg2 (scsi_generic)
    KERNEL[9176.655148] add      /devices/pci0000:00/0000:00:14.0/usb2/2-3/2-3:1.0/host3/target3:0:0/3:0:0:0/bsg/3:0:0:0 (bsg)
    KERNEL[9176.658086] add      /devices/virtual/bdi/8:32 (bdi)
    UDEV  [9176.658731] add      /devices/pci0000:00/0000:00:14.0/usb2/2-3/2-3:1.0/host3/target3:0:0 (scsi)
    UDEV  [9176.666953] add      /devices/virtual/bdi/8:32 (bdi)
    UDEV  [9176.667731] add      /devices/pci0000:00/0000:00:14.0/usb2/2-3/2-3:1.0/host3/target3:0:0/3:0:0:0 (scsi)
    UDEV  [9176.669317] add      /devices/pci0000:00/0000:00:14.0/usb2/2-3/2-3:1.0/host3/target3:0:0/3:0:0:0/scsi_disk/3:0:0:0 (scsi_disk)
    UDEV  [9176.670475] bind     /devices/pci0000:00/0000:00:14.0/usb2/2-3/2-3:1.0/host3/target3:0:0/3:0:0:0 (scsi)
    UDEV  [9176.672549] add      /devices/pci0000:00/0000:00:14.0/usb2/2-3/2-3:1.0/host3/target3:0:0/3:0:0:0/scsi_device/3:0:0:0 (scsi_device)
    UDEV  [9176.672924] add      /devices/pci0000:00/0000:00:14.0/usb2/2-3/2-3:1.0/host3/target3:0:0/3:0:0:0/bsg/3:0:0:0 (bsg)
    UDEV  [9176.672953] add      /devices/pci0000:00/0000:00:14.0/usb2/2-3/2-3:1.0/host3/target3:0:0/3:0:0:0/scsi_generic/sg2 (scsi_generic)
    KERNEL[9176.701851] add      /devices/pci0000:00/0000:00:14.0/usb2/2-3/2-3:1.0/host3/target3:0:0/3:0:0:0/block/sdc (block)
    UDEV  [9176.881864] add      /devices/pci0000:00/0000:00:14.0/usb2/2-3/2-3:1.0/host3/target3:0:0/3:0:0:0/block/sdc (block)

    et en même temps, au moment de l'insertion de cette même clef USB
    le retour de la ligne de commande udiskscl monitor donnera un peu plus de précisions :

    root@debT450:~# udisksctl monitor
    Monitoring the udisks daemon. Press Ctrl+C to exit.
    22:03:56.947: The udisks-daemon is running (name-owner :1.6).
    22:04:02.191: Added /org/freedesktop/UDisks2/drives/USB_FLASHDISK_14000000000000001139
      org.freedesktop.UDisks2.Drive:
        CanPowerOff:                true
        Configuration:              {}
        ConnectionBus:              usb
        Ejectable:                  true
        Id:                         USB-FLASHDISK-14000000000000001139
        Media:                      
        MediaAvailable:             true
        MediaChangeDetected:        true
        MediaCompatibility:         
        MediaRemovable:             true
        Model:                      FLASHDISK
        Optical:                    false
        OpticalBlank:               false
        OpticalNumAudioTracks:      0
        OpticalNumDataTracks:       0
        OpticalNumSessions:         0
        OpticalNumTracks:           0
        Removable:                  true
        Revision:                   2010
        RotationRate:               -1
        Seat:                       seat0
        Serial:                     14000000000000001139
        SiblingId:                  /sys/devices/pci0000:00/0000:00:14.0/usb2/2-3/2-3:1.0
        Size:                       129499136
        SortKey:                    01hotplug/1594238642189857
        TimeDetected:               1594238642189857
        TimeMediaDetected:          1594238642189857
        Vendor:                     USB
        WWN:                        
    22:04:02.194: Added /org/freedesktop/UDisks2/block_devices/sdc
      org.freedesktop.UDisks2.Block:
        Configuration:              []
        CryptoBackingDevice:        '/'
        Device:                     /dev/sdc
        DeviceNumber:               2080
        Drive:                      '/org/freedesktop/UDisks2/drives/USB_FLASHDISK_14000000000000001139'
        HintAuto:                   true
        HintIconName:               
        HintIgnore:                 false
        HintName:                   
        HintPartitionable:          true
        HintSymbolicIconName:       
        HintSystem:                 false
        Id:                         
        IdLabel:                    
        IdType:                     
        IdUUID:                     
        IdUsage:                    
        IdVersion:                  
        MDRaid:                     '/'
        MDRaidMember:               '/'
        PreferredDevice:            /dev/sdc
        ReadOnly:                   false
        Size:                       129499136
        Symlinks:                   /dev/disk/by-id/usb-USB_FLASHDISK_14000000000000001139-0:0
                                    /dev/disk/by-path/pci-0000:00:14.0-usb-0:3:1.0-scsi-0:0:0:0
        UserspaceMountOptions:

    Il y a toujours cette confusion entre le contenant et le contenu
    qui embrouille les débutants qui finissent par ne même plus arriver à comprendre à quoi servent une table des partitions, une partition, et un système de fichiers.

    Et les utilisateurs de Windows sont encore plus perdus quand ils voient apparaître sur leur machine des disques supplémentaires qui n'existent pas puisque ce ne sont en fait que de simples partitions.

    Finalement, certains vont un jour ou l'autre simplement faire ce qu'ils lisent partout :
    ils formatent leur disque ou leur clef USB sans penser que c'est une partition qu'il faut formater et que pour pouvoir créer une partition, il faut d'abord créer ou qu'il existe déjà une table des partitions, ou/et ils essayent de monter un disque ou une clef USB.

    • [^] # Re: clef USB et sous-répertoire du répertoire /sys/

      Posté par  . Évalué à 1 (+0/-0).

      merci pour vos réponses. Mais je me suis tres mal exprimé. Ma vrai question est comment udev.service arrive à transformer des fichiers qu'il trouve dans le réportoire /sys vers un fichier block qu'il place dans /dev. et lorsqu'on fait un open("/dev/sdb1"), comment le noyau sait que l'on parle d'une clée USB car pour le noyau les périphériques se trouve dans son répertoire /sys

      • [^] # Re: clef USB et sous-répertoire du répertoire /sys/

        Posté par  . Évalué à 4 (+3/-0). Dernière modification le 09/07/20 à 11:52.

        En gros (très gros même …) :

        Regarde la suite d'évènements retournés par la ligne de commande udevadm monitor
        on y voit qu'il y a des messages du noyau et de udev qui communiquent en plus entre eux pour savoir ce qu'il faut faire avec ce nouveau périphérique USB détecté.

        Les USBids que la clef USB retourne permettent à udevd, grâce à la liste qui est dans /var/lib/usbutils/usb.ids, de savoir qu'il s'agit d'une interface USB <-> SATA
        et en fonction des règles udev, il va créer le fichier de périphérique qui va permettre d'accéder à cette clef USB.

        Dans l'exemple que j'ai cité dans mon précédent message, la clef USB que j'ai utilisé n'avait même pas de table des partitions, mais refais le même test avec une clef USB qui a une table des partitions et une ou plusieurs partitions formatées, et tu verras beaucoup d'autres messages et informations intéressantes autant dans les retours de udisksctl monitor que de udevadm monitor. Regarde aussi le retour de la commande dmesg

  • # Quelques liens

    Posté par  . Évalué à 1 (+0/-0).

Envoyer un commentaire

Suivre le flux des commentaires

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n’en sommes pas responsables.