SDカードが正しい容量を認識しなくなったときの対処

2008/10/12PC::Tips

microSDの2GBをデジカメでフォーマットしたら1GBの容量でフォーマットされてしまい、PCなどで再フォーマットをかけようとしても1GBでしか認識しなくなりました。何とか元の2GBの容量に再フォーマットすべく試行錯誤したときのメモ。

環境

SDカード
Transcend microSD 2GB(MM8GR02GUACY-NA)
デジカメ
CASIO EXILIM EX-Z4A
Linux PC
Kubuntu 8.04.1日本語ローカライズド
SD R/W on Linux PC
ELECOM MULTICARD READER MR-DU2A7SV
Windows PC
Windows XP Professional SP3
SD R/W on Windows
IBM ThinkPad X41 内蔵SD R/W
SDフォーマットツール
Panasonic SDFormatter V2.0.0.3

復旧手順

1. SDFormatterでの復旧

SDFormatterの概要はこちら。このツールを使えばSDカードとして最も正しくフォーマットされるはずだが、復旧を試みるも1GBのSDカードとしてしか認識せず。

2. Linux環境下での操作

とりあえずローレベルフォーマットを行うべく、ddでゼロフィルしてみることにする。
ちなみに、fdiskを走らせているのはデバイスの容量及びパーティション構成を調べる為。パーティションだけが1GBで切られていると思いきや、デバイス自体が1GBの容量として認識されていたのは意外(汗

kaede@reika:~$ sudo fdisk /dev/sdg

このディスクのシリンダ数は 7788 に設定されています。
間違いではないのですが、1024 を超えているため、以下の場合
に問題を生じうる事を確認しましょう:
1) ブート時に実行するソフトウェア (例. バージョンが古い LILO)
2) 別の OS のブートやパーティション作成ソフト
   (例. DOS FDISK, OS/2 FDISK)

コマンド (m でヘルプ): p

Disk /dev/sdg: 1020 MB, 1020788736 bytes
8 heads, 32 sectors/track, 7788 cylinders
Units = シリンダ数 of 256 * 512 = 131072 bytes
Disk identifier: 0x00000000

デバイス Boot      Start         End      Blocks   Id  System
/dev/sdg1   *           1        7788      996836+   6  FAT16

コマンド (m でヘルプ): q

kaede@reika:~$ sudo dd if=/dev/zero of=/dev/sdg
dd: writing to `/dev/sdg': No space left on device
1993729+0 records in
1993728+0 records out
1020788736 bytes (1.0 GB) copied, 671.545 s, 1.5 MB/s

これでとりあえずMBRも含め不正な情報は初期化されたはず。

3. 再度SDFormatterでフォーマットしてみる

ローレベルフォーマット済みのSDカードを再度SDFormatterで認識させると、無事に2GBのSDカードとして認識するようになりました。

#large: is not allow

今回はネイティブ環境のLinuxを利用しましたが、SDカードが認識出来ればどんなディストリビューションでもいけるはずです。困っている場合はお試しあれ。

Web Archiveから落としたzipファイルを開く

2008/10/11PC::Tips

Web Archiveから公開停止となったzipファイルを落とせる*1ことがありますが、通常の場合不正なzipファイルとなってしまっていて解凍することが出来ません。

このようなファイルはバイナリエディタでファイル末尾に「0x00」を付加してやればいいようです。WindowsであればBZ、Linux(KDE)であればkhexeditあたりで編集すればよさそうです。
編集が完了したら通常のzipファイルのように開ける……はず。

*1 : 運が良ければ

VMware Server Consoleにおけるキーバインドのカスタマイズ

2008/10/05PC::VMware

LinuxではXmodmapでのキーバインドのカスタマイズはゲストOSには反映されません。生のキーコードがそのままゲストOSへ渡されているようですが、以下の手順にて変更することが可能です。

環境

以下の環境で確認しました

  • Kubuntu 8.04.1 日本語ローカライズド
  • キーボード: 日本語キーボード(jp106)
  • VMware Server 1.0.6
  • VMware Server Console 1.0.6

変更前のキーコード調査

xevなどで調査可能です。

KeyPress event, serial 32, synthetic NO, window 0x4600001,
    root 0x1e9, subw 0x0, time 191321504, (65,176), root:(2378,200),
    state 0x0, keycode 66 (keysym 0xffe3, Control_L), same_screen YES,
    XLookupString gives 0 bytes:
    XmbLookupString gives 0 bytes:
    XFilterEvent returns: False

上記の場合はCapsLockを押した場合のイベントですが、キーコードは66であることがわかります。

VMware Server Consoleでのキーの割り当て

日本語キーボードでのVMware Server Consoleでのキーのコードは以下に記載されています。
/usr/lib/vmware/xkeymap/jp106

Escape                  = 0x001
1                       = 0x002
2                       = 0x003
3                       = 0x004
4                       = 0x005
5                       = 0x006
6                       = 0x007
7                       = 0x008
8                       = 0x009
9                       = 0x00a
0                       = 0x00b

上記は/usr/lib/vmware/xkeymap/jp106の抜粋ですが、Escapeは0x001ということがわかります。このリストから目当てのキーの機能とコードを探します。

実際に変更してみる

CapsLockと左Ctrlを入れ替える場合は次のようになります。

~/.vmware/preferencesに以下を追加する。

xkeymap.useKeycodeMapIfXFree86 = true
# CapsLock -> L_Control
xkeymap.keycode.66 = 0x01d
# L_Control -> CapsLock
xkeymap.keycode.37 = 0x03a

関連記事

[Linux] VMware Server Consoleで「\」「_」が入力できない問題への対応

2008/10/05PC::VMware

Linux環境にてVMware Server Consoleで「\」「_」のキー入力が無視されてしまうという問題への対処法。

~/.vmware/preferencesに以下を追加する。

xkeymap.useKeycodeMapIfXFree86 = true
xkeymap.keycode.211 = 0x073

発生した環境

  • Kubuntu 8.04 日本語ローカライズド
  • VMware Server 1.0.6
  • VMware Server Console 1.0.6
  • キーマップ: 日本語キーボード

参考