Puis-je étiqueter un périphérique de disque plutôt qu'une partition?

24

Je connais le programme e2label et ses amis pour attacher une étiquette à une partition de disque, par exemple

e2label /dev/sda1 bla

Ce que je veux faire est quelque chose de différent: je veux créer une étiquette pour un disque dur, c'est-à-dire pour / dev / sda, pas pour une partition.

Est-ce possible et si oui, comment?

EDIT: Contexte: Dans un cas avec plusieurs baies HD, je voudrais mettre des étiquettes (en papier) sur la porte de la baie physique et mettre logiquement la même étiquette sur le disque que j'y ai inséré.

EDIT2: Il s'agit du serveur Ubuntu Linux 12.04.

EDIT3: Sur les partitions GPT, il y a aussi le partlabel, qui peut être défini avec par exemple parted. Voir /server//q/681088/76442

dummzeuch
la source
1
C'est une excellente question car vous êtes l'un des fitst, qui a bien compris le concept. Le but principal des étiquettes est d'identifier de manière unique une partition même lorsque les lecteurs sont énumérés différemment après le prochain redémarrage. Mais alors que les disques peuvent être réorganisés, les partitions restent fixes sur leur disque. Il serait donc plus correct de donner aux disques un UUID / label et non des partitions. Cela signifierait que les partitions seraient des noms comme UUID / 1, UUID / 2 et ainsi de suite. Il n'y a rien de mal à ajouter une étiquette à la partition, mais le cas par défaut devrait être d'utiliser un UUID par lecteur et non par partition.
Patrick Häcker
Merci, mais je doute que je sois vraiment l'un des premiers. Ce problème me contrariait depuis longtemps déjà.
dummzeuch du
1
Si vous formatez votre disque comme une table de partition GUID (GPT) au lieu de MSDOS ou unix, (en utilisant gnu parted). Votre lecteur aura un uuid, les partitions auront un uuid et le lecteur ext2 / 3/4 peut avoir son propre uuid. Je peux généralement trouver les lecteurs en utilisant / dev / disk / by-uuid et les partitions par / dev / disk / by-partuuid
Rahly

Réponses:

9

Votre question initiale contient déjà quelques bonnes réponses, je vais donc me concentrer sur l'arrière-plan de votre question, l'étiquetage des disques.

J'utilise le numéro de série du lecteur pour imprimer des étiquettes pour les baies remplaçables à chaud - c'est le meilleur moyen d'identifier le lecteur de manière unique et cohérente. Il ne changera pas quelle que soit la baie ou le contrôleur auquel il est branché.

Vous ne mentionnez pas si vous utilisez Linux ou un autre Unix, mais sous Linux, vous pouvez obtenir une liste de disques (et de partitions, que nous voulons exclure) avec leur marque, modèle et numéro de série en regardant dans le / répertoire dev / disk / by-id /. Je trouve l'alias bash suivant utile pour cela:

alias list_disks='find /dev/disk/by-id/ -iname 'scsi-*' | grep -v -- -part | while read disk ; do echo $(readlink $disk | sed -e s:../../:: ) $(basename $disk); done'

(la correspondance pour scsi-*trouver tous les disques de type "scsi", y compris les disques SATA et SAS. sur les systèmes avec uniquement des disques SATA, ata-*fonctionnerait également)

par exemple sur l'un de mes systèmes de serveur ZFS, il produit une sortie comme celle-ci:

# list_disks | Trier
sdb scsi-SATA_WDC_WD10EACS-00Z_WD-WCASJ2195141
sdc scsi-SATA_WDC_WD10EACS-00Z_WD-WCASJ2114122
sdd scsi-SATA_ST31000528AS_9VP4P4LN
sde scsi-SATA_ST31000528AS_6VP3FWAG
sdf scsi-SATA_ST31000528AS_9VP509T5
sdg scsi-SATA_ST31000528AS_9VP4RPXK
sdh scsi-SATA_OCZ-VECTOR_OCZ-0974C023I4P2G1B8
sdi scsi-SATA_OCZ-VECTOR_OCZ-8RL5XW08536INH7R
sdj scsi-SATA_ST31000528AS_9VP18CCV
sdk scsi-SATA_WDC_WD10EARS-00Y_WD-WMAV50933036

