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

38

Tout d’abord, la situation: j’ai un ordinateur Linux avec deux baies de disques eSATA acceptant les disques SSD amovibles. J'essaie d'écrire une petite application graphique qui permet à l'utilisateur de monter / démonter / formater / sauvegarder / etc. plus facilement les lecteurs qu'il place dans ces baies.

Tout fonctionne principalement. Un petit problème, cependant, est que je ne sais pas comment trouver des informations sur le contenu des lecteurs insérés avant que les lecteurs aient été montés avec succès.

Ainsi, par exemple, si l'utilisateur insère un lecteur que je ne peux pas monter (p. Ex. Parce qu'il est non formaté ou formaté avec un système de fichiers inattendu), toute mon application peut en dire autant: "Le lecteur n'a pas pu être monté".

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

Ma question est donc la suivante: existe-t-il une méthode permettant d'interroger des informations de base (notamment le type de système de fichiers) à partir d'un lecteur ne nécessitant pas que le lecteur soit déjà monté? Ou dois-je simplement essayer de le monter avec divers systèmes de fichiers connus jusqu'à ce que l'une des tentatives de montage réussisse et donner un vague message "soyez prudent" si aucun d'entre eux ne le fait?

Au cas où cela serait important, les chemins que j'utilise pour monter les lecteurs dans les baies de lecteur sont les suivants:

/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
Jeremy Friesner
la source

Réponses:

55

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

Vous pouvez utiliser une commande comme fdisk -lou sfdisk -lpour lister les partitions. Juste le type de partition peut vous donner des informations utiles si les partitions où la configuration est correcte.y

# sfdisk -l

Disk /dev/sda: 4177 cylinders, 255 heads, 63 sectors/track
Units = cylinders of 8225280 bytes, blocks of 1024 bytes, counting from 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  Empty
/dev/sda4          0       -       0          0    0  Empty

S'il est présent sur votre système, vous pouvez utiliser la commande vol_idcontre une partition pour retourner des détails utiles (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 diskvous donnera quelques détails sur le type de lecteur. Vous voudrez peut-être utiliser cette option si vous souhaitez connaître le numéro de série du lecteur.

# lshw -class disk

  *-disk
       description: ATA Disk
       product: VBOX HARDDISK
       physical id: 0.0.0
       bus info: scsi@0:0.0.0
       logical name: /dev/sda
       version: 1.0
       serial: VB169e93fb-d1e0fd97
       size: 32GiB (34GB)
       capabilities: partitioned partitioned:dos
       configuration: ansiversion=5 signature=000d39f8

Si vous êtes sûr qu'il existe un système de fichiers particulier comme ext2 / 3, vous pouvez utiliser l' outil tune2fs spécifique au système de fichiers pour examiner plus de détails.

# tune2fs -l /dev/sda1

tune2fs 1.41.3 (12-Oct-2008)
Filesystem volume name:   <none>
Last mounted on:          <not available>
Filesystem UUID:          8cbdf102-05c7-4ae4-96ea-681cf9b11914
Filesystem magic number:  0xEF53
Filesystem revision #:    1 (dynamic)
Filesystem features:      filetype sparse_super
Default mount options:    (none)
Filesystem state:         not clean
Errors behavior:          Continue
Filesystem OS type:       Linux
Inode count:              124496
Block count:              248976
Reserved block count:     12448
Free blocks:              212961
Free inodes:              124467
First block:              1
Block size:               1024
Fragment size:            1024
Blocks per group:         8192
Fragments per group:      8192
Inodes per group:         4016
Inode blocks per group:   502
Last mount time:          Thu Oct  7 15:34:42 2010
Last write time:          Thu Oct  7 15:34:42 2010
Mount count:              4
Maximum mount count:      30
Last checked:             Wed Sep 15 09:29:03 2010
Check interval:           0 (<none>)
Reserved blocks uid:      0 (user root)
Reserved blocks gid:      0 (group root)
First inode:              11
Inode size:           128

Un autre outil utile est lsblk .

# lsblk 

NAME                MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda                   8:0    0    30G  0 disk 
└─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 installé une partition, vous pouvez exécuter une commande comme celle-ci.

parted /dev/sda print all

Model: ATA VBOX HARDDISK (scsi)
Disk /dev/sda: 34.4GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos

Number  Start   End     Size    Type     File system  Flags
 1      32.3kB  255MB   255MB   primary  ext2         boot 
 2      255MB   34.4GB  34.1GB  primary               lvm  

Model: Linux device-mapper (linear) (dm)
Disk /dev/mapper/vg1root: 32.6GB
Sector size (logical/physical): 512B/512B
Partition Table: loop

Number  Start  End     Size    File system  Flags
 1      0.00B  32.6GB  32.6GB  ext3              

Quoi qu'il en soit, je vous suggère de jeter un coup d’œil sur la source udev ou Parted .

Zoredache
la source
12
"vol_id" a depuis été renommé "blkid", pour tous ceux qui tombent par hasard sur cette excellente réponse.
Dave S.
lsblk -i -o kname,mountpoint,fstype,size,maj:min,name,state,rm,rota,ro,type,label,model,serial
sjas
réponse merveilleuse !!
Sufiyan Ghori
5

Une autre commande utile est la suivante blkid: elle renvoie des informations similaires à, vol_idmais peut également analyser tous les périphériques du système, au lieu d'exiger la transmission d'un périphérique.

Pour forcer l' blkidanalyse de tous les périphériques au lieu d'utiliser des informations en cache, exécutez blkid -c /dev/null(vous devez disposer d'une autorisation de lecture sur les périphériques en mode bloc, vous devrez donc généralement l'exécuter en tant que root).

James
la source
Un utilisateur anonyme a voulu ajouter: Tout cela est utile, mais "vol-id" a été entièrement remplacé par "blkid"; ni SuSE ni Debian n'ont plus de 'vol-id' dans leurs dépôts. Exécuter à whereis blockidpartir de la ligne de commande (ou man blockid), vous saurez si elle est chargée. Exécuter en tant que root: blkid /dev/sdb1donne (par exemple): /dev/sdb1: SEC_TYPE="msdos" LABEL="DR-05" UUID="8031-5963" TYPE="vfat"La page de manuel mérite également une attention particulière.
Chris S
1

Voici une suggestion d’ IBM: SCSI - Ajout, suppression, réanalyse à chaud des périphériques SCSI: Réanalyse d’un périphérique SCSI . Cela réanalysera cette adresse SCSI à la recherche de nouveaux périphériques, et vous pourrez alors lire les informations dans / var / log / messages. Certains autres outils de disque fonctionneront également sans que vous montiez le lecteur.

echo 1 > /sys/bus/scsi/drivers/sd/<SCSI-ID>/block/device/rescan

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

cd /sys/bus/scsi/devices
echo > 0\:0\:0\:0/rescan
Stefan Lasiewski
la source
0

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

cat /proc/partitions
Frank Breitling
la source