
Ich habe eine brandneue 16 GB Klasse 10 SD-Karte und sie zeigt ein sehr seltsames Verhalten. Nachdem ich die Karte an einen USB-SD-Kartenleser angeschlossen hatte, erschien das Gerät als /dev/sdb. Ich versuchte, ein 2 GB großes Rohbild hineinzukopieren dd
, aber es kam sofort die Meldung: „Kein Speicherplatz mehr auf dem Gerät“.
Das Blockgerät zeigt: Es sind nur 10 MB Speicherplatz darauf verfügbar.
ls -lah /dev/sdb
-rw-r--r-- 1 root root 10M máj 16 23:16 /dev/sdb
fdisk zeigt die gleiche Größe an:
fdisk -l /dev/sdb
Disk /dev/sdb: 10 MiB, 10485760 bytes, 20480 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x84f9d19f
Ich habe die SD-Karte mit einem anderen Lesegerät ausprobiert, aber es sieht so aus, als ob es kein Problem am Kartenleser liegt, da die „Größe“ der SD-Karte mit jedem einzelnen Lesegerät 10 MB beträgt.
cat /proc/partitions
major minor #blocks name
...
8 16 15558144 sdb
...
Das Interessante daran ist: Der Kernel scheint tatsächlich die richtige Größe der SD-Karte zu kennen.
cat /sys/block/sdb/size
31116288 # numbers of 512 byte blocks => 15.93 GB
Und es scheint, als würde es richtig erkannt.
May 16 22:58:07 DDSI-Laptop kernel: [258762.883672] usb 1-3: New USB device found, idVendor=14cd, idProduct=125c
May 16 22:58:07 DDSI-Laptop kernel: [258762.883674] usb 1-3: New USB device strings: Mfr=1, Product=3, SerialNumber=2
May 16 22:58:07 DDSI-Laptop kernel: [258762.883675] usb 1-3: Product: Mass Storage Device
May 16 22:58:07 DDSI-Laptop kernel: [258762.883676] usb 1-3: Manufacturer: Generic
May 16 22:58:07 DDSI-Laptop kernel: [258762.883677] usb 1-3: SerialNumber: 125C20100726
May 16 22:58:07 DDSI-Laptop kernel: [258762.883972] usb-storage 1-3:1.0: USB Mass Storage device detected
May 16 22:58:07 DDSI-Laptop kernel: [258762.884114] scsi host52: usb-storage 1-3:1.0
May 16 22:58:07 DDSI-Laptop mtp-probe: checking bus 1, device 30: "/sys/devices/pci0000:00/0000:00:14.0/usb1/1-3"
May 16 22:58:07 DDSI-Laptop mtp-probe: bus: 1, device: 30 was not an MTP device
May 16 22:58:08 DDSI-Laptop kernel: [258763.881813] scsi 52:0:0:0: Direct-Access Mass Storage Device PQ: 0 ANSI: 0 CCS
May 16 22:58:08 DDSI-Laptop kernel: [258763.882008] sd 52:0:0:0: Attached scsi generic sg1 type 0
May 16 22:58:08 DDSI-Laptop kernel: [258763.883073] sd 52:0:0:0: [sdb] 31116288 512-byte logical blocks: (15.9 GB/14.8 GiB)
May 16 22:58:08 DDSI-Laptop kernel: [258763.883195] sd 52:0:0:0: [sdb] Write Protect is off
May 16 22:58:08 DDSI-Laptop kernel: [258763.883198] sd 52:0:0:0: [sdb] Mode Sense: 03 00 00 00
May 16 22:58:08 DDSI-Laptop kernel: [258763.883312] sd 52:0:0:0: [sdb] No Caching mode page found
May 16 22:58:08 DDSI-Laptop kernel: [258763.883315] sd 52:0:0:0: [sdb] Assuming drive cache: write through
Was verursacht den Unterschied?
Antwort1
-… /dev/sdb
Dies ist eine normale Datei, kein Gerät. Sie müssen /dev/sdb
zu einem Zeitpunkt versucht haben, auf dieses Laufwerk zu schreiben, als kein Gerät mit diesem Laufwerksbuchstaben verbunden war. Seien Sie vorsichtig! Sie hatten Glück, dass Sie kein anderes Gerät als das beabsichtigte überschrieben haben.
Informationen zu Blockgeräten in /proc
und /sys
werden direkt vom Kernel bereitgestellt. Dabei wird der Name des Kernels für das Gerät verwendet. Geräteknoten in /dev
werden verwaltet vonudev; sie folgen normalerweise den Gerätenamen des Kernels (und fügen andere Namen als symbolische Links hinzu), aber das /dev
manuelle Schreiben kann udev stören. Da der Verzeichniseintrag /dev/sdb
bereits vorhanden war, wurde der Geräteknoten beim Einstecken der SD-Karte nicht erstellt.
Entfernen Sie /dev/sdb
die SD-Karte, werfen Sie sie aus, stecken Sie sie wieder ein und prüfen Sie, welchen Gerätenamen sie erhält. Sie sollten ein Blockgerät sehen:
$ ls -l /dev/sdb Brw-rw-rw- 1 Root-Diskette 8, 16 … /dev/sdb