Wird ein USB-Stick bei jeder Montage denselben Namen haben?

9

Ich habe einen USB-Stick, mit dem täglich Daten über ein Bash-Skript gespeichert werden. Ich habe es geschafft, es für einen bestimmten Benutzer bereitzustellen, um mit dem folgenden Befehl Ordner darin schreiben zu können:

mount /dev/sdc1 /media/usb -o rw,uid=sysop,gid=sysop

Das Skript kann nach Belieben ausgeführt und Verzeichnisse erstellt werden und ist perfekt. Irgendwann wird der USB-Stick abgezogen und durch einen neuen (gleiches Modell) ersetzt. Wird der neue USB-Stick noch den Namen haben /dev/sdc1oder wird es ein anderer sein?

Wenn es sich um ein anderes handelt, wie kann ich das Mounting-Teil in mein Skript aufnehmen, damit es automatisch erstellt wird?

Gudrun
quelle
2
Die Antwort ist nein, aber Sie können das mit udev-Regeln umgehen . Sehen Sie hier für eine bessere , aber etwas veraltet Erklärung.
Satō Katsura
@AlexTartan Wenn Sie eine andere USB-Festplatte an einen anderen USB-Port anschließen, bevor sie möglicherweise SDC erhält. Ihre Einschränkung "und nichts anderes entspricht sdc1" ist also wahr. Im Allgemeinen ist dies eine sehr gefährliche Annahme, die niemals gemacht werden kann. Es ist niemals eine gute Idee, sd [az] als dauerhafte Gerätenamen zu verwenden. Dies ist ein Erbe aus Zeiten, als wir IDE-Controller mit vier statischen Ports hatten, die durch Setzen von Hardware-Jumpern und Auswählen des richtigen Kabelsteckers eingestellt werden konnten.
Ikrabbe
1
@ikrabbe, ich weiß, deshalb habe ich eine Antwort auf der Grundlage der Etikettenidentifikation gepostet (diese können etwas einfacher verwaltet werden).
Alex Tartan

Antworten:

6

Während der Zugriff über /dev/sdXyriskant ist, kann eine genauere Identifizierung durch erfolgen UUID.

Da Sie (irgendwann) erwähnen, dass Sie den USB-Stick ändern müssen, um die Kompatibilität zu gewährleisten, möchten Sie Ihren USB-Stick möglicherweise anhand eines Etiketts identifizieren. Dazu können Sie : /dev/disk/by-label/YourLabelHere.

Beachten Sie, dass Sie die Bezeichnung auf einen neuen USB-Stick setzen müssen, bevor Sie das Skript ausführen. Sie /dev/disk/by-labelist auch nur verfügbar, wenn (mindestens) ein USB-Stick angeschlossen ist (andernfalls wird er entfernt).

Details zum Einrichten des USB-Labels finden Sie hier: /ubuntu/194510/how-to-edit-label-of-usb-drive

Alex Tartan
quelle
1
Wenn Ihre Dateisysteme keine Beschriftungen haben, /dev/disk/by-id/kann dies stattdessen von Nutzen sein (was ich für meine Dateisysteme verwende).
Toby Speight
3

So gehe ich dieses Problem an, aber im Allgemeinen müssen Sie, wie Sato Katsura Ihnen sagte, eine udev-Regel schreiben.

  1. Schließen Sie Ihr Gerät an und überprüfen Sie, welches Gerät es hat (z. B. indem Sie dmesg ansehen).
  2. Als Superuser-Anruf udevadm info --query all /dev/sdc(oder was auch immer).
  3. Richten Sie eine udev-Regel ein. Hier ist ein Beispiel für mein Taschenbuch. Die Felder ID_SERIAL_SHORTund ID_FS_UUIDich lesen aus den Informationen in Schritt 2:

    SUBSYSTEM=="block", ENV{ID_SERIAL_SHORT}=="YT440900877400W000Y0", ENV{ID_FS_UUID}=="3878-D432", ENV{DEVTYPE}=="disk", SYMLINK+="pocketbook", OWNER="ingo"
    SUBSYSTEM=="block", ENV{ID_SERIAL_SHORT}=="YT440900877400W000Y0", ENV{ID_FS_UUID}=="9016-4EF8", ENV{DEVTYPE}=="disk", SYMLINK+="pocketbook-sd", OWNER="ingo"
    

    Ich habe hier EIGENTÜMER eingestellt, damit ich es mit meinem Hauptbenutzerkonto mounten kann. Auch mit meinem Taschenbuch habe ich keine Partitionen, sondern montiere die einfachen Festplatten. Wenn Sie Partitionen ändern:

    ENV{ID_PART_ENTRY_NUMBER}=="1", ENV{DEVTYPE}=="partition",
    

    für Partition Nummer 1 in den udev-Regelzeilen.

