Forum: PC Hard- und Software Wo speichert das FAT32 Filesystem seine Volume-ID?


von A. H. (ah8)


Lesenswert?

Ich formatiere unter Windows XP einen 4Gb USB-Stick mit ext32. Dabei 
weise ich eine „Volumenbezeichnung“ zu, z.B. „USBSTICK01“.

Dann verbinde ich diesen Stick mit meiner Linux Debian Box. Der Stick 
wird erkannt und unter /media/USBSTICK01 gemounted.
1
# mount -l
2
/dev/sde1 on /media/USBSTICK01 type vfat (rw,nosuid,nodev,uhelper=udisks,uid=1000,gid=100,shortname=mixed,dmask=0077,utf8=1,showexec,flush) [USBSTICK01]
3
#

Die MTools und auch der Kernel zeigen das richtige Label an, dosfslabel 
kann aber kein Label finden
1
# umount /dev/sde1
2
# mlabel -s e:
3
 Volume label is USBSTICK01 
4
# dosfslabel /dev/sde1
5
NO NAME    
6
# ll /dev/disk/by-label
7
8
lrwxrwxrwx 1 root root 10  1. Nov 21:56 USBSTICK01 -> ../../sde1
9
#

Ein fsck zeigt keine Probleme:
1
# dosfsck /dev/sde1
2
dosfsck 3.0.9, 31 Jan 2010, FAT32, LFN
3
/dev/sde1: 0 files, 1/980481 clusters
4
#

Wenn ich mal direkt in die ersten 32 Blöcke des Filesystems schaue, so 
finde ich zwar den String „NO NAME“, aber keine Spur von „USBSTICK01“ 
(hier mal nur die ersten 32 Zeilen angezeigt):
1
# dd if=/dev/sde1 count=32 | ~/bin/hex | head -32
2
 00000    eb 58 90 4d 53 44 4f 53 35 2e 30 00 02 08 26 00   '.X.MSDOS5.0...&.'
3
 00010    02 00 00 00 00 f8 00 00 3f 00 ff 00 f8 03 00 00   '........?.......'
4
 00020    08 ec 77 00 ed 1d 00 00 00 00 00 00 02 00 00 00   '..w.............'
5
 00030    01 00 06 00 00 00 00 00 00 00 00 00 00 00 00 00   '................'
6
 00040    00 00 29 f3 3a df 92 4e 4f 20 4e 41 4d 45 20 20   '..).:..NO NAME  '
7
 00050    20 20 46 41 54 33 32 20 20 20 33 c9 8e d1 bc f4   '  FAT32   3.....'
8
 00060    7b 8e c1 8e d9 bd 00 7c 88 4e 02 8a 56 40 b4 08   '{......|.N..V@..'
9
 00070    cd 13 73 05 b9 ff ff 8a f1 66 0f b6 c6 40 66 0f   '..s......f...@f.'
10
 00080    b6 d1 80 e2 3f f7 e2 86 cd c0 ed 06 41 66 0f b7   '....?.......Af..'
11
 00090    c9 66 f7 e1 66 89 46 f8 83 7e 16 00 75 38 83 7e   '.f..f.F..~..u8.~'
12
 000a0    2a 00 77 32 66 8b 46 1c 66 83 c0 0c bb 00 80 b9   '*.w2f.F.f.......'
13
 000b0    01 00 e8 2b 00 e9 48 03 a0 fa 7d b4 7d 8b f0 ac   '...+..H...}.}...'
14
 000c0    84 c0 74 17 3c ff 74 09 b4 0e bb 07 00 cd 10 eb   '..t.<.t.........'
15
 000d0    ee a0 fb 7d eb e5 a0 f9 7d eb e0 98 cd 16 cd 19   '...}....}.......'
16
 000e0    66 60 66 3b 46 f8 0f 82 4a 00 66 6a 00 66 50 06   'f`f;F...J.fj.fP.'
17
 000f0    53 66 68 10 00 01 00 80 7e 02 00 0f 85 20 00 b4   'Sfh.....~.... ..'
18
 00100    41 bb aa 55 8a 56 40 cd 13 0f 82 1c 00 81 fb 55   'A..U.V@........U'
