45 votes

Quel est le meilleur moyen d'obtenir des informations sur les lecteurs actuellement non montés ?

Tout d'abord, la situation : J'ai un ordinateur Linux avec deux baies de disque eSATA qui acceptent des disques SSD amovibles. J'essaie d'écrire une petite application GUI qui facilite la montée/démontage/formatage/sauvegarde/etc des disques que l'utilisateur insère dans ces baies.

Ça marche pour la plupart. Cependant, un petit problème est que je ne sais pas comment obtenir des informations sur ce qui se trouve sur le disque inséré avant que les disques soient montés avec succès.

Donc, par exemple, si l'utilisateur insère un disque que je ne peux pas monter (par exemple parce qu'il n'est pas formaté, ou formaté avec un système de fichiers inattendu), tout ce que mon application peut dire c'est "Échec de montage du disque".

Ce n'est pas très satisfaisant, car si le disque n'est pas formaté, l'utilisateur voudra probablement le formater... mais s'il contient des données d'un système de fichiers non reconnu, l'utilisateur ne voudra probablement PAS le formater... ou du moins, je veux être capable de l'avertir qu'en le faisant, il effacera potentiellement des données précieuses.

Donc ma question est : y a-t-il une méthode pour interroger des informations de base (surtout le type de système de fichiers) d'un disque qui ne nécessite pas que le disque soit déjà monté ? Ou dois-je juste essayer de le monter avec différents systèmes de fichiers connus jusqu'à ce qu'une des tentatives de montage réussisse, et donner un message vague de "soyez vigilants" si aucune d'entre elles ne réussit?

En cas d'importance, les chemins que j'utilise pour monter les disques dans les baies de disque sont :

/dev/disk/by-path/pci-0000:00:1f.2-scsi-2:0:0:0
/dev/disk/by-path/pci-0000:00:1f.2-scsi-1:0:0:0

60voto

jammus Points 1796

Si les lecteurs sont démontés, vous pouvez faire plusieurs choses.

Vous pouvez utiliser une commande comme fdisk -l ou sfdisk -l pour lister les partitions. Juste le type de partition pourrait vous donner des informations utiles si les partitions ont été correctement configurées.

# sfdisk -l

Disk /dev/sda: 4177 cylindres, 255 têtes, 63 secteurs/ piste
Unités = cylindres de 8225280 octets, blocs de 1024 octets, en comptant à partir de 0

   Device Boot Start     End   #cyls    #blocks   Id  System
/dev/sda1   *      0+     30      31-    248976   83  Linux
/dev/sda2         31    4176    4146   33302745   8e  Linux LVM
/dev/sda3          0       -       0          0    0  Vide
/dev/sda4          0       -       0          0    0  Vide

Si elle est présente sur votre système, vous pouvez utiliser la commande vol_id sur une partition pour retourner des détails utiles (une partie du paquet udev sur Debian). Cela vous indiquera généralement quel système de fichiers est réellement utilisé.

# vol_id /dev/sda1

ID_FS_USAGE=filesystem
ID_FS_TYPE=ext3
ID_FS_VERSION=1.0
ID_FS_UUID=32c44d53-9025-4d10-8f36-75c166547bd5
ID_FS_UUID_ENC=32c44d53-9025-4d10-8f36-75c166547bd5
ID_FS_LABEL=
ID_FS_LABEL_ENC=
ID_FS_LABEL_SAFE=

La commande lshw -class disk vous donnera certains détails sur le type de disque. Vous voudrez peut-être utiliser cela si vous êtes curieux du numéro de série réel du disque.

# lshw -class disk

  *-disk
       description: Disque ATA
       product: VBOX HARDDISK
       identifiant matériel: 0.0.0
       informations bus: scsi@0:0.0.0
       nom logique: /dev/sda
       version: 1.0
       série: VB169e93fb-d1e0fd97
       taille: 32GiB (34Go)
       capacités: partitionné partitionné:dos
       configuration: ansiversion=5 signature=000d39f8

Si vous êtes certain qu'il y a un système de fichiers particulier comme ext2/3 dessus, alors vous pouvez utiliser l'outil spécifique au système de fichiers tune2fs pour examiner plus de détails.

# tune2fs -l /dev/sda1

