Vitruvian Penguin
knoppix

[knoppix:2046] Re: USBフラッシュメモリが自動認識されないのですが...

Date: Fri, 5 Sep 2003 11:16:06 +0900 (JST)
X-mailer: FreeML Web Mailer XP; SP2
こんにちは。宮脇です。  
  
わたしは、32MBのメモリスティックしか持っていないので、具体的なアドバイスはしづらいので 
すが、実験が必要そうになってきたので、出てきました。  
  
ハングするようになったとのこと、不思議ですね。  
フォーマット(FATxx/NTFS/EXT2)の違いなら、多くの場合、エラーになるだけで、ハングはし 
ないはずです。とっさに思ったのは、(1)カーネルかハードの問題か、(2) ローレベルフォーマ 
ットの問題(またはFATなどに不良セクタがある)ですが、(1)なら以前からハングしていたは 
ずですし、(2)ならWindowsでも使えないはずです。  
  
> どういうわけか、KNOPPIX起動後に挿して、「ホームディレクトリ  
> の設定」を試みると、今度は sda1 ではなく、sdaと表示される  
> ようになりました。ファイルをLinuxファイルシステムで初期化  
> して再度挿して立ち上げてみても、結果は同じです。  
どうも、スーパーフロッピーフォーマットというか、フロッピーディスクやCDROMのようなフォ 
ーマットになっているようですね。でも、それならそれで、KNOPPIXでもチャンと処理できるは 
ずです。実際、カーネルは、sdaとしてチャンと認識しています。  
ハングしている場所は、knoppix-autoconfigからrebuildfstabを呼び出してfstabを再作 
成するところです。ここで、カーネルは正しく処理しているのにハングするケースの1つとして
、ファイルシステム種別の判定のために読み込もうとしたセクタが存在しない(ローレベルフォ
ーマットが壊れている)か不良セクタである場合が考えられます。  
  
そこで、ふと気づいたことがあります。  
KNOPPIXもLinuxなので、ファイルシステム種別の判定で最初にチェックするのはext2だと思 
います。このext2の判定でハングして先に進んでいないのではないかと考えました。  
ext2は、確か、ファイルシステムの末尾にスーパーブロックを持っていたと思います。ext2の 
チェックで、このスーパーブロックを読み込んでチェックしようとしたところ、そのブロックが 
存在せずにハングしているのではないでしょうか。  
FATxxだと、すべての管理情報はファイルシステムの先頭にあります。最初から存在しないセク
タがあることがわかっている場合、FATを細工しておけば、そのセクタにアクセスしなくなりま
す。  
  
お使いのメモリスティックは次のようになっていませんか。  
  
シリンダ数xヘッド数xセクタ数x512 > メモリスティックサイズ [単位:バイト]  
  
この場合、メモリスティックサイズを越えた部分のセクタが存在しないことになります。それは 
、たぶん、最後のシリンダの中にあると思います。  
  
試しに以下の操作をしてみて下さい。  
  
(1) メルコのフォーマットユーティリティでもう一度フォーマットする。  
(2) mount /dev/sda -t vfat /mnt/test  
    このマウントは成功するはず。  
(3) umount /dev/sda  
(4) mount /dev/sda -t ext2 /mnt/test  
    ハングするはず。ハングされても良いようにHDDはすべてRead Onlyモードに変更してか 
らにしましょう。  
  
もしそうなら、以下のようにしてはどうでしょうか。  
(1)FDISK形式に変換する。  
(2)最後の1シリンダを除くすべてのシリンダを割り当てたパーティションを作る。  
(3)FAT16(LBA)でフォーマットする。  
  
具体的には、以下のような操作になります。  
わたしのマシンでは/cdrom/temp/sdaという32MB程度のファイルを割り当てて、これを 
/dev/sdaに見立てて操作しているので、表示は多少異なると思います。  
  
  
-------------------- ここから操作ログ -------------------  
$ sudo -s  
# fdisk /dev/sda  
  
コマンド (m でヘルプ): m  
コマンドの動作  
   a   ブート可能フラグをつける  
   b   bsd ディスクラベルを編集する  
   c   dos 互換フラグをつける  
   d   領域を削除する  
   l   既知の領域タイプをリスト表示する  
   m   このメニューを表示する  
   n   新たに領域を作成する  
   o   新たに空の DOS 領域テーブルを作成する  
   p   領域テーブルを表示する  
   q   変更を保存せずに終了する  
   s   空の Sun ディスクラベルを作成する  
   t   領域のシステム ID を変更する  
   u   表示/項目ユニットを変更する  
   v   領域テーブルを照合する  
   w   テーブルをディスクに書き込み、終了する  
   x   特別な機能 (エキスパート専用)  
  
コマンド (m でヘルプ): o  
新たに DOS ディスクラベルを作成します。あなたが書き込みを決定するまで、変更は  
メモリ内だけに残します。その後はもちろん以前の内容は修復不可能になります。  
警告: 領域テーブル 4 の不正なフラグ 0x0000 は w(書き込み)によって  
正常になります  
  
コマンド (m でヘルプ): p  
  
Disk sda: 0 MB, 0 bytes  
6 heads, 63 sectors/track, 168 cylinders  
Units = シリンダ数 of 378 * 512 = 193536 bytes  
  
デバイス ブート   始点      終点  ブロック   ID  システム  
  
コマンド (m でヘルプ): n  
コマンドアクション  
   e   拡張  
   p   基本領域 (1-4)  