19
 00110    aa 0f 85 14 00 f6 c1 01 0f 84 0d 00 fe 46 02 b4   '.............F..'
20
 00120    42 8a 56 40 8b f4 cd 13 b0 f9 66 58 66 58 66 58   'B.V@......fXfXfX'
21
 00130    66 58 eb 2a 66 33 d2 66 0f b7 4e 18 66 f7 f1 fe   'fX.*f3.f..N.f...'
22
 00140    c2 8a ca 66 8b d0 66 c1 ea 10 f7 76 1a 86 d6 8a   '...f..f....v....'
23
 00150    56 40 8a e8 c0 e4 06 0a cc b8 01 02 cd 13 66 61   'V@............fa'
24
 00160    0f 82 54 ff 81 c3 00 02 66 40 49 0f 85 71 ff c3   '..T.....f@I..q..'
25
 00170    4e 54 4c 44 52 20 20 20 20 20 20 00 00 00 00 00   'NTLDR      .....'
26
 00180    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   '................'
27
 00190    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   '................'
28
 001a0    00 00 00 00 00 00 00 00 00 00 00 00 0d 0a 44 61   '..............Da'
29
 001b0    74 65 6e 74 72 84 67 65 72 20 65 6e 74 66 65 72   'tentr.ger entfer'
30
 001c0    6e 65 6e ff 0d 0a 4d 65 64 69 65 6e 66 65 68 6c   'nen...Medienfehl'
31
 001d0    65 72 ff 0d 0a 4e 65 75 73 74 61 72 74 3a 20 54   'er...Neustart: T'
32
 001e0    61 73 74 65 20 64 72 81 63 6b 65 6e 0d 0a 00 00   'aste dr.cken....'
33
 001f0    00 00 00 00 00 00 00 00 00 ac c4 d3 00 00 55 aa   '..............U.'
34
#

Ich kann den Namen mit den MTools löschen. Die Änderung wird angezeigt, 
ich kann sie im FS aber nicht finden:
1
# dd if=/dev/sde1 count=32 | ~/bin/hex >h1
2
# mlabel -c e:
3
# mlabel -s e:
4
 Volume has no label
5
# dd if=/dev/sde1 count=32 | ~/bin/hex >h2
6
32+0 Datensätze ein
7
32+0 Datensätze aus
8
16384 Bytes (16 kB) kopiert, 0,0292657 s, 560 kB/s
9
# diff h1 h2
10
# dosfsck /dev/sde1
11
dosfsck 3.0.9, 31 Jan 2010, FAT32, LFN
12
/dev/sde1: 0 files, 1/980481 clusters
13
#

Wenn ich versuche, den Namen neu zu setzten, gibt es Probleme:
1
# mlabel e:
2
 Volume has no label
3
Enter the new volume label : TESTLABEL
4
# mlabel -s e:
5
 Volume label is TESTLABEL˦
6
# dd if=/dev/sde1 count=32 | ~/bin/hex >h2
7
32+0 Datensätze ein
8
32+0 Datensätze aus
9
16384 Bytes (16 kB) kopiert, 0,0247838 s, 661 kB/s
10
# diff h1 h2
11
5,6c5,6
12
<  00040    00 00 29 f3 3a df 92 4e 4f 20 4e 41 4d 45 20 20   '..).:..NO NAME  '
13
<  00050    20 20 46 41 54 33 32 20 20 20 33 c9 8e d1 bc f4   '  FAT32   3.....'
14
---
15
>  00040    00 00 29 f3 3a df 92 54 45 53 54 4c 41 42 45 4c   '..).:..TESTLABEL'
16
>  00050    00 00 46 41 54 33 32 20 20 20 33 c9 8e d1 bc f4   '..FAT32   3.....'
17
# dosfsck /dev/sde1
18
dosfsck 3.0.9, 31 Jan 2010, FAT32, LFN
19
There are differences between boot sector and its backup.
20
Differences: (offset:original/backup)
21
  71:54/4e, 72:45/4f, 73:53/20, 74:54/4e, 75:4c/41, 76:41/4d, 77:42/45
22
  , 78:45/20, 79:4c/20, 80:00/20, 81:00/20
