Qual è il modo migliore per ottenere informazioni sulle unità attualmente non montate?


38

Innanzitutto, la situazione: ho un computer Linux con due alloggiamenti per unità eSATA che accettano unità SSD rimovibili. Sto cercando di scrivere una piccola applicazione GUI che renda più facile per l'utente montare / smontare / formattare / eseguire il backup / ecc. Sulle unità che inserisce in questi alloggiamenti.

Funziona tutto principalmente. Un piccolo problema, tuttavia, è che non so come trovare alcuna informazione su cosa c'è nelle unità inserite fino a quando le unità non sono state montate correttamente.

Ad esempio, se l'utente inserisce un'unità che non riesco a montare (ad es. Perché non è formattata o formattata con un filesystem inatteso), tutto ciò che la mia app può dire al riguardo è "Impossibile montare l'unità".

Questo non è molto soddisfacente, perché se l'unità non è formattata, l'utente probabilmente vorrà formattarlo ... ma se l'unità contiene dati da un filesystem non riconosciuto, probabilmente l'utente NON vorrà formattarlo .... o almeno, voglio essere in grado di avvertirlo che così facendo cancellerà dati potenzialmente preziosi.

Quindi la mia domanda è: esiste un metodo per interrogare alcune informazioni di base (in particolare il tipo di filesystem) da un'unità che non richiede che l'unità sia già montata? O devo solo provare a montarlo con vari filesystem conosciuti fino a quando uno dei tentativi di montaggio non riesce, e dare un vago messaggio "stai attento" se nessuno di loro lo fa?

Nel caso in cui sia importante, i percorsi che utilizzo per montare le unità negli alloggiamenti sono:

/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

Risposte:


55

Se le unità sono smontate, ci sono diverse cose che puoi fare.

È possibile utilizzare un comando come fdisk -lo sfdisk -lper elencare le partizioni. Solo il tipo di partizione può darti alcune informazioni utili se le partizioni dove setup correct.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

Se è presente sul tuo sistema puoi usare il comando vol_idcontro una partizione per restituire alcuni dettagli utili (parte del pacchetto udev su Debian). Questo in genere ti dirà quale file system viene effettivamente utilizzato.

# 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=

Il comando lshw -class diskti fornirà alcuni dettagli sul tipo di unità. Si consiglia di utilizzare questo se si è curiosi del numero di serie effettivo dell'unità.

# 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

Se sei sicuro che esista un particolare filesystem come ext2 / 3, puoi usare lo strumento tune2fs specifico del filesystem per esaminare maggiori dettagli.

# 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 altro strumento utile è 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  

Se hai installato la partizione puoi eseguire un comando come questo

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              

Ad ogni modo, ti suggerisco di dare un'occhiata a udev o alla fonte separata .


12
Da allora 'vol_id' è stato ribattezzato 'blkid', per chiunque capiti di imbattersi in questa grande risposta.
Dave S.,

lsblk -i -o kname,mountpoint,fstype,size,maj:min,name,state,rm,rota,ro,type,label,model,serial
sjas,

risposta meravigliosa !!
Sufiyan Ghori,

5

Un altro comando utile è blkid: restituisce informazioni simili vol_idma può anche scansionare tutti i dispositivi nel sistema, piuttosto che richiedere il passaggio di un dispositivo.

Per forzare la blkidscansione di tutti i dispositivi invece di utilizzare le informazioni memorizzate nella cache, esegui blkid -c /dev/null(devi disporre dell'autorizzazione di lettura sui dispositivi a blocchi, quindi di solito dovrai eseguirli come root)


Un utente anonimo voleva aggiungere: tutto ciò è utile, ma "vol-id" è stato ora completamente sostituito da "blkid"; né SuSE né Debian hanno più "vol-id" nei loro repository. Esegui whereis blockiddalla riga di comando (o man blockid), troverai se è caricato. Esegui come root: blkid /dev/sdb1gives (ad esempio): /dev/sdb1: SEC_TYPE="msdos" LABEL="DR-05" UUID="8031-5963" TYPE="vfat"vale la pena guardare anche la pagina man.
Chris S,

1

Ecco un suggerimento di IBM: SCSI - Aggiunta, rimozione e nuova scansione a caldo di dispositivi SCSI: Riscansione di un dispositivo SCSI . Questo eseguirà una nuova scansione dell'indirizzo SCSI per i nuovi dispositivi, quindi sarai in grado di leggere le informazioni in / var / log / messages. Alcuni altri strumenti su disco funzioneranno anche senza il montaggio dell'unità.

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

In realtà ho provato qualcosa di leggermente diverso ieri, e ha funzionato (sistema RHEL4):

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

0

Dà una semplice panoramica di tutte le partizioni trovate dal kernel

cat /proc/partitions
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.