p  
領域番号 (1-4): 1  
最初 シリンダ (1-168, 初期値 1): 1  
終点 シリンダ または +サイズ または +サイズM または +サイズK (1-168, 初期値 168):  
167  
  
コマンド (m でヘルプ): p  
  
Disk sda: 0 MB, 0 bytes  
6 heads, 63 sectors/track, 168 cylinders  
Units = シリンダ数 of 378 * 512 = 193536 bytes  
  
デバイス ブート   始点      終点  ブロック   ID  システム  
  sda1             1       167     31531+  83  Linux  
  
コマンド (m でヘルプ): t  
Selected partition 1  
16進数コード (L コマンドでコードリスト表示): L  
  
 0  空              1c  隠し Win95 FAT3 70  DiskSecure Mult bb  隠し  
Boot Wizar  
 1  FAT12           1e  隠し Win95 FAT1 75  PC/IX           be  Solaris  
boot  
 2  XENIX root      24  NEC DOS         80  古い Minix      c1   
DRDOS/sec (FAT-  
 3  XENIX usr       39  Plan 9          81  Minix / 古い Li c4   
DRDOS/sec (FAT-  
 4  FAT16 <32M      3c  PartitionMagic  82  Linux スワップ  c6   
DRDOS/sec (FAT-  
 5  拡張領域        40  Venix 80286     83  Linux           c7  Syrinx  
 6  FAT16           41  PPC PReP Boot   84  OS/2 隠し C: ド da  非 FS デ 
ータ  
 7  HPFS/NTFS       42  SFS             85  Linux 拡張領域  db  CP/M /  
CTOS / .  
 8  AIX             4d  QNX4.x          86  NTFS ボリューム de  Dell ユー  
 9  AIX ブート可能  4e  QNX4.x 2nd part 87  NTFS ボリューム df  BootIt  
 a  OS/2 ブートマネ 4f  QNX4.x 3rd part 8e  Linux LVM       e1  DOS  
access  
 b  Win95 FAT32     50  OnTrack DM      93  Amoeba          e3  DOS  
R/O  
 c  Win95 FAT32 (LB 51  OnTrack DM6 Aux 94  Amoeba BBT      e4   
SpeedStor  
 e  Win95 FAT16 (LB 52  CP/M            9f  BSD/OS          eb  BeOS  
fs  
 f  Win95 拡張領域  53  OnTrack DM6 Aux a0  IBM Thinkpad ハ ee  EFI GPT  
10  OPUS            54  OnTrackDM6      a5  FreeBSD         ef  EFI  
(FAT-12/16/  
11  隠し FAT12      55  EZ-Drive        a6  OpenBSD         f0   
Linux/PA-RISC  
12  Compaq 診断     56  Golden Bow      a7  NeXTSTEP        f1   
SpeedStor  
14  隠し FAT16 <32M 5c  Priam Edisk     a8  Darwin UFS      f4   
SpeedStor  
16  隠し FAT16      61  SpeedStor       a9  NetBSD          f2  DOS セカ 
ンダ  
17  隠し HPFS/NTFS  63  GNU HURD または ab  Darwin boot     fd  Linux  
raid 自動  
18  AST SmartSleep  64  Novell Netware  b7  BSDI fs         fe   
LANstep  
1b  隠し Win95 FAT3 65  Novell Netware  b8  BSDI スワップ   ff  BBT  
16進数コード (L コマンドでコードリスト表示): e  
領域のシステムタイプを 1 から e (Win95 FAT16 (LBA)) に変更しまし  
  
コマンド (m でヘルプ): p  
  
Disk sda: 0 MB, 0 bytes  
6 heads, 63 sectors/track, 168 cylinders  
Units = シリンダ数 of 378 * 512 = 193536 bytes  
  
デバイス ブート   始点      終点  ブロック   ID  システム  
  sda1             1       167     31531+   e  Win95 FAT16 (LBA)  
  
コマンド (m でヘルプ): w  
コマンド (m でヘルプ): w  
領域テーブルは交換されました!  
  
ioctl() を呼び出して領域テーブルを再読込みします。  
  
警告: 領域テーブルの再読込みがエラー 25 で失敗しました: デバイスに対する不適切な 
ioctlで  
カーネルはまだ古いテーブルを使っています。  
新しいテーブルは次回リブート時に使えるようになるでしょう。  
  
警告: DOS 6.x 領域を作成、または変更してしまった場合は  
fdisk マニュアルの追加情報ページを参照して  
ディスクを同期させます。  
  
root@ttyp0[temp]# mkdosfs -v /dev/sda1  
mkdosfs 2.8 (28 Feb 2001)  
/dev/sda1 has 6 heads and 63 sectors per track,  
logical sector size is 512,  
using 0xf8 media descriptor, with 63616 sectors;  
file system has 2 16-bit FATs and 4 sectors per cluster.  
FAT size is 62 sectors, and provides 15864 clusters.  
Root directory contains 512 slots.  
Volume ID is 3f57e9e5, no volume label.  
  
-------------------- ここまで操作ログ -------------------  
  
以上で、フォーマットまで終りました。(ログは一部手操作で修正しています。)  
  
もう一度、先ほどのmount確認を行ないます。  
  
(1) mount /dev/sda -t vfat /mnt/test  
    このマウントは成功するはずです。  
(2) umount /dev/sda  
(3) mount /dev/sda -t ext2 /mnt/test  
    エラーにはなりますが、ハングはしないはず。  
  
もし、そうなれば成功です。次の起動からハングせずに起動するようになるのではないでしょう 
か。  
  
成功を祈ります。  
  
<Prev in Thread] Current Thread [Next in Thread>