23
1) Copy original to backup
24
2) Copy backup to original
25
3) No action
26
? 3
27
/dev/sde1: 1 files, 1/980481 clusters
28
#

Der neue Name ist zwar etwas verstümmelt, steht aber grundsätzlich dort, 
wo ich ihn erwarten würde. Offensichtlich gibt es aber ein Backup, dass 
nicht mit upgedated wurde. Auch verstehe ich nicht, warum jetzt eine 
Datei im FS sein soll, oben wurden noch „0 files“ angezeigt.

Auch dosfslabel meldet den Fehler:
1
# dosfslabel /dev/sde1
2
There are differences between boot sector and its backup.
3
Differences: (offset:original/backup)
4
  71:54/4e, 72:45/4f, 73:53/20, 74:54/4e, 75:4c/41, 76:41/4d, 77:42/45
5
  , 78:45/20, 79:4c/20, 80:00/20, 81:00/20
6
  Not automatically fixing this.
7
TESTLABEL˦
8
#

Das Problem der Namensverstümmelung lässt sich offenbar relativ einfach 
durch Eingabe einiger Leerzeichen lösen, reparieren lässt sich das FS 
aber nicht:
1
# mlabel e:
2
 Volume label is TESTLABEL˦
3
Enter the new volume label : TESTLABEL<space><space><space>
4
# mlabel -s e:
5
 Volume label is TESTLABEL  
6
# dd if=/dev/sde1 count=32 | ~/bin/hex >h2
7
32+0 Datensätze ein
8
32+0 Datensätze aus
9
16384 Bytes (16 kB) kopiert, 0,0280775 s, 584 kB/s
10
# diff h1 h2
11
5c5
12
<  00040    00 00 29 f3 3a df 92 4e 4f 20 4e 41 4d 45 20 20   '..).:..NO NAME  '
13
---
14
>  00040    00 00 29 f3 3a df 92 54 45 53 54 4c 41 42 45 4c   '..).:..TESTLABEL'
15
# dosfsck /dev/sde1
16
dosfsck 3.0.9, 31 Jan 2010, FAT32, LFN
17
There are differences between boot sector and its backup.
18
Differences: (offset:original/backup)
19
  71:54/4e, 72:45/4f, 73:53/20, 74:54/4e, 75:4c/41, 76:41/4d, 77:42/45
20
  , 78:45/20, 79:4c/20
21
1) Copy original to backup
22
2) Copy backup to original
23
3) No action
24
? 1
25
Leaving file system unchanged.
26
/dev/sde1: 1 files, 1/980481 clusters
27
# dosfsck /dev/sde1
28
dosfsck 3.0.9, 31 Jan 2010, FAT32, LFN
29
There are differences between boot sector and its backup.
30
Differences: (offset:original/backup)
31
  71:54/4e, 72:45/4f, 73:53/20, 74:54/4e, 75:4c/41, 76:41/4d, 77:42/45
32
  , 78:45/20, 79:4c/20
33
1) Copy original to backup
34
2) Copy backup to original
35
3) No action
36
? 2
37
Leaving file system unchanged.
38
/dev/sde1: 1 files, 1/980481 clusters
39
#

Nach Entfernen und neu Verbinden des Sticks wird der neue Name korrekt 
erkannt. Auch Windows erkennt den neuen Namen. Ein FS-Check unter 
Windows brachte keine Fehler.

Durch das Zuweisen eines neuen Namens mittels dosfslabel lässt sich der 
Dateifehler augenscheinlich reparieren:
1
# dosfslabel /dev/sde1 NEUESLABEL
2
There are differences between boot sector and its backup.
3
Differences: (offset:original/backup)
4
  71:54/4e, 72:45/4f, 73:53/20, 74:54/4e, 75:4c/41, 76:41/4d, 77:42/45
5
  , 78:45/20, 79:4c/20
6
  Not automatically fixing this.
7
# dosfslabel /dev/sde1
8
NEUESLABEL 
9
# mlabel -s e:
10
 Volume label is NEUESLABEL 
