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 MicP . Évalué à 3. Dernière modification le 07 août 2020 à 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/
[^] # Re: fichier de périphérique
Posté par freem . Évalué à 2.
Désolé, j'ai la tête dans mon script, du coup je suis un peu embrouillé pour expliqué… tu as raison.
Bien vu, j'avais zappé que ce sont des symlinks. C'est nettement plus simple ainsi en effet.
# Mais …
Posté par MicP . Évalué à 2. Dernière modification le 07 août 2020 à 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
dusystème de fichiers
de la partition[^] # Re: Mais …
Posté par freem . Évalué à 2.
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 MicP . Évalué à 1.
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.Oui, l'
UUID
et leLABEL
permettent d'identifier un système de fichiers,et donc, si pas de système de fichiers alors pas d'
UUID
niLABEL
[^] # Re: Mais …
Posté par freem . Évalué à 2.
C'est ce qui m'a été suggéré en 1ère réponse :)
# ce qui donnerait :
Posté par MicP . Évalué à 1. Dernière modification le 07 août 2020 à 15:16.
[^] # Re: ce qui donnerait :
Posté par Cyril Brulebois (site web personnel) . Évalué à 2.
Je n'ai pas de
PARTLABEL
sous la main pour tester mais ça fonctionne avecLABEL=
etPARTUUID=
à tout le moins :Il y a plein d'options sympathiques dans
blkid
etlsblk
, je te laisse faire ton marché. :)Debian Consultant @ DEBAMAX
# getline
Posté par balkany . Évalué à 3. Dernière modification le 07 août 2020 à 19:11.
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.
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.