GNU / LinuxにSDHCカードをインストールしようとしています。一般的に発生するものとは異なり、/var/log/syslog
言及はありませんsdb1
。
Jul 26 16:07:53 xvii kernel: [ 159.404842] scsi 6:0:0:0: Direct-Access Singim SD Card MMC/SD 1.4F PQ: 0 ANSI: 0 CCS
Jul 26 16:07:53 xvii kernel: [ 159.405115] sd 6:0:0:0: Attached scsi generic sg2 type 0
Jul 26 16:08:01 xvii kernel: [ 168.239600] sd 6:0:0:0: [sdb] Attached SCSI removable disk
そしてfdisk -l /dev/sdb
何も出力されません。どうすればいいですか?
編集者(2014-07-27):SDカードを再利用できますが、何か問題があるようです。昨日はUSBカードリーダーで試してみました。今日はノートパソコンのSDスロットに入れて使ってみましたが、何千ものI/Oエラーが発生しました。
Jul 27 11:56:35 xvii kernel: [ 8091.317234] mmc0: new high speed SDHC card at address 1234
Jul 27 11:56:35 xvii kernel: [ 8091.317477] mmcblk0: mmc0:1234 SA04G 3.68 GiB
Jul 27 11:56:35 xvii kernel: [ 8091.320119] mmc0: Got data interrupt 0x00200000 even though no data operation was in progress.
Jul 27 11:56:35 xvii kernel: [ 8091.322277] mmcblk0: error -84 transferring data, sector 0, nr 8, cmd response 0x900, card status 0xb00
Jul 27 11:56:35 xvii kernel: [ 8091.322289] mmcblk0: retrying using single block read
Jul 27 11:56:35 xvii kernel: [ 8091.324862] mmcblk0: error -84 transferring data, sector 0, nr 8, cmd response 0x900, card status 0x0
Jul 27 11:56:35 xvii kernel: [ 8091.324872] end_request: I/O error, dev mmcblk0, sector 0
Jul 27 11:56:35 xvii kernel: [ 8091.326398] mmcblk0: error -84 transferring data, sector 1, nr 7, cmd response 0x900, card status 0x0
Jul 27 11:56:35 xvii kernel: [ 8091.326405] end_request: I/O error, dev mmcblk0, sector 1
Jul 27 11:56:35 xvii kernel: [ 8091.329056] mmcblk0: error -84 transferring data, sector 2, nr 6, cmd response 0x900, card status 0x0
[...]
gdisk -l
パーティションテーブルが見つからず、カードlsblk
に関する情報を出力します。
mmcblk0 179:0 0 3.7G 0 disk
後でもう一度試しましたが、カードが認識されました。
Jul 27 12:08:00 xvii kernel: [ 8776.617712] mmc0: new high speed SDHC card at address 1234
Jul 27 12:08:00 xvii kernel: [ 8776.618117] mmcblk0: mmc0:1234 SA04G 3.68 GiB
Jul 27 12:08:00 xvii kernel: [ 8776.620324] mmcblk0: p1
インストールできます: /media/mmc タイプ vfat (rw,nosuid,nodev,noexec,noatime,uid=1000,gid=1000,fmask=0022,dmask=0022,codepage=437,iocharset= utf8) に /dev/mmcblk0p1 、短い名前=混合、エラー=reinstall-ro、ユーザー=vinc17)
gdisk -l /dev/mmcblk0
MBRパーティションテーブルは1つしかありませんが、2番目のパーティションテーブルが最後のパーティションと重複していることがわかりました。
答え1
リンクは/dev/$disk
ブロックデバイス全体を指していますが、割り当てられていない領域を持たないパーティションディスクでは表示されない唯一の部分は、パーティションテーブルの/dev/$disk[num]
最初の2kb-4mbです。$disk
これは、ファームウェアおよび/またはオペレーティングシステムが読み取り可能な形式でRAWデバイスに書き込まれた情報だけです。さまざまなシステムはこれをさまざまな方法と理由で解釈します。 3つを紹介します。
BIOSシステムでは、この表は次のように書かれています。
MBR
マスターブートレコードファームウェアが起動可能な実行可能ファイルを見つける場所を特定できるようにフォーマットします。 BIOSを起動するためにパーティションテーブルの最初の512バイトを読み取るため、パーティションテーブルを読み込みます。起動可能表示して実行してみてください。この512バイトには通常ブートローダが含まれています。(多くのLinuxシステムに似ているgrub
か)lilo
次に、別の実行可能ファイルをチェーンロードします。(Linuxカーネルなど)ローダーが理解するファイルシステムでフォーマットされたパーティションにあります。最新のカーネルを使用するEFIシステムおよび/またはBIOSシステムでは、このパーティションテーブルは次のとおりです。
GPT
GUIDパーティションテーブル滞在。 EFIファームウェアの理解脂肪ファイルシステムなので、表に記載されているパーティションを探します。EFIシステムパーティションフラグをFATとしてマウントし、その中に保存されたパスを実行してみてください。Boot0000-{GUID}NVRAM変数これは基本的にBIOSブートローダが実行するように設計されたものと同じであり、ファームウェアがロードしようとしている実行可能ファイルを解釈できる限り(例:バージョン3.3以降のほとんどのLinuxカーネル)使用しないでください。 EFIファームウェアはもう少し複雑です。
起動後にパーティションテーブルが存在し、カーネルがそれを理解すると、オフセットにマップされ、/dev/${disk}1
パーティション4mb+
テーブルが話す場所で終了します。パーティションは、実際には次の任意の論理区切り文字です。
start of disk | partition table | partition 1 | ... and so on | end of disk
私も次のようになるかもしれないと思います。
s.o.d. | p.t. | --- unallocated raw space --- | partition 1 | ... | e.o.d.
これはすべて、パーティションテーブルで定義したレイアウトによって異なります。fdisk
形式MBR
や形式gdisk
などGPT
のツールを使用してこれを行うことができます。
- ファームウェアにはブートデバイス用のパーティションテーブルが必要ですが、カーネルにはファイルシステムを認識したい細かいブロックデバイス用のパーティションテーブルが必要です。ディスクがパーティション化されていてテーブルがない場合、カーネルはディスクを見つけることができません。スーパーブロックディスク検査で。パーティションテーブルを読み、これらのオフセットを
/dev/$disk[num]
各パーティションの先頭で見つけます。スーパーブロック。これはほんの数kbのデータにすぎません。(もし)これはカーネルにファイルシステムのタイプを伝えます。強力なファイルシステムはバックアップを分散させます。スーパーブロック完全パーティション。パーティションに読み取り可能なパーティションがない場合スーパーブロックカーネルは、カーネルがそこにあるファイルシステムを認識しないことを理解しています。
とにかく重要な点は、ファームウェアで解釈する必要がないディスク(ブートしないディスクなど)には実際にはこれらのテーブルが必要ないことです。(これは唯一の実行可能なGPT + BIOSの状況でもあります)- ファイルシステムは1つだけ必要です。/dev/$disk
必要なファイルシステムを使用してフルフォーマットを実行できます。必要に応じて一日中行くことができますmkfs.fat /dev/$disk
。 Windowsは通常、フラグが付けられたデバイスタイプで動作するため、とにかくそれを行います。移動可能バナー。
つまり、ファイルシステムを完全に変換することが可能です。スーパーブロックパーティションテーブルのヘッドではなく、ディスクのヘッドに配置されます。この場合、カーネルがファイルシステムを理解している限り、次のことができます。
mount /dev/$disk /path/to/mount/point
ただし、パーティションが欲しいがパーティションがまだ存在していない場合は、上記のものと似ているか、上記のfdisk
ツールgdisk
を使用してパーティションを作成する必要があります。つまり、その場所をディスクヘッダーにマップするテーブルを作成する必要があります。
これらすべてが組み合わされ、あなたの問題は次の3つのうちの1つであると思います。
ディスクにパーティションテーブルとファイルシステムがありません。
- 最近消去された、まったく使用されていない、または破損しています。
オペレーティングシステムのカーネルがディスクパーティションテーブルを認識しません。
- BIOSとEFIが唯一のファームウェアタイプではありません。これは、SDHCカードが特に有用である可能性があるモバイル/組み込みの世界では特にそうです。しかし、これらのデバイスの多くは、ファイルシステムとパーティションテーブルの間の境界をあいまいにする、あまり洗練されていないファイルシステム層を使用しています。
ディスクにパーティションテーブルがなく、オペレーティングシステムのカーネルで認識されないファイルシステムとしてフォーマットされています。
上記のコメントをもう一度読んでみると、後者であることが確実になりました。そのテレビのマニュアルを入手して、デスクトップLinuxでカーネルモジュールとして使用するファイルシステムをロードし、そこにディスクをマウントできるかどうかを確認することをお勧めします。