Die udev-Regeln finden Sie in /etc/udev/rules.d, wenn Sie ein vernünftiges System haben.

  1. Jetzt kannst du

    udevadm control --reload
    

    die Regeln neu laden und

    udevadm monitor
    

    um zu überwachen, was in Schritt 5 passiert.

  2. Schließen Sie Ihr USB-Gerät an und schließen Sie es an (natürlich nach dem Aushängen, bevor Sie es gemountet haben). Der Monitor sollte Sie bei der Initialisierung über das neue Gerät informieren.

  3. Überprüfen Sie, ob /dev/die richtigen Symlinks enthalten sind. In meinem Beispiel habe ich folgendes:

    brw-rw---- 1 ingo disk    8,  48 Aug  3 10:32 sdd
    brw-rw---- 1 ingo disk    8,  32 Aug  3 10:32 sdc
    lrwxrwxrwx 1 root root         3 Aug  3 10:32 pocketbook-sd -> sdd
    lrwxrwxrwx 1 root root         3 Aug  3 10:32 pocketbook -> sdc
    

Jetzt können Sie persistente Regeln mit den Symlinks /dev/pocketbookund /dev/pocketbook-sdoder wie auch immer Ihre Namen im SYMLINK-Feld der udev-Regeldatei definieren.

ikrabbe
quelle
1
Vielen Dank für Ihre Antwort. Ich werde es jedoch nicht verwenden können. Das Gerät, an dem ich arbeite, ist auf einem Vulkan installiert und der USB-Stick wird zum Speichern der dort erfassten Daten verwendet. Wir werden nur einmal alle drei Monate dorthin gehen, um den USB-Stick zu wechseln. Ich habe nur einen Fernzugriff ohne "Bildschirm" -Schnittstelle. Da der USB immer unterschiedlich sein wird, aber an denselben USB-Ports angeschlossen ist, ist es meiner Meinung nach einfacher, den SDC1-Pfad beizubehalten. Ich werde mit udev Regeln sehen, was ich tun kann.
Gudrun
0

Nur um @ alextartans Antwort hinzuzufügen.

Ich habe mein eigenes Backup-System entwickelt, das USB-Laufwerke als Ziele verwendet. Ich muss sicher sein, was wohin geht. Da UUIDs nicht besonders benutzerfreundlich sind, verlasse ich mich auf Festplattenetiketten.

UUIDs sind auch etwas problematisch, da sie bei jeder Neuformatierung einer Partition eine neue eindeutige UUID erhalten, sodass alle Skripte, die diese UUID verwenden, geändert werden müssen. Ich kann der neu formatierten Partition (oder sogar einer Partition auf einem neuen / Ersatzlaufwerk) dieselbe Bezeichnung wie zuvor zuweisen und meine Skripte in Ruhe lassen.

Ich habe meine eigene einzigartige (menschenfreundliche) Beschriftungskonvention entwickelt und benutze gparted, um die verschiedenen Partitionen zu beschriften, wenn ich sie erstelle.

Wenn meine Skripte auf eine bestimmte Partition zugreifen müssen, suche ich den Gerätenamen anhand der Bezeichnung.

function get_dev {
  ## Return the device name of a partition
  ## In DEV
  ## Given its label
  ## Partition does not need to be mounted
  ## Usage get_dev <partition_label>
  ## Copyleft 04/28/2014 JPmicrosystems
  local LINE
  local VERBOSE=1  ## Verbose version
  local USAGE="ERROR Usage is: get_dev <partition_label>"
  unset DEV

  if [ -z "${1}" ]
  then
    (( VERBOSE )) && echo $USAGE
    return 1
  fi

  LINE=$(ls -l /dev/disk/by-label | grep " ${1} ")
  if (( $? ))
  then
    (( VERBOSE )) && echo "ERROR Partition [${1}] not found"
    return 1
  fi

  DEV="/dev/${LINE##*/}"
  return 0
}
Joe
quelle