USB-Stick mit Umlauten in Dateinamen mounten

kraekers

Well-Known Member
Moinsen liebes Team,

ich google mir gerade einen Wolf, um herauszufinden wie ich unter OpenBSD einen USB-Stick mounte
auf dem sich Dateien mit "Geman Umlauts" befinden. Unter FreeBSD habe ich immer ein

Code:
# mount_msdosfs -L de_DE.UTF-8 /dev/da0s1 /mnt

abgesetzt. Unter OpenBSD scheint dies nicht zu funktionieren.

Hat vielleicht jemand einen Tipp?

Danke im Voraus und

beste Grüße

kraekers
 
Basierend auf deiner Frage kann das alles sein.... Vom falschen Treiber, ueber ein falsches Filesystem bis hin zu "USB Stick falschrum eingesteckt".
EDIT: Oder du hast das falsche Device genommen?

Du musst uns schon ein wenig mehr Informationen geben!
 
Zuletzt bearbeitet:
bei mir wird der usbstick immer von /dev/sd2i gemounted, WENN ich ihn erst nach dem booten des Rechners eingesteckt habe. Was sagt dmesg über usb?
 
Ich mache das meistens so:

1. USB-Stick einstecken
2. # dmesg checken

Das sieht bei mir dann z.B. so aus:
Code:
# dmesg
...
sd2 at scsibus4 targ 1 lun 0: <JetFlash, Transcend 32GB, 1100> removable serial.85641000RM4CN8WPQN42
sd2: 30960MB, 512 bytes/sector, 63406080 sectors

3. # disklabel -e sd2 eingeben, um zu schauen, welche Partitionen diese Disk hat.

Das sieht bei mir dann z.B. so aus:
Code:
...
16 partitions:
#                size           offset  fstype [fsize bsize   cpg]
  a:          1637376             1024  4.2BSD   2048 16384 16142
  c:         63406080                0  unused
  i:              960               64   MSDOS
...

Die gesuchte MSDOS-Partition ist i. disklabel mit :q! beenden. (MSDOS-Partitionen haben meistens i).

4. # mount /dev/sd2i /mnt

Code:
# mount | grep sd2
/dev/sd2i on /mnt type msdos (local)

Vor dem rausziehen des USB-Sticks sollte man das gemountete /mnt directory wieder mit # cd verlassen und dann mit # umount /mnt unmounten. Ansonsten die ueblichen Quellen: mount(8), locale(1).

Umlaute sind im Dateinamen kein Problem des Dateisystems, sondern der locale. Wenn die locale auf UTF-8 gesetzt ist, werden die Dateinamen auch mit Umlauten korrekt angezeigt.

Code:
cr@hal:~$ touch föäü.txt
cr@hal:~$ ls | grep .txt
föäü.txt
cr@hal:~$ locale
LANG=en_US.UTF-8
LC_COLLATE="en_US.UTF-8"
LC_CTYPE=en_US.UTF-8
LC_MONETARY="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_ALL=
cr@hal:~$
 
Zuletzt bearbeitet:
Umlaute sind im Dateinamen kein Problem des Dateisystems, sondern der locale.
wobei es aber auch Dateisystem-Locale gibt und bei FreeBSD folgen die bei mount_msdosfs der Option -L
aus der man:
Code:
     -L locale
             Specify locale name used for file name conversions for DOS and
             Win'95 names.  By default ISO 8859-1 assumed as local character
             set.
             ...
             EXAMPLES
     To mount a Russian MS-DOS file system located in /dev/ada1s1:

           mount_msdosfs -L ru_RU.KOI8-R -D CP866 /dev/ada1s1 /mnt

Der Aufruf von oben müsste also passen, wenn das msdos dateisystem dies auch versteht, was meist nicht der Fall ist, weil die oft noch nicht UTF machen.
Besonders lustig kann das dann sein, wenn man Sticks durch mehrere Systeme schleppt und manchmal so und dann wieder anders eingebunden wird.

Hier ist erst gründlich hingucken wichtig und dann kann iconv dein Freund werden.

edit: aus dem Beispiel sieht man nebenbei ein weiteres Ding: die Code-Page. Ansonsten kann auch ein Blick auf -u und -g nicht schaden, falls nur ein bestimmter System-User vielleicht UTF-8 kann oder so.
 
Pardon,

in der Tat ein einwenig dämlich ausgedrückt.

Den Stick bekomme ich gemounted, es befinden sich jedoch Dateien mit Umlauten darauf,
die halt vom Dateinamen mit falscher Kodierung angezeigt werden. Der Stick wurde mit FAT32 formatiert.

Eingebunden wird dieser wie folgt:

Code:
doas mount -t msdos /dev/sd3i /home/kraeker/usb

Als System verwende ich OpenBSD 7.7 mit XFCE.

Die Umlaute werden ansonsten im System korrekt dargestellt.

