нет / dev / *, но / sys / bus / mmc информация об устройстве на поврежденной SD-карте

349
einsweniger

Друг дал мне сломанную SD-карту, надеясь, что я смогу что-нибудь восстановить с нее. У меня нет проблем с установкой любых других карт. Я не получаю никаких блочных устройств в / dev, но подсистема mmc распознает вставленную карту как mmc0 и ​​выводит ее. edit3: спецификации карт из подсистемы mmc выглядят хорошо для меня (добавлено в разделе кода).

edit2: речь идет не о восстановлении данных как таковой. Мой вопрос заключается в том, если и как я могу получить какие-либо данные от признанного mmc0.

Есть ли способ уговорить распознанное устройство mmc, чтобы он дал мне хоть какие-то данные, или все потеряно?

Я не мог понять, что такое «обязательный статус SD», но я думаю, что это стандартный статус для карт памяти SD.

По крайней мере, двоичный дамп содержимого может быть полезен для восстановления чего-либо. Я знаю, что это своего рода безнадежное дело, но я все равно хотел бы попробовать. С этого момента, мне должно быть хорошо идти. Я надеюсь, что блоки не слишком случайно распределены по памяти. Я бы даже дошел до того, чтобы взломать его, но, думаю, я ничего не смогу сделать.

Извините, если это дубликат, я должен был быть очень конкретным в своем поиске, так как большинство моих хитов не были связаны с конкретной проблемой. Спасибо: 3

$ dmesg | tail -n3: [10674.146692] mmc0: cannot verify signal voltage switch [10674.244739] mmc0: card lacks mandatory SD Status function [10674.244774] mmc0: new SD card at address 59b4  $ find /sys -name '*mmc*' (abbrev.) /sys/bus/mmc/devices/mmc0:59b4 /sys/bus/mmc/drivers/mmcblk /sys/bus/platform/devices/rtsx_pci_sdmmc.0 /sys/bus/platform/drivers/rtsx_pci_sdmmc/rtsx_pci_sdmmc.0 /sys/devices/pci0000:00/0000:00:1c.2/0000:04:00.0/rtsx_pci_sdmmc.0/mmc_host/mmc0/mmc0:59b4 /sys/class/mmc_host/mmc0 /sys/module/mmc_core/holders/mmc_block /sys/module/mmc_core/holders/rtsx_pci_sdmmc /sys/module/mmc_block /sys/module/rtsx_pci/holders/rtsx_pci_sdmmc /sys/module/rtsx_pci_sdmmc/drivers/platform:rtsx_pci_sdmmc  $ lspci -vvvs 04:00.0 04:00.0 Unassigned class [ff00]: Realtek Semiconductor Co., Ltd. RTS5209 PCI Express Card Reader (rev 01) Subsystem: Lenovo Device 21dd Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR+ FastB2B- DisINTx+ Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx- Latency: 0, Cache Line Size: 64 bytes Interrupt: pin A routed to IRQ 24 Region 0: Memory at f0600000 (32-bit, non-prefetchable) [size=4K] Capabilities: <access denied> Kernel driver in use: rtsx_pci Kernel modules: rtsx_pci  $ uname -a Linux 4.4.1-2-ARCH #1 SMP PREEMPT Wed Feb 3 13:12:33 UTC 2016 x86_64 GNU/Linux  $ for i in /sys/bus/mmc/devices/mmc0:59b4/*; do echo -n "$i: "; cat $i; done /sys/bus/mmc/devices/mmc0:59b4/cid: 041641534d495344000000000000b901 /sys/bus/mmc/devices/mmc0:59b4/csd: 00000000000000000000000000000001 /sys/bus/mmc/devices/mmc0:59b4/date: 09/2011 /sys/bus/mmc/devices/mmc0:59b4/erase_size: 0 /sys/bus/mmc/devices/mmc0:59b4/fwrev: 0x0 /sys/bus/mmc/devices/mmc0:59b4/hwrev: 0x0 /sys/bus/mmc/devices/mmc0:59b4/manfid: 0x000004 /sys/bus/mmc/devices/mmc0:59b4/name: SMISD /sys/bus/mmc/devices/mmc0:59b4/oemid: 0x1641 /sys/bus/mmc/devices/mmc0:59b4/preferred_erase_size: 0 /sys/bus/mmc/devices/mmc0:59b4/scr: 0000000000000000 /sys/bus/mmc/devices/mmc0:59b4/serial: 0x00000000 /sys/bus/mmc/devices/mmc0:59b4/type: SD /sys/bus/mmc/devices/mmc0:59b4/uevent: MMC_TYPE=SD MMC_NAME=SMISD MODALIAS=mmc:block 