Comme vous pouvez le voir, la liste / dev / disk / by-id inclut la marque et le numéro de modèle de chaque lecteur, ainsi que le numéro de série. Ce sont tous des disques SATA branchés sur des ports SATA ou SAS sur un contrôleur LSI SAS-2008.

Si j'avais une imprimante d'étiquettes connectée, il serait assez facile d'imprimer des étiquettes en fonction de la sortie de list_disks. J'ai plutôt utilisé un ancien étiqueteur manuel parce que c'est ce que j'avais. Les étiquettes imprimées ne contiennent que le numéro de série sans la marque / le modèle (cela me suffit pour identifier le lecteur lorsque j'en ai besoin). Les étiquettes sont très utiles lorsqu'un disque tombe en panne et doit être remplacé.

cas
la source
Je pense que c'est la meilleure solution à mon problème réel, mais je ne peux pas accepter cela comme réponse car il ne répond pas à la question. À moins que je ne modifie la question, ce qui n'est probablement pas une bonne idée. Merci.
dummzeuch
pas de problème, car vous avez dit que cela ne répondait pas directement à la question. mais c'était utile et j'espère que quelqu'un d'autre le trouvera utile à l'avenir. BTW, voici une version améliorée de l'alias: alias list_disks='find /dev/disk/by-id/ -iname scsi-* -o -iname usb-* | grep -v -- -part | while read disk ; do echo $(basename $(readlink $disk)) $(basename $disk); done | sed -re "s/(usb|scsi)-// ; s/(SATA|Generic)_//" | sort'. il trouve également les disques usb et se débarrasse des données superflues dans la sortie.
cas
7

Si c'est Linux dont nous parlons, alors je pense que vous pouvez réaliser ce que vous voulez en utilisant udevpour créer un lien symbolique vers vos appareils. Si vous regardez /etc/udev/rules.d, il y a un fichier appelé 70-persistent-cd.rulesdont le contenu a des lignes comme:

SUBSYSTEM=="block", ENV{ID_CDROM}=="?*", ENV{ID_PATH}=="pci-0000:00:1f.2-scsi-:0:0:0", SYMLINK+="cdrom", ENV{GENERATED}="1"

Cela crée un lien symbolique /dev/cdromvers le périphérique identifié par son adresse de bus PCI. Vous devriez être en mesure d'accomplir ce que vous voulez en identifiant le disque dur en utilisant son (numéro de baie? Désolé aucune expérience là-bas) et en utilisant une syntaxe similaire à celle ci-dessus pour ajouter un lien symbolique comme /dev/bay1, par exemple. L'article suivant sur l'écriture de udevrègles peut être utile:

Écrire des règles udev

Remarque

Merci à la réponse de slm, veuillez noter que cette solution rend les étiquettes spécifiques aux baies de disques durs plutôt qu'aux disques à l'intérieur. Ainsi, si vous utilisez les étiquettes /dev/bay1et /dev/bay2que vous avez le disque dur A dans la baie 1 et le disque dur B dans la baie 2 , faites /dev/bay1référence au disque A et /dev/bay2au disque B. Si, pour une raison quelconque, vous échangez les disques A et B, vous vous /dev/bay1référez au disque B et /dev/bay2au disque A. D'après votre question, je crois que c'est votre intention. Corrigez-moi si j'ai tort, s'il-vous plait.

Joseph R.
la source
1
Je recommanderais d'utiliser le numéro de modèle et le numéro de série pour une telle correspondance. Il vient toujours avec les mises en garde mentionnées par slm, mais garantira que le "label" de disque reste cohérent indépendamment de ce qui lui arrive ou de tout autre disque du système.
un CVn du
Mieux vaut encore préférer le WWN unique garanti. Voir cette réponse .
Tom Hale
6

Vous n'avez pas de partitions e2label, vous les systèmes de fichiers e2label. Ces systèmes de fichiers peuvent être sur des partitions sur des fichiers, sur des disques entiers, sur des périphériques de bloc réseau ... peu importe.

Donc oui, s'il y a un système de fichiers ext2 / 3/4 directement sur /dev/sda, vous pouvez l'étiqueter exactement comme celui qui serait sur /dev/sda1.

Maintenant, s'il n'y a pas de système de fichiers directement /dev/sdamais, par exemple, /dev/sdaest partitionné (en utilisant GPT, MBR, LVM ...) en plusieurs partitions, alors évidemment vous ne pouvez pas l'utiliser e2label /dev/sda.

Dans le partitionnement GPT, vous pouvez donner des noms aux partitions, vous pouvez donc créer une grande partition à un secteur avec un nom pour aider à identifier votre disque. Vous pouvez le faire avec la ccommande dans gdisk.

Stéphane Chazelas
la source
3

Pour répondre à votre question s'il est possible d'étiqueter un disque par opposition à une partition, la réponse est non. Je ne connais aucune méthode pour le faire.

Vous pouvez utiliser la méthode décrite par @JosephR, mais sachez que cette configuration dépend du système, donc si vous deviez transférer ce disque dur vers un autre système, "l'étiquetage" qu'il a proposé serait perdu. Il n'est pas lié au disque de manière significative.

Soit dit en passant, vous pouvez voir les étiquettes et les UUID définis pour différents lecteurs à l'aide de la blkidcommande.

Exemple

$ blkid
/dev/sda1: LABEL="SYSTEM_DRV" UUID="XXXXXX" TYPE="ntfs" 
/dev/sda2: LABEL="Windows7_OS" UUID="XXXXXX" TYPE="ntfs" 
/dev/sda3: LABEL="Lenovo_Recovery" UUID="XXXX" TYPE="ntfs" 
/dev/sda5: UUID="XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX" TYPE="ext4" 
/dev/sda6: UUID="XXXXXX-XXXX-XXXX-XXXX-XXXX-XXXX-XXXXXfG93LA" TYPE="LVM2_member" 
/dev/mapper/vg_grinchy-lv_root: UUID="XXXXXX-XXXX-XXXX-XXXX-XXXX-XXXX-XXXXX" TYPE="ext4" 
/dev/mapper/vg_grinchy-lv_swap: UUID="XXXXXX-XXXX-XXXX-XXXX-XXXX-XXXX-XXXXX" TYPE="swap" 
/dev/mapper/vg_grinchy-lv_home: UUID="XXXXXX-XXXX-XXXX-XXXX-XXXX-XXXX-XXXXX" TYPE="ext4" 
slm
la source
Bon point sur la configuration dépendante du système. D'après la question, je pense que l'OP en est conscient: ils veulent étiqueter les baies de disques durs plutôt que les disques durs réels à l'intérieur. Je l'ajoute en tant que note à ma réponse au cas où.
Joseph R.
@Marco Mais blkidsemble ne lister que les partitions et non les périphériques, ce qui n'est pas ce qui intéresse le PO.
Joseph R.
Non, je voulais en fait étiqueter les disques, pas les baies. Mais je considérerai cette option.
dummzeuch
Il est possible d'étiqueter un disque, Linux lui-même le fait /dev/disk/by-idet vous pouvez le faire udev-style comme indiqué dans cette réponse .
Tom Hale
@ TomHale - vous manquez mon point. Cette étiquette n'est pas appliquée au disque dur lui-même, mais est plutôt conservée dans le système Linux lui-même. Si vous deviez retirer ce disque dur du système, l'étiquette n'est plus disponible sur les autres systèmes sur lesquels le disque dur serait monté. Cela dépend du système, donc mes conseils sont corrects. Veuillez inverser votre DV.
slm
3

Je suppose que votre objectif principal est d'identifier sans ambiguïté un disque physique. Malheureusement, je ne crois pas qu'il existe un moyen standard d'étiqueter un disque de la même manière que vous pouvez étiqueter un système de fichiers.

Une façon consiste à utiliser le modèle et le numéro de série du disque. Sous Linux, vous pouvez récupérer ces identifiants avec hdparm -i /dev/sdX. La bonne chose à propos du numéro de série est qu'il pourrait déjà être imprimé sur l'autocollant du fabricant. (Je suppose que vous vous souciez principalement de Linux depuis que vous l'avez mentionné e2labeldans votre question. Si oui, veuillez modifier votre question et ajouter la balise .)

Si vous utilisez un contrôleur RAID matériel, cela hdparmpeut ne pas fonctionner pour vous, auquel cas vous devrez plutôt consulter les outils de ligne de commande de votre contrôleur RAID.

Si vous voulez l'identifier par quelque chose dans le contenu du disque, vous pouvez utiliser le GUID du disque, qui est stocké dans l'en-tête de la table de partition GPT ( octets 56-71 de LBA 1 ). C'est une chaîne aléatoire arbitraire plutôt qu'une étiquette de votre choix, mais c'est comme une étiquette en ce sens qu'elle est persistante jusqu'à ce que vous décidiez d'encombrer la table de partition. Sous Linux, vous pouvez voir le GUID du disque à l'aide gdisk -l /dev/sdX.

200_success
la source
1

Sur la base des réponses que j'ai obtenues (merci les gars!), Il semble qu'il n'y ait aucun moyen d'étiqueter les disques mais uniquement les partitions. La réponse est donc probablement "NON".

Je vais suivre les suggestions proposées par @cas et @ 200_success: je vais coller les numéros de série des disques avec un autocollant sur les portes de la baie.

Créer une petite partition sur chaque disque juste pour pouvoir étiqueter cette partition (comme suggéré par @Stephane Chazelas) est également une option, mais je pense que ce serait trop déroutant pour quelqu'un d'autre qui pourrait avoir à maintenir le système plus tard .

dummzeuch
la source
1

Créez une udevrègle en utilisant le WWN unique garanti du disque (s'il en a un), sinon en utilisant les ID de fournisseur et de série combinés:

  1. Obtenez les valeurs requises:

    udevadm info -q all /dev/<YOUR-DEVICE-HERE> | egrep "(WWN|SERIAL|VENDOR_ID)="
    
  2. Massez ces valeurs udev rulesen:

    ENV{DEVTYPE}=="disk", ENV{ID_WWN}=="0x5000c1cd31d48c87", SYMLINK+="4TBseagate"
    
    ENV{DEVTYPE}=="disk", ENV{ID_VENDOR_ID}=="0781", ENV{ID_SERIAL}=="SanDisk_Cruzer_Blade_4C530263101009    121490-0:0", SYMLINK+="8GBsandisk"
    
  3. udevadm trigger

Pour nommer automatiquement le lien symbolique à l'aide des valeurs données par udevadm info -q all /dev/<YOUR-DEVICE>, vous pouvez utiliser:

SYMLINK+="disk-$env{ID_VENDOR}-$env{ID_SERIAL_SHORT}"

Il est également possible de créer des ENVvariables à partir de ATTRSvaleurs pour éventuellement obtenir un ID unique plus court.

Tom Hale
la source
0

Si vous ls /dev/disk-by-path/pci*...

Vous verrez certainement un chemin PCI pour chaque baie de lecteur. Il vous suffit d'utiliser 1 disque connu pour vous assurer d'obtenir les bonnes étiquettes.

Utilisez blkid /dev/disk-by-path/pci*pour voir quelles partitions de disque se trouvent sur le chemin PCI.

Vous pouvez également monter en utilisant ce chemin.

Robert
la source
0

J'aime la solution @cas, mais voici mon 2 ¢

for i in /dev/sd?
do
  echo "$i"
  /usr/sbin/smartctl -a "$i" | grep Serial
  /usr/sbin/smartctl -a "$i" | grep "Device Model"
  echo
done
MERM
la source
-1

Le disque est déjà étiqueté comme sda, sdb, sdc... Les partitions sont ensuite marquées par exemple sur sda: sda1, sda2...

Vous pouvez répertorier toutes les étiquettes des disques et des partitions avec ls /dev/sd*

Alko
la source
4
Malheureusement, ces noms de périphériques changent si je déplace le disque d'un ordinateur à un autre ou d'un contrôleur à un autre.
dummzeuch