11
# dd if=/dev/sde1 count=32 | ~/bin/hex >h2
12
32+0 Datensätze ein
13
32+0 Datensätze aus
14
16384 Bytes (16 kB) kopiert, 0,000271128 s, 60,4 MB/s
15
# diff h1 h2
16
5,6c5,6
17
<  00040    00 00 29 f3 3a df 92 4e 4f 20 4e 41 4d 45 20 20   '..).:..NO NAME  '
18
<  00050    20 20 46 41 54 33 32 20 20 20 33 c9 8e d1 bc f4   '  FAT32   3.....'
19
---
20
>  00040    00 00 29 f3 3a df 92 4e 45 55 45 53 4c 41 42 45   '..).:..NEUESLABE'
21
>  00050    4c 20 46 41 54 33 32 20 20 20 33 c9 8e d1 bc f4   'L FAT32   3.....'
22
197,198c197,198
23
<  00c40    00 00 29 f3 3a df 92 4e 4f 20 4e 41 4d 45 20 20   '..).:..NO NAME  '
24
<  00c50    20 20 46 41 54 33 32 20 20 20 33 c9 8e d1 bc f4   '  FAT32   3.....'
25
---
26
>  00c40    00 00 29 f3 3a df 92 4e 45 55 45 53 4c 41 42 45   '..).:..NEUESLABE'
27
>  00c50    4c 20 46 41 54 33 32 20 20 20 33 c9 8e d1 bc f4   'L FAT32   3.....'
28
# dosfsck /dev/sde1
29
dosfsck 3.0.9, 31 Jan 2010, FAT32, LFN
30
/dev/sde1: 1 files, 1/980481 clusters
31
#

Offenbar werden hier beide Kopien des Labels richtig ersetzt, was die 
MTools nicht schaffen.

Wenn wir das Ganze nochmals komplett von Anfang an durchspielen (also 
Stick entfernen, unter XP wie oben beschrieben unter Verwendung des 
Labels „USBSTICK01“ neu formatieren und wieder mit Linux verbinden), 
jetzt aber dosfslabel zum Ändern verwenden, ergibt sich das folgende 
Bild:
1
# umount /dev/sde1
2
# mlabel -s e:
3
 Volume label is USBSTICK01 
4
# dosfslabel /dev/sde1
5
NO NAME    
6
# dosfsck /dev/sde1
7
dosfsck 3.0.9, 31 Jan 2010, FAT32, LFN
8
/dev/sde1: 1 files, 1/980481 clusters
9
# dd if=/dev/sde1 count=32 | ~/bin/hex >h1
10
32+0 Datensätze ein
11
32+0 Datensätze aus
12
16384 Bytes (16 kB) kopiert, 0,0296928 s, 552 kB/s
13
# dosfslabel /dev/sde1 NEUESLABEL
14
# dosfslabel /dev/sde1
15
NEUESLABEL 
16
# mlabel -s e:
17
 Volume label is NEUESLABEL 
18
# dosfsck /dev/sde1
19
dosfsck 3.0.9, 31 Jan 2010, FAT32, LFN
20
/dev/sde1: 1 files, 1/980481 clusters
21
# dd if=/dev/sde1 count=32 | ~/bin/hex >h2
22
32+0 Datensätze ein
23
32+0 Datensätze aus
24
16384 Bytes (16 kB) kopiert, 0,0286636 s, 572 kB/s
25
# diff h1 h2
26
5,6c5,6
27
<  00040    00 00 29 6e 79 42 9e 4e 4f 20 4e 41 4d 45 20 20   '..)nyB.NO NAME  '
28
<  00050    20 20 46 41 54 33 32 20 20 20 33 c9 8e d1 bc f4   '  FAT32   3.....'
29
---
30
>  00040    00 00 29 6e 79 42 9e 4e 45 55 45 53 4c 41 42 45   '..)nyB.NEUESLABE'
31
>  00050    4c 20 46 41 54 33 32 20 20 20 33 c9 8e d1 bc f4   'L FAT32   3.....'
32
197,198c197,198
33
<  00c40    00 00 29 6e 79 42 9e 4e 4f 20 4e 41 4d 45 20 20   '..)nyB.NO NAME  '
34
<  00c50    20 20 46 41 54 33 32 20 20 20 33 c9 8e d1 bc f4   '  FAT32   3.....'
35
---
36
>  00c40    00 00 29 6e 79 42 9e 4e 45 55 45 53 4c 41 42 45   '..)nyB.NEUESLABE'
37
>  00c50    4c 20 46 41 54 33 32 20 20 20 33 c9 8e d1 bc f4   'L FAT32   3.....'
38
#


