Frage Was ist der beste Weg, um Informationen über derzeit nicht gemountete Laufwerke zu erhalten?


Zunächst einmal die Situation: Ich habe einen Linux-Computer mit zwei eSATA-Laufwerkschächten, die austauschbare SSD-Laufwerke akzeptieren. Ich versuche, eine kleine GUI-Anwendung zu schreiben, die es dem Benutzer einfacher macht, die Laufwerke, die er in diese Schächte stellt, zu mounten / unmounten / formatieren / sichern / etc.

Alles funktioniert meistens. Ein kleines Problem ist jedoch, dass ich nicht weiß, wie ich Informationen darüber herausfinden kann, was auf dem / den eingefügten Laufwerk (en) steckt, bevor die Laufwerke erfolgreich installiert wurden.

Wenn der Benutzer beispielsweise ein Laufwerk einlegt, das ich nicht mounten kann (z. B. weil es unformatiert oder mit einem unerwarteten Dateisystem formatiert ist), kann alle meine App sagen, dass "Laufwerk nicht mounten konnte".

Das ist nicht sehr befriedigend, denn wenn das Laufwerk unformatiert ist, wird der Benutzer es wahrscheinlich formatieren wollen ... aber wenn das Laufwerk Daten von einem nicht erkannten Dateisystem enthält, wird der Benutzer es wahrscheinlich NICHT formatieren wollen .... oder zumindest möchte ich ihn warnen können, dass er damit potenziell wertvolle Daten löschen wird.

Meine Frage ist also: Gibt es irgendeine Methode, um einige grundlegende Informationen (insbesondere den Dateisystemtyp) von einem Laufwerk abzufragen, das nicht erfordert, dass das Laufwerk bereits gemountet ist? Oder muss ich einfach versuchen, es mit verschiedenen bekannten Dateisystemen zu mounten, bis einer der Mount-Versuche erfolgreich ist, und eine vage "Sei vorsichtig" -Nachricht zu geben, wenn keiner von ihnen das tut?

Wenn es darauf ankommt, sind die Pfade, die ich verwende, um die Laufwerke in den Laufwerksschächten zu montieren:

/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

36
2017-10-13 21:05


Ursprung




Antworten:


Wenn die Laufwerke abgehängt sind, können Sie verschiedene Dinge tun.

Sie können einen Befehl wie verwenden fdisk -l oder sfdisk -l um die Partitionen aufzulisten. Nur der Partitionstyp kann Ihnen nützliche Informationen geben, wenn die Partitionen korrekt eingerichtet wurden

# 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

Wenn es auf Ihrem System vorhanden ist, können Sie den Befehl verwenden vol_id gegen eine Partition, um einige nützliche Details zurückzugeben (Teil des Pakets udev auf Debian). Dies sagt Ihnen normalerweise, welches Dateisystem tatsächlich verwendet wird.

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

Der Befehl lshw -class disk gibt Ihnen einige Details über die Art des Laufwerks. Vielleicht möchten Sie dies verwenden, wenn Sie sich über die tatsächliche Seriennummer des Laufwerks im Klaren sind.

# 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

Wenn Sie sicher sind, dass es ein bestimmtes Dateisystem wie ext2 / 3 gibt, können Sie das Dateisystem spezifisch verwenden tune2fs Werkzeug, um mehr Details zu untersuchen.

# 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

Ein anderes nützliches Werkzeug ist 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  

Wenn Sie sich getrennt haben, können Sie einen Befehl wie diesen ausführen

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              

Jedenfalls schlage ich vor, dass du dir die udev oder geteilt Quelle.


52
2017-10-13 21:30



'vol_id' wurde seitdem in 'blkid' umbenannt, für jeden, der zufällig auf diese großartige Antwort stößt. - Dave S.
lsblk ist rad, danke! - Travis Reeder
lsblk -i -o kname,mountpoint,fstype,size,maj:min,name,state,rm,rota,ro,type,label,model,serial - sjas
wunderbare Antwort !! - Sufiyan Ghori


Ein weiterer nützlicher Befehl ist blkid - Es gibt ähnliche Informationen zurück vol_id Sie können aber auch alle Geräte im System scannen, anstatt dass ein Gerät übergeben werden muss.

Zwingen blkid Um alle Geräte zu durchsuchen, anstatt zwischengespeicherte Informationen zu verwenden, führen Sie blkid -c /dev/null (Sie benötigen Leseberechtigung für die Block-Geräte, so dass Sie es normalerweise als root ausführen müssen)


5
2017-10-13 21:56



Ein anonymer Benutzer wollte hinzufügen: Das ist alles nützlich, aber 'vol-id' wurde jetzt vollständig durch 'blkid' ersetzt; Weder SuSE noch Debian haben 'vol-id' in ihren Repositories mehr. Lauf whereis blockid von der Befehlszeile (oder man blockid), werden Sie feststellen, ob es geladen ist. Als root ausführen: blkid /dev/sdb1 gibt (zum Beispiel): /dev/sdb1: SEC_TYPE="msdos" LABEL="DR-05" UUID="8031-5963" TYPE="vfat" Die Manpage ist es auch wert, betrachtet zu werden. - Chris S


Hier ist ein Vorschlag von IBM: SCSI - Hot Hinzufügen, Entfernen, erneutes Scannen von SCSI-Geräten: Erneutes Scannen eines SCSI-Geräts. Dadurch wird die SCSI-Adresse für neue Geräte erneut gescannt und Sie können die Informationen in / var / log / messages lesen. Einige andere Datenträger-Tools funktionieren auch ohne das Laufwerk zu installieren.

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

Ich habe gestern etwas etwas anderes ausprobiert, und es hat funktioniert (System RHEL4):

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

1
2017-10-13 21:22





Ein einfacher Überblick über alle vom Kernel gefundenen Partitionen bietet

cat /proc/partitions

0
2018-03-03 08:49