обратите внимание: я обнаружил ошибку подсистемы ядра, связанную с моим устройством чтения карт; это не относится к моему ядру, правда.

edit: для справки, вот так выглядит новая рабочая карта в dmesg:

[18936.957097] mmc0: cannot verify signal voltage switch [18937.064604] mmc0: new ultra high speed SDR104 SDHC card at address e624 [18937.064787] mmcblk0: mmc0:e624 SE16G 14.8 GiB  [18937.074743] mmcblk0: p1 

Я пытаюсь выяснить, что на самом деле не так с картой, сейчас я собираю ядро ​​с помощью mmc-debug. При чтении спецификаций SD

edit4: после компиляции модифицированного ядра я получил новый вывод. После сравнения упрощенных спецификаций хост-контроллера (с полученным результатом) я понял, что упрощенные спецификации недостаточно охватывают процесс, чтобы я мог понять проблему. Может быть, если кто-то с некоторым пониманием может поделиться своими мыслями?

Я задокументировал вывод отладочной информации dmesg, чтобы помочь с ситуацией:

it starts with this, maybe resets some things o_0, it gets better, soon. rtsx_pci_sdmmc rtsx_pci_sdmmc.0: sdmmc_get_cd: RTSX_BIPR = 0x00010000 mmc0: mmc_rescan_try_freq: trying to init card at 400000 Hz mmc0: clock 0Hz busmode 2 powermode 1 cs 0 Vdd 21 width 0 timing 0 rtsx_pci_sdmmc rtsx_pci_sdmmc.0: sdmmc_switch_voltage: signal_voltage = 0 rtsx_pci_sdmmc rtsx_pci_sdmmc.0: Initial signal voltage of 3.3v mmc0: clock 400000Hz busmode 2 powermode 2 cs 0 Vdd 21 width 0 timing 0  mmc0: starting CMD52 arg 00000c00 flags 00000195 rtsx_pci_sdmmc rtsx_pci_sdmmc.0: sd_send_cmd_get_rsp: SD/MMC CMD 52, arg = 0x00000c00 rtsx_pci_sdmmc rtsx_pci_sdmmc.0: 0xFDA0(8): 80 01 00 00 00 1f 00 00 rtsx_pci_sdmmc rtsx_pci_sdmmc.0: 0xFDA8(8): 00 ff ff ff ff ff 91 08 rtsx_pci_sdmmc rtsx_pci_sdmmc.0: 0xFDB0(4): 00 00 00 08 00 00 00 00 rtsx_pci_sdmmc rtsx_pci_sdmmc.0: 0xFD52(8): 04 55 00 14 0d 03 03 15 rtsx_pci_sdmmc rtsx_pci_sdmmc.0: 0xFD5A(8): 55 01 02 01 01 00 aa aa rtsx_pci_sdmmc rtsx_pci_sdmmc.0: 0xFD62(8): e9 55 55 15 04 00 64 04 rtsx_pci_sdmmc rtsx_pci_sdmmc.0: rtsx_pci_send_cmd error (err = -110) rtsx_pci_sdmmc rtsx_pci_sdmmc.0: CMD 52 0x00000c00 error(-110) mmc0: req done (CMD52): -110: 00000000 00000000 00000000 00000000 repeated once with: mmc0: starting CMD52 arg 80000c08 flags 00000195 [...] mmc0: req done (CMD52): -110: 00000000 00000000 00000000 00000000  reset card (1) CMD0 mmc0: clock 400000Hz busmode 2 powermode 2 cs 1 Vdd 21 width 0 timing 0 mmc0: starting CMD0 arg 00000000 flags 000000c0 rtsx_pci_sdmmc rtsx_pci_sdmmc.0: sd_send_cmd_get_rsp: SD/MMC CMD 0, arg = 0x00000000 mmc0: req done (CMD0): 0: 00000000 00000000 00000000 00000000 mmc0: clock 400000Hz busmode 2 powermode 2 cs 0 Vdd 21 width 0 timing 0  voltage check (2) CMD8 mmc0: starting CMD8 arg 000001aa flags 000002f5 rtsx_pci_sdmmc rtsx_pci_sdmmc.0: sd_send_cmd_get_rsp: SD/MMC CMD 8, arg = 0x000001aa rtsx_pci_sdmmc rtsx_pci_sdmmc.0: cmd->resp[0] = 0x000001aa mmc0: req done (CMD8): 0: 000001aa 00000000 00000000 00000000  get SDIO OCR (5) CMD5 (shortened) mmc0: starting CMD5 arg 00000000 flags 000002e1 mmc0: req failed (CMD5): -110, retrying... mmc0: req failed (CMD5): -110, retrying... mmc0: req failed (CMD5): -110, retrying... mmc0: req done (CMD5): -110: 00000000 00000000 00000000 00000000 this is according to spec, since the card is type=capacity not type=sdio, so flag SDIO=0  I don't know what happens here, I guess it checks for (MP memory present): so step (11)? mmc0: starting CMD55 arg 00000000 flags 000000f5 rtsx_pci_sdmmc rtsx_pci_sdmmc.0: sd_send_cmd_get_rsp: SD/MMC CMD 55, arg = 0x00000000 rtsx_pci_sdmmc rtsx_pci_sdmmc.0: cmd->resp[0] = 0x00400120 mmc0: req done (CMD55): 0: 00400120 00000000 00000000 00000000  since step (2) did not "succeed" this should be (12), spec says to reset the card with CMD0 in this case mmc0: starting CMD41 arg 00000000 flags 000000e1 rtsx_pci_sdmmc rtsx_pci_sdmmc.0: sd_send_cmd_get_rsp: SD/MMC CMD 41, arg = 0x00000000 rtsx_pci_sdmmc rtsx_pci_sdmmc.0: cmd->resp[0] = 0x00ff8000 mmc0: req done (CMD41): 0: 00ff8000 00000000 00000000 00000000  mmc0: clock 0Hz busmode 2 powermode 0 cs 0 Vdd 0 width 0 timing 0 mmc0: clock 0Hz busmode 2 powermode 1 cs 0 Vdd 21 width 0 timing 0 rtsx_pci_sdmmc rtsx_pci_sdmmc.0: sdmmc_switch_voltage: signal_voltage = 0 rtsx_pci_sdmmc rtsx_pci_sdmmc.0: Initial signal voltage of 3.3v mmc0: clock 400000Hz busmode 2 powermode 2 cs 0 Vdd 21 width 0 timing 0 mmc0: clock 400000Hz busmode 2 powermode 2 cs 1 Vdd 21 width 0 timing 0  so, powermode 2 it is, then? CMD0 and CMD8 to start back on square one. mmc0: starting CMD0 arg 00000000 flags 000000c0 rtsx_pci_sdmmc rtsx_pci_sdmmc.0: sd_send_cmd_get_rsp: SD/MMC CMD 0, arg = 0x00000000 mmc0: req done (CMD0): 0: 00000000 00000000 00000000 00000000 mmc0: clock 400000Hz busmode 2 powermode 2 cs 0 Vdd 21 width 0 timing 0 mmc0: starting CMD8 arg 000001aa flags 000002f5 rtsx_pci_sdmmc rtsx_pci_sdmmc.0: sd_send_cmd_get_rsp: SD/MMC CMD 8, arg = 0x000001aa rtsx_pci_sdmmc rtsx_pci_sdmmc.0: cmd->resp[0] = 0x000001aa mmc0: req done (CMD8): 0: 000001aa 00000000 00000000 00000000  mmc0: starting CMD55 arg 00000000 flags 000000f5 rtsx_pci_sdmmc rtsx_pci_sdmmc.0: sd_send_cmd_get_rsp: SD/MMC CMD 55, arg = 0x00000000 rtsx_pci_sdmmc rtsx_pci_sdmmc.0: cmd->resp[0] = 0x00000120 mmc0: req done (CMD55): 0: 00000120 00000000 00000000 00000000 mmc0: starting CMD41 arg 51300000 flags 000000e1 rtsx_pci_sdmmc rtsx_pci_sdmmc.0: sd_send_cmd_get_rsp: SD/MMC CMD 41, arg = 0x51300000 rtsx_pci_sdmmc rtsx_pci_sdmmc.0: cmd->resp[0] = 0x00ff8000 mmc0: req done (CMD41): 0: 00ff8000 00000000 00000000 00000000 repeats 34x times until: mmc0: cannot verify signal voltage switch since the working card produces the same output, I guess this is okay.  I don't know what CMD11 is. simple spec does not cover that. mmc0: starting CMD11 arg 00000000 flags 00000015 rtsx_pci_sdmmc rtsx_pci_sdmmc.0: sd_send_cmd_get_rsp: SD/MMC CMD 11, arg = 0x00000000 rtsx_pci_sdmmc rtsx_pci_sdmmc.0: cmd->resp[0] = 0x00000320 mmc0: req done (CMD11): 0: 00000320 00000000 00000000 00000000 mmc0: clock 0Hz busmode 2 powermode 2 cs 0 Vdd 21 width 0 timing 0 rtsx_pci_sdmmc rtsx_pci_sdmmc.0: sdmmc_switch_voltage: signal_voltage = 1 mmc0: clock 400000Hz busmode 2 powermode 2 cs 0 Vdd 21 width 0 timing 0  WOW. Were magically back in the spec at step (30) CMD2 is issued to get CID mmc0: starting CMD2 arg 00000000 flags 00000067 rtsx_pci_sdmmc rtsx_pci_sdmmc.0: sd_send_cmd_get_rsp: SD/MMC CMD 2, arg = 0x00000000 rtsx_pci_sdmmc rtsx_pci_sdmmc.0: cmd->resp[0] = 0x04164153 rtsx_pci_sdmmc rtsx_pci_sdmmc.0: cmd->resp[1] = 0x4d495344 rtsx_pci_sdmmc rtsx_pci_sdmmc.0: cmd->resp[2] = 0x00000000 rtsx_pci_sdmmc rtsx_pci_sdmmc.0: cmd->resp[3] = 0x0000b901 mmc0: req done (CMD2): 0: 04164153 4d495344 00000000 0000b901  step (31) get RCA mmc0: starting CMD3 arg 00000000 flags 00000075 rtsx_pci_sdmmc rtsx_pci_sdmmc.0: sd_send_cmd_get_rsp: SD/MMC CMD 3, arg = 0x00000000 rtsx_pci_sdmmc rtsx_pci_sdmmc.0: cmd->resp[0] = 0x59b40500 mmc0: req done (CMD3): 0: 59b40500 00000000 00000000 00000000 RCA != 0 so CMD3 is not issued again. spec ends here.  so uuuuh... no clue. CMD9 is not covered in spec mmc0: starting CMD9 arg 59b40000 flags 00000007 rtsx_pci_sdmmc rtsx_pci_sdmmc.0: sd_send_cmd_get_rsp: SD/MMC CMD 9, arg = 0x59b40000 rtsx_pci_sdmmc rtsx_pci_sdmmc.0: cmd->resp[0] = 0x00000000 rtsx_pci_sdmmc rtsx_pci_sdmmc.0: cmd->resp[1] = 0x00000000 rtsx_pci_sdmmc rtsx_pci_sdmmc.0: cmd->resp[2] = 0x00000000 rtsx_pci_sdmmc rtsx_pci_sdmmc.0: cmd->resp[3] = 0x00000001 mmc0: req done (CMD9): 0: 00000000 00000000 00000000 00000001  nor is CMD7 mmc0: starting CMD7 arg 59b40000 flags 00000015 rtsx_pci_sdmmc rtsx_pci_sdmmc.0: sd_send_cmd_get_rsp: SD/MMC CMD 7, arg = 0x59b40000 rtsx_pci_sdmmc rtsx_pci_sdmmc.0: cmd->resp[0] = 0x00000700 mmc0: req done (CMD7): 0: 00000700 00000000 00000000 00000000  mmc0: starting CMD55 arg 59b40000 flags 00000095 rtsx_pci_sdmmc rtsx_pci_sdmmc.0: sd_send_cmd_get_rsp: SD/MMC CMD 55, arg = 0x59b40000 rtsx_pci_sdmmc rtsx_pci_sdmmc.0: cmd->resp[0] = 0x00000920 mmc0: req done (CMD55): 0: 00000920 00000000 00000000 00000000  mmc0: starting CMD51 arg 00000000 flags 000000b5 mmc0: blksz 8 blocks 1 flags 00000200 tsac 100 ms nsac 0 rtsx_pci_sdmmc rtsx_pci_sdmmc.0: sd_read_data: SD/MMC CMD 51, arg = 0x00000000 mmc0: req done (CMD51): 0: 00000000 00000000 00000000 00000000  mmc0: 8 bytes transferred: 0 comclusion: mmc0: card lacks mandatory SD Status function rtsx_pci_sdmmc rtsx_pci_sdmmc.0: sdmmc_get_ro: RTSX_BIPR = 0x00010000 mmc0: new SD card at address 59b4 welp. 
2
@ Моаб, это не дубликат этого. einsweniger 8 лет назад 0
«Восстановление поврежденной SD-карты», для меня выглядит как дурак. Мы не можем ответить на каждую отдельную ситуацию по восстановлению данных. Moab 8 лет назад 1
@Moab Я обновил вопрос, это больше нравится? einsweniger 8 лет назад 0
Работает ли карта на другом ПК, например Windows. В устройстве чтения карт памяти Realtek RTS5209 имеется зарегистрированная ошибка ядра, из-за которой он не может правильно распознавать некоторые карты, особенно с картами объемом более 8 ГБ. https://bugzilla.kernel.org/show_bug.cgi?id=53581 и здесь есть дополнительная информация: https://bbs.archlinux.org/viewtopic.php?id=164210 acejavelin 8 лет назад 0
@acejavelin да, я видел их. Я не могу воспроизвести ошибку так же, как указано в ошибке, вывод отличается от моего. Мои карты емкостью 16 и 64 ГБ работают нормально: D обе выдают сообщение «Не удается проверить переключатель напряжения». Я все равно попробую на другом ПК, как только найду. Проблема в том, что я не доверяю ПК с Windows, чтобы оставить данные на карте в одиночку, пытаясь «починить» что-то автоматически o_0 einsweniger 8 лет назад 0
«Восстановление» данных и «коаксиальные» данные очень похожи. Либо вы можете напрямую получить доступ к данным, либо нет. Можете ли вы уточнить, что вы пытаетесь сделать по-другому? Вы пытаетесь «починить» карту, чтобы получить нормальный доступ к данным? fixer1234 8 лет назад 0

0 ответов на вопрос