Code:
fäüö.txt
opbtst$ locale
LANG=
LC_COLLATE="de_DE.UTF-8"
LC_CTYPE="de_DE.UTF-8"
LC_MONETARY="de_DE.UTF-8"
LC_NUMERIC="de_DE.UTF-8"
LC_TIME="de_DE.UTF-8"
LC_MESSAGES="de_DE.UTF-8"
LC_ALL=de_DE.UTF-8

Ich sehe gerade, dass LANG nicht gesetzt ist. Da muss ich noch einmal schauen.

BG

Kraekers
 
Ich habs auch gerade nochmal probiert.

Mit einer (unter OpenBSD erzeugten) Partition funktioniert es bei mir.
Keine Ahnung, ob es dir hilft, aber hier ist das log von meinem Experiment:

Code:
root@wasserkocher:[/home/dettus]    Mon May 26, 20:39:17
0; fdisk /dev/rsd8c 
Disk: /dev/rsd8c    geometry: 3805/255/63 [61132800 Sectors]
Offset: 0    Signature: 0xAA55
            Starting         Ending         LBA Info:
 #: id      C   H   S -      C   H   S [       start:        size ]
-------------------------------------------------------------------------------
 0: 0C      1   0   1 -    500 254  63 [       16065:     8032500 ] Win95 FAT32L
 1: 00      0   0   0 -      0   0   0 [           0:           0 ] Unused
 2: 00      0   0   0 -      0   0   0 [           0:           0 ] Unused
 3: 00      0   0   0 -      0   0   0 [           0:           0 ] Unused
root@wasserkocher:[/home/dettus]    Mon May 26, 20:39:34
0; disklabel /dev/sd8c
# /dev/sd8c:
type: SCSI
disk: SCSI disk
label: Transcend 32GB 
duid: 0000000000000000
flags:
bytes/sector: 512
sectors/track: 63
tracks/cylinder: 255
sectors/cylinder: 16065
cylinders: 3805
total sectors: 61132800
boundstart: 0
boundend: 61132800

16 partitions:
#                size           offset  fstype [fsize bsize   cpg]
  c:         61132800                0  unused                   
  i:          8032500            16065   MSDOS                   
root@wasserkocher:[/home/dettus]    Mon May 26, 20:39:42
0; mount /dev/sd8i /mnt/
root@wasserkocher:[/home/dettus]    Mon May 26, 20:39:48
0; ls -l /mnt/
total 0
-rw-r--r--  1 root  wheel  0 May 26 20:38 NÖprob.txt
root@wasserkocher:[/home/dettus]    Mon May 26, 20:39:52
0; umount /mnt/
root@wasserkocher:[/home/dettus]    Mon May 26, 20:39:54
0; locale
LANG=en_US.UTF-8
LC_COLLATE="en_US.UTF-8"
LC_CTYPE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_ALL=
 
Moin,
danke Euch allen. Ob XFCE konkret mein Problem ist kann ich nicht beurteilen. Fakt ist, dass ich unter FreeBSD (XFCE) auf den Stick schreibe und beim Auslesen unter OpenBSD (XFCE) Konvertierungsfehler in den Dateinamen habe. Ich muss schauen, ob evtl. der Automounter unter FreeBSD das Problem verursacht. Werde auch einmal bsdisks testen. Wenn ich unter FreeBSD auf den Stick schreibe und ihn unter FreeBSD auslese funktioniert es ja. Kann auch noch einmal testen, wie der Stick reagiert wenn ich ihn unter Windows beschreibe. Ich habe ein Skript erstellt welches unter OpenBSD über den Stick läuft und alle Konvertierungsfehler beseitigt. Ich werde weiter nachforschen.

BG
kraekers
 
Du hast bis jetzt noch nicht beschrieben, was GENAU schieflaueft.


Ein dmesg, die Ausgabe von ls und vielleicht ein paar Screenshots wuerden uns helfen dass wir dir zielgerichteter helfen koennen.
 
Ich bin zwar der Meinung, dass ich mittlerweile genug beschrieben habe. Aber noch einmal.
Wenn ich einen USB-Stick unter OpenBSD mounte, erscheinen bei Dateien und/oder Ordnern mit deutschen Umlauten Kodierfehler. So wird aus z.B. Übergabeprotokoll.PDF ein ?bergabeprotokoll.PDF (ungültige Kodierung). Bzgl. Lokalisierung habe ich ja bereits Angaben gemacht. Einen Screenshot kann ich leider nicht hochladen, warum auch immer.

Mounten funktioniert, Lokalisierung ist i.O.. Unter FreeBSD werden die Dateinamen korrekt angezeigt, unter Windows ebenso.

Ich weiß nicht, was ich noch mitteilen könnte.

Danke und

BG

Kraekers
 
Ich habe mal die OpenBSD-Mailinglist durchforstet. Dort heisst es:

OpenBSD-Dateisysteme nehmen keine Notiz von Sonderzeichen in Dateinamen. Die Dateisysteme behandeln Dateinamen als Byte-Zeichenfolgen. Die Interpretation bleibt den Userland-Tools überlassen.

