• Diese Seite verwendet Cookies. Indem du diese Website weiterhin nutzt, erklärst du dich mit der Verwendung von Cookies einverstanden. Erfahre mehr

Wie kann ich Dateiensystem von USB-Stick anzeigen?

cabriofahrer

Well-Known Member
Themenstarter #1
Ich habe einen USB-Stick, wahrscheinlich mit FAT32 (und ohne mbr) formatiert, bin mir aber nicht sicher, könnte auch FAT16 sein. Wie kann ich das herausfinden?
gpart show zeigt gar nichts an aber auch nicht fdisk /dev/da1. Da bekomme ich nur:

Code:
$ fdisk /dev/da1
******* Working on device /dev/da1 *******
parameters extracted from in-core disklabel are:
cylinders=976 heads=64 sectors/track=32 (2048 blks/cyl)

parameters to be used for BIOS calculations are:
cylinders=976 heads=64 sectors/track=32 (2048 blks/cyl)

Media sector size is 512
Warning: BIOS sector numbering starts with sector 1
Information from DOS bootblock is:
The data for partition 1 is:
<UNUSED>
The data for partition 2 is:
<UNUSED>
The data for partition 3 is:
<UNUSED>
The data for partition 4 is:
<UNUSED>
$
 

Yamagi

Possessed With Psi Powers
Mitarbeiter
#2
Da gibt es zwei Möglichkeiten. 'fstype' gibt nur den Dateisystemtype aus, wie 'mount' ihn erwartet. Damit kann man dann sowas machen:
Code:
mount -t $(fstype /dev/da0s1) /dev/da0s1 /mnt
'file -s' ist deutlich aussagekräftiger:
Code:
% file -s /dev/da0s1
/dev/da0s1: DOS/MBR boot sector, code offset 0x58+2, OEM-ID "MSDOS5.0", sectors/cluster 32, reserved sectors 2702, Media descriptor 0xf8, sectors/track 63, heads 255, hidden sectors 480, sectors 61603360 (volumes > 32 MB), FAT (32 bit), sectors/FAT 15033, serial number 0xb1c5e7bd, unlabeled
 

cabriofahrer

Well-Known Member
Themenstarter #3
Danke, "file -s" gefällt mir! Um den Hintergrund zu erläutern: Kann es sein, dass Car Audio Geräte nur FAT32-Sticks erkennen und dass sich FAT32 auf einem 1 GB Stick gar nicht einrichten lässt?
 

Rakor

Administrator
Mitarbeiter
#4
Autoradios sind zum Teil etwas zickig was die Medien angeht... FAT32 sollte auf einem 1GB-Stück aber kein Problem sein.
Die Frage ist evtl eher ob das Autoradio deine Partitionierung und deine Partitionstabelle mag.
 
#5
Also "Mein" Autoradio von ca. 2009 mag FAT32, aber manchmal bestimmte mp3 dateien nicht, oder sehr große ordner-strukturen - aktuellere Geräte haben da soweit ich weiß weniger Probleme.
 

mr44er

Well-Known Member
#6
FAT32 sollte auf einem 1GB-Stück aber kein Problem sein.
Der Meinung bin ich auch, damit werden die Sticks auch standardmäßig geliefert.

@cabriofahrer
exFAT und NTFS funktionieren mit hoher Wahrscheinlichkeit auch, Versuch macht kluch. :)
Denke aber mal, dass es entweder die erste oder größte Partition sein muß, damit das Radio es erkennt. Meins ist so alt, dass es noch keine USB-Buchse hat, daher brenn ich noch die mp3s auf CD. Altbacken quasi.
 

cabriofahrer

Well-Known Member
Themenstarter #7
Danke für Eure Antworten, aber dazu

FAT32 sollte auf einem 1GB-Stück aber kein Problem sein.
folgende Ausgabe:

Code:
# dd if=/dev/zero of=/dev/da1 bs=2m count=1
1+0 records in
1+0 records out
2097152 bytes transferred in 0.355249 secs (5903326 bytes/sec)
# newfs_msdos -F32 /dev/da1
newfs_msdos: 62432 clusters too few clusters for FAT32, need 65525
# newfs_msdos -F16 /dev/da1
/dev/da1: 1998304 sectors in 62447 FAT16 clusters (16384 bytes/cluster)
BytesPerSec=512 SecPerClust=32 ResSectors=1 FATs=2 RootDirEnts=512 Media=0xf0 FATsecs=244 SecPerTrack=32 Heads=64 HiddenSecs=0 HugeSectors=1998848
#
Also ist der Stick doch zu klein? Bei einem 2 GB-Stick habe ich keine Probleme.
 

cabriofahrer

Well-Known Member
Themenstarter #8
Ach und hier noch ein Nachtrag: Anderer Stick mit 2 GB, lässt sich aber trotzdem nicht mit FAT32 formatieren. Allerdings ist hier die Ausgabe anders und suggeriert, dass ich "trimmen könnte". Was bedeutet das und wie geht das?

Code:
# dd if=/dev/zero of=/dev/da1 bs=2m count=1
1+0 records in
1+0 records out
2097152 bytes transferred in 0.513423 secs (4084644 bytes/sec)
# newfs_msdos -F32 /dev/da1
newfs_msdos: trim 15 sectors to adjust to a multiple of 63
newfs_msdos: 61424 clusters too few clusters for FAT32, need 65525
#
 

mr44er

Well-Known Member
#9
Da ist was faul. Ich erinnere mich noch an Win98/WinME und da bin ich sicher, dass ich FAT32 auf Platten kleiner als 2gb installiert habe. Ich wette auch mal, dass wenn du die Sticks unter Windows mit FAT32 formatierst, es funktionieren wird....also dann unter FreeBSD lesbar und beschreibbar.

Nachtrag: du musst bei deinem dd-Befehl das count weglassen, er schreibt sonst nur 1x 2MB auf dem Stick und nicht wie gewollt den ganzen Stick.
 

pit234a

Well-Known Member
#11
du formatierst das komplette Gerät, ohne vorher noch Partitionen anzulegen. Manchmal wollen andere Systeme so etwas nicht. Vielleicht probierst du es einfach mal.

Leider habe ich auch nur einen 1GB Stick und der steckt in meinem Fahrzeug als Musik-Speicher.
Alles, was ich nun hier habe, um zu testen ist ein verkorkster Stick mit eigentlich zwei Sticks in einem. Es ist nur ein Stick, aber es werden zwei Geräte erkannt. Einmal der echte Stick und dann ein 50MB großer zweiter Stick. Im Original war da irgendwas obskures drauf, was ich natürlich längst genullt hatte. Diesen 50MB-Stick benutze ich nun mal zum Testen. Ich hätte vielleicht auch ein MD-Gerät anlegen können und dieses dann bearbeiten. Nun also anders und deshalb ein wenig doof gelaufen, denn 50MB ist für FAT32 zu klein, wie man gleich sehen kann:

Code:
root@Celsius:/home/pit # file -s /dev/da1
/dev/da1: data
root@Celsius:/home/pit # mmls /dev/da1
Cannot determine partition type
Da ist also nichts drauf und deshalb:
Code:
root@Celsius:/home/pit # /sbin/gpart create -s MBR da1
da1 created
root@Celsius:/home/pit # mmls /dev/da1
Cannot determine partition type
root@Celsius:/home/pit # /sbin/gpart add -t fat32 da1
da1s1 added
root@Celsius:/home/pit # mmls /dev/da1
DOS Partition Table
Offset Sector: 0
Units are in 512-byte sectors

      Slot      Start        End          Length       Description