tune2fs 1.41.3 (12-Oct-2008)
Nom du volume du système de fichiers:   
Dernier montage sur:          
UUID du système de fichiers:          8cbdf102-05c7-4ae4-96ea-681cf9b11914
Numéro magique du système de fichiers:  0xEF53
Révision #:    1 (dynamique)
Fonctionnalités du système de fichiers:      type sparse_super
Options de montage par défaut:    (aucune)
État du système de fichiers:         non propre
Comportement des erreurs:          Continuer
Type d'OS du système de fichiers:       Linux
Nombre d'inodes:              124496
Nombre de blocs:              248976
Nombre de blocs réservés:     12448
Blocs libres:              212961
Inodes libres:              124467
Premier bloc:              1
Taille du bloc:               1024
Taille des fragments:            1024
Blocs par groupe:         8192
Fragments par groupe:      8192
Inodes par groupe:         4016
Inodes par bloc de groupe:   502
Dernière heure de montage:          Jeu  7 oct 15:34:42 2010
Dernière heure d'écriture:          Jeu  7 oct 15:34:42 2010
Compte de montage:              4
Compte de montages maximum:      30
Dernière vérification:             Mer 15 sep 09:29:03 2010
Intervalle de vérification:           0 ()
UID des blocs réservés:      0 (utilisateur root)
GID des blocs réservés:      0 (groupe root)
Premier inode:              11
Taille d'inode:           128

Un autre outil utile est lsblk.

# lsblk 

NOM                MAJ:MIN RM   TAILLE RO TYPE POINT DE MONTAGE
sda                   8:0    0    30G  0 disque 
sda1                8:1    0    30G  0 part 
  vg1-root (dm-0) 254:0    0  23.3G  0 lvm  /
  vg1-swap (dm-1) 254:1    0   1.9G  0 lvm  [SWAP]
sr0                  11:0    1  1024M  0 rom  

Si vous avez parted installé, vous pouvez exécuter une commande comme celle-ci

parted /dev/sda print all

Modèle: ATA VBOX HARDDISK (scsi)
Disk /dev/sda: 34.4GB
Taille du secteur (logique/physique): 512 octets/512 octets
Table de partitions: msdos

Numéro  Début   Fin     Taille  Type     Système de fichiers  Drapeaux
 1      32.3ko  255Mo   255Mo   primaire  ext2         boot 
 2      255Mo   34.4GB  34.1GB  primaire               lvm  

Modèle: Linux device-mapper (linear) (dm)
Disk /dev/mapper/vg1root: 32.6GB
Taille du secteur (logique/physique): 512 octets/512 octets
Table de partitions: loop

Numéro  Début  Fin     Taille  Système de fichiers  Drapeaux
 1      0.00B  32.6GB  32.6GB  ext3              

Quoi qu'il en soit, je vous suggère de jeter un coup d'œil aux sources de udev ou parted.

5voto

James Points 7442

Une autre commande utile est blkid - elle renvoie des informations similaires à vol_id mais peut également analyser tous les périphériques du système, plutôt que d'exiger qu'un périphérique soit transmis.

Pour forcer blkid à analyser tous les périphériques au lieu d'utiliser des informations mises en cache, exécutez blkid -c /dev/null (vous avez besoin de l'autorisation de lecture sur les périphériques de blocage, vous devrez donc généralement l'exécuter en tant que root)

1voto

Stefan Lasiewski Points 22459

Voici une suggestion de IBM : SCSI - Ajout à chaud, suppression, rescan des périphériques SCSI : Rescan d'un périphérique SCSI. Cela permettra de rescaner cette adresse SCSI pour de nouveaux périphériques, et vous pourrez ensuite lire les informations dans /var/log/messages. Certains autres outils de disque fonctionneront également, sans que vous ayez à monter le lecteur.

echo 1 > /sys/bus/scsi/drivers/sd//block/device/rescan

En fait, j'ai essayé quelque chose légèrement différent hier, et cela a fonctionné (système RHEL4) :

cd /sys/bus/scsi/devices
echo > 0\:0\:0\:0/rescan

1voto

Frank Breitling Points 183

Un aperçu simple de toutes les partitions trouvées par le noyau donne

cat /proc/partitions

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X