Evtl. hilft es, mal ein anders Terminal zu testen? Es gibt ja diverse: Alacritty, Kitty, xterm, usw.
 
FreeBSDs -L Option für mount_msdosfs bestimmt nicht das Charset, in welchem Dateinamen angelegt werden. Stattdessen bestimmt sie, in welches Charset die Dateinamen konvertiert werden. FAT speichert je nach Implementierung immer einen Dateinamen im 8.3 Format mit OEM-Charset (DOS-Sprache für ein an die Locale des Systems angepasstes 8-Bit Charset) und wahlweise zusätzlich einen langen Namen mit maximal 255 UCS-2 Zeichen. Aus UCS-2 ging später UTF-16 hervor, in der Praxis von FAT ist UCS-2 ein Subset von UTF-16.

Daraus folgt:

  • Wenn man Dateinamen von Systemen, die korrekte UCS-2 Dateinamen geschrieben haben liest und OpenBSD keine Konvertierung in die Systemlocale unterstützt, wird man UCS-2 Suppe im Terminal oder Dateimanager sehen.
  • Wenn OpenBSD Dateinamen nicht in UCS-2 konvertiert - ich habe keine Ahnung ob es das wirklich nicht tut - landet UTF-8 oder Schlimmeres an einer Stelle, wo es nicht hingehört. Das gibt dann auf anderen Systemen, die den Dateinamen aus UCS-2 konvertieren wollen, Probleme.

Normalerweise würde ich sagen, dass man aus genau solchen Gründen die Finger von FAT lassen sollte, aber an dieser Stelle dürfte es weitgehend alternativlos sein.
 
Normalerweise würde ich sagen, dass man aus genau solchen Gründen die Finger von FAT lassen sollte,
Dies.

Ich habe das Problem auch schon mit Sticks unter FreeBSD gehabt (FAT/FAT32 auf Windows initialisiert und formatiert). Die Lösung war hier einfach die Dateien nochmal umbennen, also das falsche Zeichen mit einem korrekten ersetzen. Da musste ich in keiner locale etc. rumfriemeln.
Ob das ursprüngliche System das dann normal lesen kann, habe ich nicht ausprobiert, es war nicht relevant. Mir war nur wichtig, dass ich die Dateien lesbar kopiert bekomme.

Nimm' exFAT oder gleich NTFS, damit sollte es klappen. "Sollte", da ich den Anwendungsfall sehr lange nicht mehr hatte.
 
Wenn ich einen USB-Stick unter OpenBSD mounte, erscheinen bei Dateien und/oder Ordnern mit deutschen Umlauten Kodierfehler.
Also Sorry zu "Ich weiß nicht, was ich noch mitteilen könnte." gabs doch einige hinweise:

die Erklärung wurde ja inzwischen schon geliefert, warum "OpenBSD" das wohl nicht kann.
So pauschal ist aber die Antwort gar nicht, zumindest nicht auf Anhieb und deshalb möchte ich dazu noch was sagen.
Logisch, wenn deine gewohnten Anwendungen alle Umlaute anzeigen und nur dann versagen, wenn es um die gemounteten Dateisysteme unter msdosfs geht, ist das eigentlich schon Erklärung genug. Man will so etwas aber immer genau wissen.
Zum Beispiel benutze ich noch immer x11/rxvt-unicode als Terminal-Programm. Es war nämlich das erste, das ich damals kennen lernte, das UTF überhaupt konnte. Das Terminal, das ich zuvor benutzte, konnte das schlicht und ergreifend gar nicht. Auch der einfache Editor in FreeBSD (ee) hat damit so seine Probleme und da ist doch gar nicht so abwegig, die Voraussetzung erst mal abzufragen: können überhaupt deine benutzten Programme das UTF?

UTF ist dann ja auch gar nicht so eindeutig. Wir können meist nur UTF-8, es gibt aber weitere UTF-s, wie @Yamagi schön erklärt hat.
Und schließlich gibt es Umlaute und Sonderzeichen auch nicht erst mit UTF. Unser ISO-8859-15 sah eigentlich auch nicht anders aus, als unser UTF-8.

Im Zuge der Vereinheitlichung habe ich irgendwann alle Dateinamen nach UTF-8 konvertiert und dazu iconv und tr benutzt. Ich erinnere mich nicht, wann ich da zuletzt ein Problem fand, aber ich nutze auch überhaupt gar kein Windows-System und fast gar kein FAT und nicht OpenBSD.
 
Ich danke Euch allen für die Hilfe. Mit exFAT bzw. NTFS werde ich es einmal testen. Ich habe wenig Anwendungsfälle, wo ich mit USB-Sticks überhaupt arbeite. Hat mich halt nur gewundert, dass es unter Thunar und dem XFCE Terminal nicht funktioniert. Ansonsten habe ich ein Skript zum Ummodeln der Dateien geschrieben, damit funktioniert es.

Danke und

beste Grüße
kraekers
 
Zurück
Oben