Ich hatte letzte Woche ein Skript, das erwartete, dass mein USB SDC ist. Ich habe diesen Befehl verwendet
usb_path=`lsblk | grep sdc1 | awk '{print $7}'`
aber dann kam ich zurück und sah, dass der Stick leer war, weil der Stick SDB hieß. Was hängt also davon ab, welchen Namen der Stick bekommt? Ich hatte keine andere Festplatte eingesteckt, als er SDC bekam, und jetzt, wo er SDB heißt, ist keine andere Festplatte eingesteckt. Der einzige Unterschied, den ich sehen konnte, ist also die Zeit, aber das scheint dumm. Oh, und es ist derselbe USB-Stick wie letzte Woche.
Antwort1
Der Buchstabe b
/ c
in sdb
/ sdc
ist ein Zähler.
Die erste erkannte Festplatte erhält sda
, die zweite sdb
usw.
Buchstaben können übersprungen werden, wenn es beispielsweise beim Einstecken eines USB-Sticks zu einem vorübergehenden Verbindungsverlust kommt. Zuerst bekommt der USB-Stick sdb
, dann bricht die Verbindung ab und wird neu aufgebaut und bekommt sdc
, weil sdb
die Verbindung noch nicht freigegeben wurde.
Da Sie nicht darauf zählen können, dass dasselbe Gerät jedes Mal den gleichen Namen erhält, verfügt Ubuntu über ein Verzeichnis mit symbolischen Links zu Datenträgern, die an eine ID des Dateisystems auf dem Datenträger gebunden sind:
/dev/disk/by-uuid/
Jede Partition auf jeder Festplatte, die Sie anschließen, erhält einen Eintrag in diesem Verzeichnis und dieser bleibt für dieselbe Partition immer gleich.
Wenn Sie statt der Identität des USB-Sticks auf einen an einem bestimmten USB-Port eingesteckten USB-Stick zugreifen möchten, können Sie die Einträge in verwenden /dev/disk/by-path
.
lsblk
akzeptiert ein Argument, wenn Sie Informationen zu einem bestimmten Gerät wünschen. Statt also zu verwenden, lsblk | grep …
können Sie beispielsweise lsblk /dev/disk/by-id/1234-5678
oder verwenden.lsblk /dev/disk/by-path/pci-0000:00:2.0-usb-0:1:1.0-scsi-0:0:0:0