000:  Meta      0000000000   0000000000   0000000001   Primary Table (#0)
001:  -------   0000000000   0000000031   0000000032   Unallocated
002:  000:000   0000000032   0000002879   0000002848   Win95 FAT32 (0x0b)
Also, MBR-Schema gesetzt, Partition angelegt und nun noch formatiert:
Code:
root@Celsius:/home/pit # newfs_msdos -F32 /dev/da1s1
newfs_msdos: 2772 clusters too few clusters for FAT32, need 65525
root@Celsius:/home/pit # newfs_msdos -F16 /dev/da1s1
newfs_msdos: 2793 clusters too few clusters for FAT16, need 4085
root@Celsius:/home/pit # newfs_msdos -F12 /dev/da1s1
/dev/da1s1: 2797 sectors in 2797 FAT12 clusters (512 bytes/cluster)
BytesPerSec=512 SecPerClust=1 ResSectors=1 FATs=2 RootDirEnts=512 Sectors=2848 Media=0xf0 FATsecs=9 SecPerTrack=32 Heads=64 HiddenSecs=0
Wie schon gesagt, langsam herangetastet, weil für Fat32 zu klein, für Fat16 zu klein und dann schließlich auf FAT12 formatiert. Nachgesehen:
Code:
root@Celsius:/home/pit # mmls /dev/da1
DOS Partition Table
Offset Sector: 0
Units are in 512-byte sectors

      Slot      Start        End          Length       Description
000:  Meta      0000000000   0000000000   0000000001   Primary Table (#0)
001:  -------   0000000000   0000000031   0000000032   Unallocated
002:  000:000   0000000032   0000002879   0000002848   Win95 FAT32 (0x0b)
root@Celsius:/home/pit # file -s /dev/da1
/dev/da1: DOS/MBR boot sector; partition 1 : ID=0xb, start-CHS (0x0,1,1), end-CHS (0x1,25,32), startsector 32, 2848 sectors, extended partition table (last)
root@Celsius:/home/pit # file -s /dev/da1s1
/dev/da1s1: DOS/MBR boot sector, code offset 0x3c+2, OEM-ID "BSD4.4  ", root entries 512, sectors 2848 (volumes <=32 MB), sectors/FAT 9, sectors/track 32, heads 64, serial number 0xb26418f3, unlabeled, FAT (12 bit), followed by FAT
Das ist nur eine Idee.
Nach meiner Erfahrung wollen eben viele Systeme so ein Schema sehen und geraten in Schwierigkeiten, wenn ein Gerät ohne Partition eingesetzt wird.
 

cabriofahrer

Well-Known Member
Themenstarter #12
Ob ich eine Partition anlege oder nicht, macht keinen Unterschied:

Code:
# gpart destroy da1
gpart: arg0 'da1': Invalid argument
# gpart create -s mbr da1
da1 created
# gpart add -t fat32 da1
da1s1 added
# newfs_msdos -F32 /dev/da1
newfs_msdos: 62432 clusters too few clusters for FAT32, need 65525
#
Im internationalen Forum taucht das gleiche Problem auf (https://forums.freebsd.org/threads/fat32-format-error.60445/), dort wird auf die man newfs_msdos verwiesen, in der sich folgender Hinweis findet:

Code:
NOTES
     If some parameters (e.g. size, number of sectors, etc.) are not specified
     through options or disktype, the program tries to generate them
     automatically.  In particular, the size is determined as the device or
     file size minus the offset specified with the -@ option.  When the
     geometry is not available, it is assumed to be 63 sectors, 255 heads.
     The size is then rounded to become a multiple of the track size and avoid
     complaints by some filesystem code.

     FAT file system parameters occupy a "Boot Sector BPB (BIOS Parameter
     Block)" in the first of the "reserved" sectors which precede the actual
     file system.  For reference purposes, this structure is presented below.

Leider verstehe ich das nicht 100%-ig. Offensichtlich handelt es sich um Sticks, die dem Programm nicht die erforderlichen Informationen über die Geometrie liefern, so dass es 63 sectors und 255 heads voraussetzt. Man müsste also einen offset-Wert mit -@ angeben.

Doch wie und was genau verstehe ich eben nicht.
 

Yamagi

Possessed With Psi Powers
Mitarbeiter
#13
Genau, Geometrien gibt es nicht mehr. Laut Code nimmt er ohne Geometrie 4096 Bytes pro Sektor an. Probiere mal, halb geraten: newfs_msdosfs -F32 -b 512 ...
 
Themenstarter #14
Vielen Dank, die flag "-b 512" hat zumindest für 2 Sticks (der mit 1 GB, ein weiterer mit 2 GB) und das Car Audio Gerät vom Ford Fiesta (Ford Sync) weiter geholfen. Was dabei allerdings noch auftrat: Mit einer Patition (durch gpart, also da1s1) führte Ford Sync zuerst ein "Indexing"... durch. Der Stick hieß dann hinterher im PC nicht mehr "da1s1" sondern irgendwas verrücktes wie 0%1%2%3%...%.
Ohne Partition, also direkt mit "newfs_msdos ..." tritt dieses Problem nicht auf. Der Stick heißt ganz einfach "da1", es passiert kein "Indexing" und er funktioniert sofort.

Soweit, so gut, Problem für Ford Sync gelöst. Aber Leider funktionieren dies Sticks auf einem Pioneer Gerät im Opel Astra mit "-b 512" nicht.
Da gibt es ein "Error 23". Dazu habe ich folgenden Thread gefunden:

http://www.fixya.com/support/t1210422-pioneer_avh_p5000dvd_stereo_usb_error_23

Hier behauptet jemand folgendes:

Code:
This error basically comes when the allocation unit size (KB's) not supported with your car head unit.
So the Solution for the Error 23 Would be re-format your USB drives File system to FAT (Default) with its allocation Unit Size to 32 Kilobytes.
Note: NTFS or FAT 32 is allocations units ( 4096 Bytes)
Hier habe ich "-b 4096" probiert aber es geht nicht, aber Ford Sync akzeptiert es. So wie es aussieht, funktionieren bis jetzt auf dem Pioneer Gerät nur Sticks, die eine Formatierung ohne weitere Flags "newfs_msdos -F32 /dev/da1" akzeptieren. Das sind bei mir zwei Sticks mit jeweils 4 GB. Es wäre interessant zu wissen, ob ich für die kleineren Sticks und für das Pioneer Gerät eine passende Blocksize finden würde, die mit FAT32 funktioniert. Wie gesagt, 512 und 4096 tun es nicht.
 

Yamagi

Possessed With Psi Powers
Mitarbeiter
#16
Dann muss ich das Problem wohl doch noch erklären :) FAT ist uralt und funktioniert daher ganz einfach: Das Dateisystem besteht aus sogenannten "Cluster", eine Datei belegt minimal einen Cluster und maximal so viele Cluster wie das Dateisystem hat, aber höchstens insgesamt 4GB. In der File Allocation Tabe (der namensgebenden FAT) steht nun welche Cluster eine Datei belegt. Beim Zugriff auf eine Datei muss das Betriebssystem also nur in der File Allocation Table die zugehörigen Cluster nachschauen und diese dann lesen.

FAT12, FAT16 und FAT32 unterscheiden sich in erster Linie durch die Nummerierung der Cluster. Bei FAT12 sind es 12 Bit Nummern, damit können maximal 4096 Sektoren angesprochen werden. Bei FAT16 sind es 16 Bit Nummern und 65536 Cluster. Und bei FAT32, welche Überraschung, 32 Bit Nummern und damit 4294967296 Cluster. Damit wäre eigentlich alles gut.

Aber nun wäre Microsoft nicht Microsoft gewesen, wenn sie sich da irgendwann böse verfrickelt hätten. Windows erkennt bis heute Dateisysteme an der Nummer der zugehörigen Partition, Partitionstyp 6 ist "FAT größer als 32 Megabyte". Das war am Anfang nur FAT16, aber als dann FAT32 kam, musste man irgendwie erkennen können, ob es ein FAT16 oder ein FAT32 ist. Natürlich hätte man einfach einen neuen Partitionstyp definieren können, aber damit hätte man alle existierenden Partitionstools und sicher noch einiges mehr kaputt gemacht. Also kam man auf eine bescheuerte Idee: Lese die Anzahl Cluster im Dateisystem. Sind es bis zu 65536 Stück, ist es ein FAT16. Sind es mehr als 65536, ist es ein FAT32. Und darum muss ein FAT32-Dateisystem sinnloserweise mindestens 65537 Cluster haben.

Wer sich für den vollen Abgrund interessiert: https://en.wikipedia.org/wiki/File_Allocation_Table

Die Frage ist nun, wie groß ein Cluster ist. Klassisch arbeitet man mit Clustern von 512 Byte, da lange Zeit Festplatten eine Sektorengröße von 512 Byte hatten. Sie konnten also nicht weniger als 512 Byte lesen und schreiben. Außerdem belegt eine Datei damit nur mindestens 512 Byte, bei vielen kleinen Dateien ist der Verschnitt recht gering. Windows macht es bis heute so, also: 65537 Cluster * 512 Byte = 33554432 Byte = 32 Megabyte. Es lässt sich also ein Medium, was 32 oder mehr Megabyte groß ist, als FAT32 formatieren.

In der Unix-Welt wurde FAT aber nie wirklich auf Festplatten verwendet, stattdessen auf Disketten und später USB-Sticks. Da Disketten immer mit FAT12 formatiert werden können, kann an für FAT32 also USB-Sticks, SD-Karten und co. annehmen. Diese Medien haben meist Blockgrößen von mindestens 4096 Byte, meist noch mehr. FreeBSD (und ich meine auch Linux 'mkfs.fat') nehmen daher für FAT32 eine Clustergröße von mindestens 4096 Byte an, wenn man nichts anderes angibt. Damit muss das Medium aber mindestens 65537 Cluster * 4096 Byte = 268439552 Byte = 256 Megabyte groß sein. Aber wie gesagt, mindestens 4096 Byte, da spielen noch einige andere Faktoren wie die Größe des Medium (Fall es im Detail interessiert: https://svnweb.freebsd.org/base/head/sbin/newfs_msdos/mkfs_msdos.c?revision=335189&view=markup#l320) mit rein.


Lange Rede, kommen wir besser mal zum Thema. Wenn du weißt, dass das Dateisystem mit FreeBSD erstellt wurde, ist deine einfachste Option 'newfs_msdosfs -N'. Das -N zeigt an, mit welchen Parametern das Dateisystem erstellt würde ohne es wirklich zu erstellen. Für den Stick aus meinem Beispiel ganz oben:

Code:
% newfs_msdos -N /dev/da0s
/dev/da0s1: 61588224 sectors in 962316 FAT32 clusters (32768 bytes/cluster)
BytesPerSec=512 SecPerClust=64 ResSectors=32 FATs=2 Media=0xf0 SecPerTrack=63 Heads=255 HiddenSecs=0 HugeSectors=61603353 FATsecs=7519 RootCluster=2 FSInfo=1 Backup=2
Also eine Clustergröße von 32768 Bytes. :)
 
Themenstarter #17
Vielen Dank für diesen hochinteressanten Artikel, wie man schon sagen muss!

Diese Medien haben meist Blockgrößen von mindestens 4096 Byte, meist noch mehr. FreeBSD (und ich meine auch Linux 'mkfs.fat') nehmen daher für FAT32 eine Clustergröße von mindestens 4096 Byte an, wenn man nichts anderes angibt. Damit muss das Medium aber mindestens 65537 Cluster * 4096 Byte = 268439552 Byte = 256 Megabyte groß sein.
Hmm, es sieht aber so aus, als hätte mein Medium weniger als 65537 Cluster...

Ich poste hier mal drei Ausgaben von 2 Sticks. newfs_msdos -N /dev/da1 von Stick 1 mit 4 GB, der in beiden Autoradios funktioniert.
newfs_msdos -N /dev/da1 und file -s von Stick 2 mit 1 GB, der mit -F32 -b512 zumindest in Ford Sync funktioniert:

Code:
$ newfs_msdos -N /dev/da1
newfs_msdos: trim 8 sectors to adjust to a multiple of 63
/dev/da1: 8030208 sectors in 125472 FAT32 clusters (32768 bytes/cluster)
BytesPerSec=512 SecPerClust=64 ResSectors=32 FATs=2 Media=0xf0 SecPerTrack=63 Heads=255 HiddenSecs=0 HugeSectors=8032248 FATsecs=981 RootCluster=2 FSInfo=1 Backup=2
$ newfs_msdos -N /dev/da1
/dev/da1: 1998304 sectors in 62447 FAT16 clusters (16384 bytes/cluster)
BytesPerSec=512 SecPerClust=32 ResSectors=1 FATs=2 RootDirEnts=512 Media=0xf0 FATsecs=244 SecPerTrack=32 Heads=64 HiddenSecs=0 HugeSectors=1998848
$ file -s /dev/da1
/dev/da1: DOS/MBR boot sector, code offset 0x58+2, OEM-ID "BSD4.4  ", sectors/cluster 8, sectors/track 32, heads 64, sectors 1998848 (volumes > 32 MB), FAT (32 bit), sectors/FAT 1949, serial number 0x3506130d, unlabeled
$
Wie man sieht, werden für Stick 2 nur 62447 Cluster angezeigt, da verwundert es also nicht dass er sich standardmäßig nicht mit FAT32 formatieren lässt:

Code:
$ newfs_msdos -F32 -N /dev/da1
newfs_msdos: 62432 clusters too few clusters for FAT32, need 65525
Ich nehme mal an, dass außer FAT32 der Wert für die bytes/cluster ausschlaggebend dafür ist, ob das Autoradio den Stick lesen kann oder nicht? Vielleicht probiere ich es mal mit "-b 8192" für das Pioneer-Gerät.
 

pit234a

Well-Known Member
#18
Hmm, es sieht aber so aus, als hätte mein Medium weniger als 65537 Cluster...
das Medium hat nicht, sondern die werden beim Formatieren angelegt.
newfs_msdos -N zeigt auch nicht an, was ist, sondern, was sein würde, wenn man keine weiteren Optionen benutzt, also die Automagie alles von alleine bestimmt. Ich habe die man nicht gelesen und folgere das nur aus dem vorher Gesagtem. Möglicherweise kannst du auch damit sehen, was denn sein würde, wenn du eine weitere Option benutzt (etwa -b 512).
 

Yamagi

Possessed With Psi Powers
Mitarbeiter
#19
Jepp, kann man. Und -b 512 wäre auch mein erster Kandidat für das Radio. Das idealerweise auf dem blanken Stick ohne Partiton außen herum.
 
Themenstarter #20
Möglicherweise kannst du auch damit sehen, was denn sein würde, wenn du eine weitere Option benutzt (etwa -b 512).
Habe ich auch ausprobiert, das geht. Daher vermute ich ja auch, dass es auf die bytes/cluster ankommt, die dann bei dem "was denn sein würde" angezeigt werden.

Jepp, kann man. Und -b 512 wäre auch mein erster Kandidat für das Radio. Das idealerweise auf dem blanken Stick ohne Partiton außen herum.
So mache ich das ja auch, wie schon beschrieben. Aber wie gesagt, -b 512 funktioniert dann mit den kleineren Sticks auf Ford Sync (ist ja schonmal ein Fortschritt) aber nicht bei Pioneer. Wenn das andere Auto wieder da ist, werde ich mal -b 8192 ausprobieren.

Mal eine weitere Frage in dem Zusammenhang: Führt eine geringere Blocksize (also -b 512) zu mehr Speicherkapazität im Falle von mp3's?
 

mr44er

Well-Known Member
#21
Führt eine geringere Blocksize (also -b 512) zu mehr Speicherkapazität im Falle von mp3's?
Nein, im Gegenteil. Du brauchst eine größere Menge x an 'Schubladen' mit 512byte-Kapazität um ein mp3 zu speichern als mit z.B. 8192byte. Die 'Schubladen' benötigen auch ihren Platz...minimal, aber Kleinvieh in hoher Anzahl macht dann eben doch nen riesigen Haufen.
Anderes Beispiel: Du hast ein Dateisystem mit 8192bytes formatiert, weil du davon ausgehst, dass die Dateien, die du darauf schreiben wirst, alle größer als 8192byte sind. Jetzt ist dem nicht so und du schreibst nur kleine Textdateien drauf, die sogar kleiner als die Bytegröße sind. Der Restplatz dieser nicht vollgeschrieben Blöcke wäre dann quasi 'verschenkt'. ;)
Und daher sollte man (bzw. danach gehe ich) schauen, was für Dateien man in Zukunft auf das Dateisystem speichern wird. Viele große Dateien -> max. blocksize und umgekehrt.
Wenn man aufgrund eines Gerätes wie dem Radio das vorgeschrieben bekommt, dann gehts nicht anders. Und bei so kleinen Sticks könntest du mit der max. blocksize vllt. ein mp3 mehr drauf speichern. Ist jetzt geraten und nicht nachgerechnet, aber you get the point. Bei großen Festplatten oder Pools siehts dann wieder anders aus, vor allem, wenn man große und kleine Dateien auf ein Dateisystem schreiben wird und dann kommts noch auf die Anzahl der Dateien an.