SDカードパーティションテーブルに書き込めません。

SDカードパーティションテーブルに書き込めません。

SDカードにパーティションテーブルを書き込めません。 IOCTLエラー。 Linuxではparted、cfdisk、またはfdiskを使用するか、Windowsではフォーマットが機能しないというメッセージのみが表示され、削除できません。パーティションテーブルは消えないので、ディスク上の対応するセクタは書き込みに失敗しましたが、何とか読み取ることができると確信しています。

ディスク上の他の場所にパーティションテーブルを書き込むことはできますか?

SDカードは32GB Sandiskで、k3osを使ってフラッシュしました。

追加情報:

TestDisk 7.1, Data Recovery Utility, July 2019
Christophe GRENIER <[email protected]>
https://www.cgsecurity.org

Disk /dev/sdd - 31 GB / 29 GiB - CHS 30437 64 32
Analyse cylinder  1084/30436: 03%
Read error at 1083/1/1 (lba=2218016)

check_FAT: Unusual number of reserved sectors 4 (FAT), should be 1.
  FAT16 >32M               1   0  1    56  63 32     114688 [NO NAME]
  Linux                   58   0  1  1010  63 32    1951744 [root]

最初の512バイトに0を書き込もうとしましたが、結果は次のとおりです。

root@amnesia:~# dd if=/dev/sdd bs=512 count=1|hexdump
1+0 records in
1+0 records out
0000000 b8fa 1000 d08e 00bc b8b0 0000 d88e c08e
0000010 befb 7c00 00bf b906 0200 a4f3 21ea 0006
0000020 be00 07be 0438 0b75 c683 8110 fefe 7507
0000030 ebf3 b416 b002 bb01 7c00 80b2 748a 8b01
512 bytes copied, 0.0029971 s, 171 kB/s
0000040 024c 13cd 00ea 007c eb00 00fe 0000 0000
0000050 0000 0000 0000 0000 0000 0000 0000 0000
*
00001b0 0000 0000 0000 0000 e765 fb8c 0000 0080
00001c0 1001 030c 8fe0 0800 0000 c000 0001 0000
00001d0 a0c1 0383 ffe0 d000 0001 c800 001d 0000
00001e0 0000 0000 0000 0000 0000 0000 0000 0000
00001f0 0000 0000 0000 0000 0000 0000 0000 aa55
0000200

本当に最初のセクターに書き込めないようです。また、このカードでtestdiskを使用するたびに、シリンダー1083の読み取りエラーが一貫しています。ところで、テストディスクを満たすためにディスク構造を4ヘッドから64ヘッドに変更しました。

Smartctlエラー、有用な情報はありません。 lsblk は以下を示しています。

root@amnesia:~# lsblk2 /dev/sdd
 SIZE FSTYPE MODEL          NAME   SERIAL       UUID
29.7G        SD_Card_Reader sdd    000000000820 
  56M vfat                  ├─sdd1              D013-2C4C
 953M ext4                  └─sdd2              a3198349-8ae7-47cd-8ed7-26e09ba8146b

sdtoolというツールは「書き込み禁止状態:オフ」を表示します。

これは単に保存できない不良SDカードですか?

答え1

私はこれらのディスクのセクタが書き込みに失敗しましたが、何とか読み取ることができると確信しています。

これは、SDカードなどのフラッシュ抽象化層を持つフラッシュメモリの障害モードではありません。フラッシュメモリに書き込むには、1ページを消去してからページ全体を書き換えてデータを変更する必要があります。
これは限られた回数しか実行できないため、通常、ページがクリアされると、抽象化レイヤは単に別のクリアされたページを選択して同じアドレスにマッピングします。ウェアレベリング。むしろ、これはフラッシュメモリがOSが見るよりも物理的に大きいことを意味します。実際には、実際のメモリのアドレスはOSが見ているアドレスとは関係がなく、常に使用されているブロックではなく特定の割合が必要です。以前に使用したブロックを消去するときに使用できます。

ページは頻繁に消去され、信頼できなくなった場合にのみ使用可能なページプールから削除されます。これが頻繁に発生すると、データ損失の危険なしにページを再度消去できないため、メモリは「読み取り専用」になります。

他の場所ではデバイスが読めないと文句を言わないので、ここではそうではありません。

だから私はこれがパーティションテーブルを指すアドレスをロックするファームウェア保護(SDカードのフラッシュコントローラは、カードリーダーと同様にファームウェアを実行するマイクロコントローラです)と確信しています。可能)またはオペレーティングシステムでそれを行うことができないようにブロックします。

したがって、OSではないと仮定し、いくつかのことを試したことを見ると、一部のファームウェアがユーザーをブロックしているとします。間違った位置にある可能性のある特定の小さなスライダーがあるかどうかを確認してください。

ディスク上の他の場所にパーティションテーブルを書き込むことはできますか?

ストレージデバイスのどこにでも書き込むことができます(実際のディスクではありません。)! )、しかし、パーティションテーブルは、デバイスの最初の部分でのみパーティションテーブルとして機能することができます。だから、いいえ、それはあなたの質問が意味するものではありません。

答え2

私はこのLinuxを試してみます。

lsblk

# identify the sd card, be sure it is what u think it is by removing then running
# lsblk again and seeing that not there, then reconnecting.

# also

alias lsblk2='lsblk -o size,fstype,model,name,serial,uuid'

lsblk2

# that will print out more useful info

# then, for example, if your sd card is   /dev/sdb

dd   if=/dev/zero   of=/dev/sdb   bs=512   count=1

そのddコマンドが機能せず、SDカードに単純なゼロを書き込むときにエラーが発生した場合は、他の回答で述べたように、他の問題が発生する可能性があります(これは理解できません)。あなたが言及したパーティションテーブルに書き込めません。しかし、詳しく説明しないと…よく機能せず、間違った結論を出すことができる多くのユーティリティがあります。このddコマンドを実行すると、SDカードの既存のパーティションテーブルも効果的に消去されます。

# to create a partition table it would be this command,
# again assuming /dev/sdb is your sd card for example

parted /dev/sdb mklabel gpt

# I have never had this parted command fail on me

別の診断方法は、smartctl --xall /dev/sdbSDカードの状態を示す値にアクセスすることです。これは、特にSDカードに実際に問題があるかどうかを理解するのに役立ちます。耐摩耗性グレード

https://superuser.com/questions/1064119/usb-flash-drives-or-sd-cards-with-smart

答え3

このコマンドを使用してlsblkSDカードを含むブロックを見つけます。

次にfdisk、ディスクパーティショニングに進みます。

次に、パーティションに関する追加情報を参照してくださいpartprobehwprobe

関連情報