web-dev-qa-db-ja.com

再マウント後に取り消されたSDカードへの変更(例:削除されたファイルの再表示)

SDカードのファイルシステムが破損しているため(おそらく電源が不十分なため)、新しいファイルシステムを作成したいと考えています。 (e2fsckは失敗します。ログに記録します。)

ただし、SDカード上のファイル関連の変更は魔法のように元に戻されます!

  • 最初の例:SDカードをマウントして、いくつかのファイルを削除すると、ファイルが消えます。マウントを解除して再度マウントすると、ファイルが再び存在します!同様に、ファイルのコンテンツを変更すると、元のコンテンツは再マウント後に元に戻ります。
  • 2番目の例:fdiskを使用して新しいパーティションテーブルを作成すると、古いパーティションテーブルがすぐに元に戻ります。 (以下のログ。)
  • 3番目の例:while私はdd if=/dev/zero of=/dev/mmcblk0 bs=1Mfdiskを実行しましたDisk /dev/mmcblk0 doesn't contain a valid partition tableddが完了すると、古いパーティションテーブルが再び戻りました。

小さなスイッチでSDカードを物理的にロックしていません。読み取り専用エラーは発生しません。実際、エラーはまったく発生しません! dmesgは、エラーのあるファイルシステムをマウントしていることを除いて、何も報告しません。

Xubuntu live cd(12.10)の実行中にも問題が発生しました。残念ながら、現時点では他のコンピューターやSDカードリーダーにアクセスできません。

それは私のコンピューター、SDカードの問題なのでしょうか、それともいつも何かが足りないのですか?私が試すことができる提案はありますか?


e2fsck失敗:

$ Sudo e2fsck /dev/mmcblk0p2 
e2fsck 1.42.5 (29-Jul-2012)
/dev/mmcblk0p2: recovering journal
Superblock needs_recovery flag is clear, but journal has data.
Run journal anyway<y>? yes
e2fsck: unable to set superblock flags on /dev/mmcblk0p2


/dev/mmcblk0p2: ********** WARNING: Filesystem still has errors **********

以下は、fdiskが効果がないことを示すログです。

$ Sudo fdisk /dev/mmcblk0

Command (m for help): p

Disk /dev/mmcblk0: 31.5 GB, 31460425728 bytes
4 heads, 16 sectors/track, 960096 cylinders, total 61446144 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00017b69

        Device Boot      Start         End      Blocks   Id  System
/dev/mmcblk0p1            8192      122879       57344    c  W95 FAT32 (LBA)
/dev/mmcblk0p2          122880    61446143    30661632   83  Linux

Command (m for help): d
Partition number (1-4): 1

Command (m for help): d
Selected partition 2

Command (m for help): p

Disk /dev/mmcblk0: 31.5 GB, 31460425728 bytes
4 heads, 16 sectors/track, 960096 cylinders, total 61446144 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00017b69

        Device Boot      Start         End      Blocks   Id  System

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.



$ Sudo fdisk -l /dev/mmcblk0

Disk /dev/mmcblk0: 31.5 GB, 31460425728 bytes
4 heads, 16 sectors/track, 960096 cylinders, total 61446144 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00017b69

        Device Boot      Start         End      Blocks   Id  System
/dev/mmcblk0p1            8192      122879       57344    c  W95 FAT32 (LBA)
/dev/mmcblk0p2          122880    61446143    30661632   83  Linux
7
chs

この時点で、SDカードでbadblocksを実行して、見つかったものを確認することをお勧めします。

カードの書き込みロジックが破損しているように見えますが、マウントポイントに表示されるのは、単にデータのキャッシュバージョンです。同期およびアンマウント中に書き戻されることになっています。 SDカードがまったくぶら下がっていることに言及していないことを確認すると、損傷が発生するほど深刻であることが示唆されますfalse positive write back responseまたはより簡単な言葉でディスクはあなたに嘘をついています書き込みが完了したと表示されます

カードがシステムから取り外されている間に、書き込み保護スイッチの切り替えを試みることができます。例えば.

  1. トグル書き込み保護
  2. インサート
  3. 些細なことをする
  4. アンマウント/イジェクト
  5. 逆書き込み保護
  6. すすぎ/繰り返し

「stuck at 1」値をキャッシュしている可能性のある回路をくすぐる努力。それ以外は、それを押しつぶして、他の誰もそれ以上悲しみを感じないようにしてください。

4
ppetraki

カードはMMC書き込み保護フラグを介してロックされているようです。 SD/MMCカードリーダーを搭載したLinuxコンピューターがある場合は、実行してみてください

Sudo sdtool /dev/mmcblk0 unlock

これを機能させるには、MCCデバイス(/dev/sdXなどのUSB大容量記憶装置ではない)が必要であることに注意してください。

sdtoolが見つかりました こちら 。 Raspberry Piビルドがあります。それ以外の場合は、ソースからビルドする必要があります。 hdparm で同様のアクションを実行できるようですが、個人的には試していません。

欠陥のあるカードは、同様の方法で内部的にロックされ、データのさらなる損傷を防ぎ、ロック解除コマンドを無視します。

1