nein / dev / *, aber / sys / bus / mmc Geräteinformationen auf beschädigter SD-Karte

315
einsweniger

Ein Freund gab mir eine defekte SD-Karte und hoffte, ich könnte etwas davon wiederherstellen. Ich habe keine Probleme, andere Karten zu montieren. Ich bekomme keine Blockgeräte in / dev, aber das mmc-Subsystem erkennt die eingesetzte Karte als mmc0 und listet sie auf. edit3: Die Kartenspezifikationen aus dem mmc-Subsystem sehen für mich gut aus (im Codeabschnitt angehängt.)

edit2: Hier geht es nicht um Datenwiederherstellung per se. Meine Frage ist, ob und wie ich Daten vom erkannten mmc0 erhalten kann.

Gibt es eine Möglichkeit, das erkannte mmc-Gerät dazu zu bewegen, mir zumindest einige Daten zu geben, oder geht alles verloren?

Ich konnte nicht herausfinden, was "obligatorischer SD-Status" sein könnte, aber ich denke, dass dies ein Standardstatus für SD-Speicherkarten ist.

Zumindest ein binärer Speicherauszug des Inhalts könnte hilfreich sein, um etwas wiederherzustellen. Ich weiß, das ist irgendwie eine verlorene Sache, aber ich möchte es trotzdem versuchen. Von da an sollte ich gut sein. Ich hoffe, dass die Blöcke nicht zu zufällig über den Speicher verteilt werden. Ich würde sogar so weit gehen, es aufzubrechen, aber ich schätze, ich kann nichts tun.

Es tut uns leid, wenn es sich um ein Duplikat handelt, ich musste bei der Suche wirklich genau sein, da die meisten meiner Treffer nicht mit dem jeweiligen Problem in Zusammenhang standen. Danke: 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 

Hinweis: Ich habe einen Kernel-Subsystem-Fehler in Bezug auf meinen Kartenleser gefunden. es gilt nicht für meine Kernelversion.

edit: als Referenz, so sieht eine neue Arbeitskarte in dmesg aus:

[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 

Ich versuche herauszufinden, was eigentlich mit der Karte nicht stimmt. Ich kompiliere jetzt einen Kernel mit mmc-debug. Beim Lesen von SD-Spezifikationen

edit4: nachdem ich den modifizierten Kernel kompiliert hatte, erhielt ich eine neue Ausgabe. Nach einem Vergleich der vereinfachten Host-Controller-Spezifikationen (mit der Ausgabe, die ich erhielt) stellte ich fest, dass die vereinfachten Spezifikationen den Prozess nicht genug abdecken, um das Problem zu verstehen. Vielleicht, wenn jemand mit etwas Einsicht ihre Gedanken teilen kann?

Ich habe die Debug-Ausgabe von dmesg dokumentiert, um die Situation zu verbessern:

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
@Moab ist kein Duplikat. einsweniger vor 8 Jahren 0
"Wiederherstellung beschädigter SD-Karte", sieht für mich wie ein Betrogener aus. Wir können nicht jede individuelle Situation bei der Datenwiederherstellung beantworten. Moab vor 8 Jahren 1
@Moab Ich habe die Frage aktualisiert, ist das eher so? einsweniger vor 8 Jahren 0
Funktioniert die Karte in einem anderen PC wie Windows? Beim Realtek RTS5209-Kartenleser gibt es einen protokollierten Kernel-Fehler, bei dem einige Karten nicht richtig erkannt werden können, insbesondere bei Karten mit mehr als 8 GB. https://bugzilla.kernel.org/show_bug.cgi?id=53581 und weitere Informationen finden Sie hier: https://bbs.archlinux.org/viewtopic.php?id=164210 acejavelin vor 8 Jahren 0
@acejavelin Ja, ich habe die gesehen. Ich kann den Fehler nicht auf die gleiche Weise reproduzieren, wie im Fehler erwähnt, die Ausgabe unterscheidet sich deutlich von meiner. Meine 16- und 64-GB-Karten funktionieren einwandfrei: D erzeugen beide die Meldung "Spannungsschalter kann nicht überprüft werden". Ich werde sowieso einen anderen PC ausprobieren, sobald ich einen gefunden habe. Das Problem ist, ich vertraue dem Windows-PC nicht an, die Daten auf der Karte zu lassen, und versuche, etwas automatisch zu "reparieren" (o_0) einsweniger vor 8 Jahren 0
"Wiederherstellen" von Daten und "Koaxing" von Daten sind ziemlich ähnlich. Entweder können Sie direkt auf die Daten zugreifen oder nicht. Kannst du erklären, was du versuchst, das anders ist? Versuchen Sie, die Karte zu "reparieren", damit Sie normalerweise auf die Daten zugreifen können? fixer1234 vor 8 Jahren 0

0 Antworten auf die Frage