Forum Programmation.shell retrouver le "vrai nom" d'une partition dont on connais le PARTLABEL

Posté par  . Licence CC By‑SA.
Étiquettes : aucune
0
7
août
2020

Salut.

J'essaie de trouver une méthode élégante (et si possible: courte) pour identifier le "vrai nom" d'une partition dont on connaît le PARTLABEL, un truc qui ferait genre:

identify PARTLABEL=foobar
/dev/sda3

La partitions n'étant pas montée.
On peut le faire avec lsblk, comme ça: lsblk -lno name,PARTLABEL | awk '$2 ~ /'$PARTLABEL'/ { print $1 }' mais c'est pas vraiment ce que j'appelle clean.

Quelqu'un aurait une solution plus clean?

L'objectif est de parser un peu violemment un /etc/fstab pour reconstruire des partitions (bon, ok, un fstab ainsi qu'une entré de sfdisk forcément). J'utilise déjà awk pour générer les appels mkfs, d'où la raison d'essayer de faire court, parce qu'évaluer un awk qui génère des commandes qui appellent awk, c'est vraiment pas génial de mon point de vue.

  • # fichier de périphérique

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

    Bonjour

    Ce que tu appelles le "vrai nom"
    est le nom du fichier de périphérique qui permettrait d'accéder à la partition.

    Tu peux récupérer ce nom de fichier de périphérique
    en regardant avec la commande readlink
    à quoi est lié le lien qui est dans le répertoire /dev/disk/by-partlabel/

    $ readlink -f /dev/disk/by-partlabel/foobar
    /dev/sda3
    • [^] # Re: fichier de périphérique

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

      Ce que tu appelles le "vrai nom"
      est le nom du fichier de périphérique qui permettrait d'accéder à la partition.

      Désolé, j'ai la tête dans mon script, du coup je suis un peu embrouillé pour expliqué… tu as raison.

      en regardant avec la commande readlink

      Bien vu, j'avais zappé que ce sont des symlinks. C'est nettement plus simple ainsi en effet.

  • # Mais …

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

    Comme indiqué dans les remarques qui sont dans le fichier /etc/fstab
    plutôt que d'utiliser le nom du fichier de périphérique
    qui pourrait changer si un disque est ajouté ou déconnecté,
    il vaudrait mieux utiliser l'UUID du système de fichiers de la partition

    • [^] # Re: Mais …

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

      Certes, sauf que mon but est de générer un schéma de partitionnement via 1 fichier d'entrée sfdisk et un fstab.
      Hors, il s'avère que mkfs ne supporte pas les PARTLABEL. Je doute donc qu'il supporte les UUID, ceux-ci existant aussi sous les partitionnement de type MSDOS, j'imagine qu'ils sont encodés dans le FS lui-même, qui n'est, a mon stade, pas encore créé.

      • [^] # Re: Mais …

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

        … il s'avère que mkfs ne supporte pas les PARTLABEL. …

        Alors utilise le nom du lien /dev/disk/by-partlabel/foobar
        ou un nom de lien trouvé dans un des sous-répertoires de /dev/disk/
        (à part /dev/disk/by-label ou /dev/disk/by-uuid)
        qui sera lié au "bon" nom de fichier de périphérique

        /dev/disk/by-id est un bon candidat pour être sûr de ne pas se tromper de disque puisque chaque nom de lien qu'il contient est composé avec les références et le numéro de série du disque.


        … UUID … j'imagine qu'ils sont encodés dans le FS lui-même,

        Oui, l'UUID et le LABEL permettent d'identifier un système de fichiers,
        et donc, si pas de système de fichiers alors pas d'UUID ni LABEL

        • [^] # Re: Mais …

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

          C'est ce qui m'a été suggéré en 1ère réponse :)

  • # ce qui donnerait :

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

    $ lsblk -noUUID $(readlink -f /dev/disk/by-partlabel/foobar)
    af419263-9168-49a5-b8ec-dd9852dd039f
    • [^] # Re: ce qui donnerait :

      Posté par  (site Web personnel) . Évalué à 2 (+1/-0).

      Je n'ai pas de PARTLABEL sous la main pour tester mais ça fonctionne avec LABEL= et PARTUUID= à tout le moins :

      kibi@armor:~$ /sbin/blkid -t PARTUUID="63e124c2-01" -o device
      /dev/sda1
      

      Il y a plein d'options sympathiques dans blkid et lsblk, je te laisse faire ton marché. :)

      Debian Consultant @ DEBAMAX

  • # getline

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

    J'utilise déjà awk pour générer les appels mkfs, d'où la raison d'essayer de faire court, parce qu'évaluer un awk qui génère des commandes qui appellent awk, c'est vraiment pas génial de mon point de vue.

    Si tu lances une commande depuis awk (indépendamment du fait que ce soit une bonne idée ou non dans ce cas précis…), tu n'as aucune raison de lancer un autre awk pour parser la sortie de cette commande.
    Tu utilises la syntaxe command | getline [var], et tu travailles directement sur var ou $0 dans le awk parent.

Envoyer un commentaire

Suivre le flux des commentaires

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