Also, XP legt ein Volume-Label an einer Stelle ab, die von MTools und 
Kernel gefunden wird, nicht aber von dosfslabel. Diese kann nicht in den 
ersten 32 Sektoren liegen, die für eine ext32 FS meines Wissens nach 
standardmäßig reserviert sind. Dort liegen aber zwei Einträge für ein 
Volume-Label, die von XP offenbar nicht benutzt werden, von denen die 
MTools nur einen updaten, was zu Fehlern beim Linux fsck führt, 
dosfslabel aber beide. Sowohl die Änderungen der MTools als auch die von 
dosfslabel werden vom Kernel als auch von Windows erkannt und Windows 
meldet in keinem der beiden Fälle einen Fehler.

Bevor ich jetzt in die Tiefen des ext32 FS abtauche, kann mir jemand 
sagen wo Windows das Volume-Label (noch) speichert und was unter Linux 
der korrekte Weg ist, dieses zu änbern?

Auch für eine entsprechende Literaturstelle wäre ich dankbar.

PS: Ich habe auch etwas weiter als 32 Sektoren geschaut, das Ergebnis 
war das gleiche.

--

falsche Threadüberschrift korrigiert

-rufus

: Bearbeitet durch User
von K. L. (trollen) Benutzerseite


Lesenswert?

Also entweder meinst du FAT32 oder EXT3, aber ein EXT32 gibt es nicht 
(die sind erst bei ext4). Da du es mit Windows schreibst, ist hier wohl 
FAT32 gemeint.

Kann es eventuell sein, dass das eine Programm das ganze Gerät(/dev/sde) 
benennt und das andere nur die Partition(/dev/sde1)?

von Jim M. (turboj)


Lesenswert?

A. H. schrieb:
> Also, XP legt ein Volume-Label an einer Stelle ab, die von MTools und
> Kernel gefunden wird, nicht aber von dosfslabel. Diese kann nicht in den
> ersten 32 Sektoren liegen

Ist ein versteckter Eintrag im Root Verzeichnis (mit Volume Label Bit). 
Das könnte auch mal jemand aus Versehen als Datei zählen, die hätte aber 
IIRC 0 Bytes und keinen belegten Cluster da alles im 32 Byte 
Verzeichniseintrag steht.

von A. H. (ah8)


Lesenswert?

K. L. schrieb:
> Also entweder meinst du FAT32 oder EXT3, aber ein EXT32 gibt es nicht
> (die sind erst bei ext4). Da du es mit Windows schreibst, ist hier wohl
> FAT32 gemeint.

Stimmt natürlich. War schon etwas spät gestern und ich hatte vorher 
etwas über exFAT gelesen, da hat wohl Freud zugeschlagen :-)

> Kann es eventuell sein, dass das eine Programm das ganze Gerät(/dev/sde)
> benennt und das andere nur die Partition(/dev/sde1)?

Eigentlich nicht, der entsprechen Eintrag in der mtools.conf ist 
korrekt:
1
# grep sde1 /etc/mtools.conf 
2
drive e: file="/dev/sde1" exclusive
3
#

von A. H. (ah8)


Lesenswert?

Jim M. schrieb:
> A. H. schrieb:
>> Also, XP legt ein Volume-Label an einer Stelle ab, die von MTools und
>> Kernel gefunden wird, nicht aber von dosfslabel. Diese kann nicht in den
>> ersten 32 Sektoren liegen
>
> Ist ein versteckter Eintrag im Root Verzeichnis (mit Volume Label Bit).
> Das könnte auch mal jemand aus Versehen als Datei zählen, die hätte aber
> IIRC 0 Bytes und keinen belegten Cluster da alles im 32 Byte
> Verzeichniseintrag steht.

Danke für den Tipp, hat mir geholfen einen entsprechenden Bug-Report zu 
finden:

https://bugzilla.novell.com/show_bug.cgi?id=657011#c4

Das Problem scheint seit dosfstools 3.0.16 behoben zu sein.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.