Zunächst die Situation: Ich habe einen Linux-Computer mit zwei eSATA-Laufwerkschächten, die austauschbare SSD-Laufwerke unterstützen. Ich versuche, eine kleine GUI-Anwendung zu schreiben, die es dem Benutzer erleichtert, die Laufwerke, die er in diese Einschübe legt, zu mounten / zu entmounten / zu formatieren / zu sichern / usw.
Es funktioniert meistens alles. Ein kleines Problem ist jedoch, dass ich erst nach erfolgreicher Bereitstellung der Laufwerke herausfinden kann, was sich auf den eingelegten Laufwerken befindet.
Wenn der Benutzer beispielsweise ein Laufwerk einfügt, das ich nicht bereitstellen kann (z. B. weil es nicht formatiert ist oder mit einem unerwarteten Dateisystem formatiert wurde), kann meine App nur sagen, dass das Bereitstellen des Laufwerks fehlgeschlagen ist.
Dies ist nicht sehr zufriedenstellend, da der Benutzer das Laufwerk wahrscheinlich formatieren möchte, wenn es nicht formatiert ist. Wenn das Laufwerk jedoch Daten aus einem nicht erkannten Dateisystem enthält, möchte der Benutzer es wahrscheinlich NICHT formatieren Zumindest möchte ich ihn warnen können, dass er auf diese Weise potenziell wertvolle Daten löscht.
Meine Frage lautet also: Gibt es eine Methode zum Abfragen einiger grundlegender Informationen (insbesondere des Dateisystemtyps) von einem Laufwerk, für die es nicht erforderlich ist, dass das Laufwerk bereits bereitgestellt ist? Oder muss ich nur versuchen, es mit verschiedenen bekannten Dateisystemen zu mounten, bis einer der Mount-Versuche erfolgreich war, und eine vage Meldung "Sei vorsichtig" ausgeben, wenn keiner von ihnen dies tut?
Falls es darauf ankommt, sind die Pfade, die ich verwende, um die Laufwerke in den Laufwerksschächten zu mounten:
/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
quelle
lsblk -i -o kname,mountpoint,fstype,size,maj:min,name,state,rm,rota,ro,type,label,model,serial
Ein weiterer nützlicher Befehl ist
blkid
: Er gibt ähnliche Informationen zurück wie der Befehlvol_id
, kann jedoch auch alle Geräte im System scannen, anstatt dass ein Gerät übergeben werden muss.Um zu erzwingen
blkid
, dass alle Geräte gescannt werden, anstatt zwischengespeicherte Informationen zu verwenden, führenblkid -c /dev/null
Sie aus (Sie benötigen Leseberechtigung für die blockierten Geräte, sodass Sie diese normalerweise als Root ausführen müssen).quelle
whereis blockid
über die Befehlszeile (oderman blockid
) aus, um festzustellen, ob es geladen ist. Run as root:blkid /dev/sdb1
gives (zum Beispiel):/dev/sdb1: SEC_TYPE="msdos" LABEL="DR-05" UUID="8031-5963" TYPE="vfat"
Die Manpage ist auch einen Blick wert.Hier ist ein Vorschlag von IBM: SCSI - Hot-Add, Remove, Rescan von SCSI-Geräten: Rescan eines SCSI-Geräts . Dadurch wird diese SCSI-Adresse erneut nach neuen Geräten durchsucht. Anschließend können Sie die Informationen in / var / log / messages lesen. Einige andere Festplattentools funktionieren auch, ohne dass Sie das Laufwerk einbinden müssen.
Ich habe gestern tatsächlich etwas anderes ausprobiert und es hat funktioniert (RHEL4-System):
quelle
Eine einfache Übersicht aller vom Kernel gefundenen Partitionen gibt
quelle