শারীরিকভাবে কার্ডটি সরিয়ে না দিয়ে এমএমসি নিয়ন্ত্রকটিকে রিসেট করছেন?


9

আমি ddrescue ব্যবহার করে একটি SDHC কার্ড থেকে ডেটা উদ্ধার করার চেষ্টা করছি:

while true ; do ddrescue -d /dev/mmcblk0p1 mmc.img mmc.log ; done

নিয়ন্ত্রক, আমি নিশ্চিত নই যে এটি কার্ডে থাকা একটিটি বা আমার ল্যাপটপে থাকা একটি, নির্দিষ্ট সংখ্যক খারাপ সেক্টর পড়ার পরে (যা ডস ' টি সিসলগে প্রদর্শিত হবে), আমি দেখতে পেলাম যে কার্ডটি পপিং করা এবং স্লটে আবার এটিকে পুনরায় সেট করা হয় এবং অনেকগুলি সেক্টর পড়া না হওয়া পর্যন্ত ভাল খাতগুলিকে আবার ভাল বলে প্রতিবেদন করা হয় ইত্যাদি।

বর্তমানে আমি এই লুপটি ব্যবহার করছি, ডিড্রেসকিউয়ের স্থিতির আউটপুটটিতে নজর রাখছি, কার্ডটি ম্যানুয়ালি পুনরায় সেট করা। কার্ডটি সরিয়ে না দিয়ে নিয়ামকটিকে পুনরায় সেট করার কোনও উপায় আছে, যাতে উদ্ধার প্রক্রিয়াটি বিনা নজরে চালানো যায়?

হতে পারে এটি সম্পর্কিত, তবে এই ডেল ল্যাপটপে, পাঠক এমনকি একটি কার্ড hasোকানো হয়েছে তা লক্ষ্য করার জন্য এটি বুট বা ব্যবহারের সময় করা আবশ্যক echo 1 > /sys/bus/pci/rescan, তবে কেবল একবার, এর পরে পাঠক পিসিআই ডিভাইসটি উপস্থিত হবে এবং সবকিছু প্রত্যাশা অনুযায়ী কাজ করে:

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

প্রাসঙ্গিক সিসলগ:

# 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

আমি একটি ইউএসবি কার্ড রিডার ব্যবহার করার চেষ্টা করেছি, সিসলগে এই ত্রুটিগুলি তৈরি করার পরিবর্তে, এটি কেবল অদৃশ্য হয়ে যায় এবং চালিয়ে যাওয়ার জন্য পুনরায় প্লাগ করা দরকার।


দেখে মনে হচ্ছে sdhci_pciমডিউলটি পুনরায় লোড করা কৌতুকটি করে তবে আমি অবাক হয়েছি যে এটি করার জন্য কোনও নিষ্ঠুর-শক্তি বিকল্প নেই কিনা:

while sleep 1 ; do
    ddrescue -d -T 1 /dev/mmcblk0p1 mmc.img mmc.log 
    modprobe -r sdhci_pci
    modprobe sdhci_pci
done

উত্তর:


4

এম্বেড থাকা ডিভাইসে (কোবো ইবুক রিডার) ফ্লাইতে এসডি-কার্ড পরিবর্তন করার পরে আমার একই সমস্যা ছিল (উপরে দেখানো হিসাবে I / O ত্রুটি)। এটি নতুন কার্ড, এর ক্ষমতা এবং এটি সনাক্ত করতে পারে না এবং এর পরিবর্তে পুরানো কার্ডটি উপস্থিত থাকার প্রত্যাশা করে।

ড্রাইভারটি অন্তর্নির্মিত হওয়ার পরে একটি মডিউল পুনরায় লোড করা সম্ভব হয়নি। device/deleteবা host/scanউপলব্ধ ছিল না। একটি "অপসারণযোগ্য" মডিউল প্যারামিটার সেট করে এটি কার্যকর হয়নি।

আমার ক্ষেত্রে সমাধানটি ছিল unbindএবং তারপরে bind, এমএমসি ব্লক ডিভাইসের জন্য ড্রাইভার।

# blockdev --getsize64 /dev/mmcblk0
3965190144
# readlink /sys/block/mmcblk0
../devices/platform/mxsdhci.2/mmc_host/mmc0/mmc0:af9e/block/mmcblk0
# echo mxsdhci.2 > /sys/bus/platform/drivers/mxsdhci/unbind
~~~ change card ~~~
# echo mxsdhci.2 > /sys/bus/platform/drivers/mxsdhci/bind
# blockdev --getsize64 /dev/mmcblk0
8168931328

সুন্দর জিনিসটি হ'ল এটি কেবল আপনার আগ্রহী ডিভাইসকেই প্রভাবিত করে /dev/mmcblk1


2

আপনি নিম্নলিখিত পদক্ষেপগুলি ব্যবহার করে কোনও SATA ডিভাইস পুনরায় সেট করার চেষ্টা করতে পারেন:

ডিভাইস ধরে নেওয়া যাক নামকরণ করা হয়: /dev/mmcblk0p1

  1. ডিভাইসটি কোন নিয়ামকের সাথে সংযুক্ত রয়েছে তা সন্ধান করুন (আমাদের এটি পরে প্রয়োজন হবে):

    $ readlink /sys/block/mmcblk0p1
     ../devices/pci0000:00/0000:00:1f.2/host1/target1:0:0/1:0:0:0/block/mmcblk0p1
    

    দ্রষ্টব্য: উত্তরটি হোস্ট 1 হলে আকর্ষণীয় অংশটি নিয়ামককে চিহ্নিত করে।

  2. ডিভাইসটি সংযোগ বিচ্ছিন্ন করুন

    $ echo 1 > /sys/block/mmcblk0p1/device/delete
    

    দ্রষ্টব্য: এটি বাস থেকে ডিভাইসটি সরিয়ে ফেলবে (যৌক্তিকভাবে)। dmesgনিশ্চিতকরণ জন্য দেখুন ।

  3. নিয়ন্ত্রক পুনরায় স্ক্যান

    $ echo "- - -" > /sys/class/scsi_host/host1/scan
    

    দ্রষ্টব্য: হোস্ট 1 হ'ল প্রথম ধাপের শনাক্তকারী। আবার, dmesgডিভাইসটি আবার আবিষ্কার করা উচিত।

তথ্যসূত্র

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.