ddrescue를 사용하여 SDHC 카드에서 데이터를 구출하려고합니다.
while true ; do ddrescue -d /dev/mmcblk0p1 mmc.img mmc.log ; done
컨트롤러가 카드 또는 랩톱에있는 컨트롤러인지 확실하지 않은 경우 특정 수의 불량 섹터를 읽은 후 (syslog에 표시되는) 모든 섹터에 대해 오류를 반환하는 것 같습니다. t는 syslog에 표시됩니다), 나는 카드를 튀어 나와 슬롯에 다시 넣으면 이것을 재설정하고 너무 많은 불량 섹터를 읽을 때까지 양호한 섹터를 다시 양호하게보고한다는 것을 알았습니다.
현재이 루프를 사용하여 ddrescue의 상태 출력을 주시하고 카드를 수동으로 재설정합니다. 카드를 제거하지 않고 컨트롤러를 재설정하여 복구 프로세스를 자동으로 실행할 수있는 방법이 있습니까?
어쩌면 이것은 관련이 있지만이 Dell 랩톱에서는 리더가 카드가 삽입되었다는 것을 알기 위해 부팅 또는 사용 중에 카드를 삽입해야 echo 1 > /sys/bus/pci/rescan
하지만 리더 PCI 장치가 나타난 후에 한 번만 수행하면 모든 것이 예상대로 작동합니다.
07:00.0 System peripheral: JMicron Technology Corp. SD/MMC Host Controller (rev 30)
Subsystem: Dell Device 046e
Flags: bus master, fast devsel, latency 0, IRQ 16
Memory at f0600000 (32-bit, non-prefetchable) [size=256]
Capabilities: [a4] Power Management version 3
Capabilities: [80] Express Endpoint, MSI 00
Capabilities: [94] MSI: Enable- Count=1/1 Maskable- 64bit-
Kernel driver in use: sdhci-pci
관련 syslog :
# pop in card
mmc0: new SDHC card at address b368
mmcblk0: mmc0:b368 NCard 15.0 GiB (ro)
mmcblk0: p1
# ddrescue begins to read, error count increases, until at some point:
mmcblk0: error -110 transferring data, sector 12854624, nr 1, cmd response 0x900, card status 0x0
end_request: I/O error, dev mmcblk0, sector 12854624
mmcblk0: error -110 transferring data, sector 12854625, nr 1, cmd response 0x900, card status 0x0
end_request: I/O error, dev mmcblk0, sector 12854625
mmcblk0: error -110 transferring data, sector 12854626, nr 1, cmd response 0x900, card status 0x0
end_request: I/O error, dev mmcblk0, sector 12854626
mmcblk0: error -110 transferring data, sector 12854627, nr 1, cmd response 0x900, card status 0x0
end_request: I/O error, dev mmcblk0, sector 12854627
mmcblk0: error -110 transferring data, sector 12854628, nr 1, cmd response 0x900, card status 0x0
end_request: I/O error, dev mmcblk0, sector 12854628
# time since last successful read increases, pop out card
mmc0: Card removed during transfer!
mmc0: Resetting controller.
mmcblk0: error -123 sending status command, retrying
mmcblk0: error -123 sending status command, retrying
mmcblk0: error -123 sending status command, aborting
mmc0: card b368 removed
# GOTO 10
또한 syslog에서 이러한 오류를 생성하는 대신 USB 카드 리더를 사용해 보았습니다. 사라지고 계속하려면 다시 연결해야합니다.
sdhci_pci
모듈을 다시로드하면 트릭을 수행하는 것 같지만 이 작업을 수행하는 데 무차별 강제 옵션이 있는지 궁금합니다.
while sleep 1 ; do
ddrescue -d -T 1 /dev/mmcblk0p1 mmc.img mmc.log
modprobe -r sdhci_pci
modprobe sdhci_pci
done