
У меня есть совершенно новая карта SD класса 10 на 16 ГБ, и она ведет себя очень странно. После того, как я подключил карту с помощью USB-устройства чтения SD-карт, устройство появилось как /dev/sdb. Я попытался скопировать образ raw на 2 ГБ с помощью dd
into, но он сразу же возвращает: «На устройстве больше нет места».
Блочное устройство показывает: на нем всего 10М места.
ls -lah /dev/sdb
-rw-r--r-- 1 root root 10M máj 16 23:16 /dev/sdb
fdisk показывает тот же размер:
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
Я попробовал SD-карту с другим устройством чтения, но, похоже, проблема не в устройстве чтения, «размер» SD-карты составляет 10 МБ с каждым устройством чтения.
cat /proc/partitions
major minor #blocks name
...
8 16 15558144 sdb
...
Самое интересное: похоже, что ядро действительно знает правильный размер SD-карты.
cat /sys/block/sdb/size
31116288 # numbers of 512 byte blocks => 15.93 GB
И, похоже, это правильно распознано.
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
В чем причина разницы?
решение1
-… /dev/sdb
Это обычный файл, а не устройство. Вы, должно быть, пытались записать /dev/sdb
в какой-то момент, когда не было устройства, подключенного к этой букве диска. Будьте осторожны! Вам повезло, что вы не перезаписали другое устройство, а не то, которое намеревались.
Информация о блочных устройствах в /proc
и /sys
предоставляется непосредственно ядром использует имя ядра для устройства. Узлы устройств в /dev
управляютсяудев; они обычно следуют именам устройств ядра (и добавляют другие имена как символические ссылки), но запись /dev
вручную может нарушить работу udev. Поскольку запись каталога /dev/sdb
уже существовала, она не создала узел устройства, когда вы вставили SD-карту.
Удалите /dev/sdb
, извлеките SD-карту, вставьте ее обратно и проверьте, какое имя устройства она получает. Вы должны увидеть блочное устройство:
$ ls -l /dev/sdb бrw-rw-rw- 1 корневой диск 8, 16 … /dev/sdb