LinuxにおけるFAT32フォーマットの方法

2008/09/12PC::Linux/BSD

Linuxであっても、リムーバブルメディアの類を利用する場合はFAT/FAT32のフォーマットを行う必要があります*1。その際のメモ。

*1 : 理想を言えば、ジャーナリングを採用したファイルシステム(NTFS/ext3等)を用いたいところである。が、NTFSはMSが詳細仕様を公開していないためにLinuxの読み書きは危険とされており、筆者のようなLinux環境をメインで使用する場合には推奨されない。一方、ext3などのファイルシステムでは世の大半を占めるWindows環境では標準で読み込むことが出来ない。このため、仕方なくFAT32で運用している。MSは仕様を公開しるー。FAT32じゃファイルが壊れやすいんじゃー

環境

OS
Kubuntu 8.04.1 日本語ローカライズド
リムーバブルメディア
SONY POCKETBIT (8GB)*2

POCKETBIT (8GB)の詳細

$ sudo fdisk /dev/sde
コマンド (m でヘルプ): p

Disk /dev/sde: 8119 MB, 8119648256 bytes
250 heads, 62 sectors/track, 1023 cylinders
Units = シリンダ数 of 15500 * 512 = 7936000 bytes
Disk identifier: 0x********

*2 : 容量と値段に惹かれて購入したUSBメモリ。同一の価格で東芝製のものがあったのだが、デザインで選んでしまい今非常に後悔している。その一番の理由が読み書きのパフォーマンスが非常に悪い。せっかくある8GBの領域のほとんどが無駄となってしまっている。ReadyBoost対応を謳っている東芝製ならこんな事にはならなかっただろう(TT) もう二度とSONYのUSBメモリには手を出しません

作ってみる

1. パーティション分割

まずはパーティション分割から。通常、市販のUSBメモリなどを購入した場合は基本パーティションが1つだけあるような状態となっているはずですので、特に問題がない場合はそのまま運用します。

ちなみにWindowsではUSBメモリのパーティションを分割することは出来ませんが、Linuxのfdiskでは通常のディスクと同じように扱うことが可能です。

2. 領域タイプの設定

以下の様な場合を例とする

デバイス Boot      Start         End      Blocks   Id  System
/dev/sde1               1        1023     7928219   83  Linux

fdiskでパーティションを分割したときの新規パーティションの領域タイプは0x83(Linux)となる。このため、今回の様にFAT32でフォーマットし運用する場合はこの領域タイプを変更する必要がある。

FAT32を表す領域タイプとして0x0B(FAT32)、0x0C(FAT32 (LBA))がある。これらの使い分けは以下の通り。

0x0B (FAT32)
パーティションの終了シリンダが1023、ディスクの先頭から8GBまでの領域にパーティションが収まる場合に利用してもよい。
0x0C (FAT32 (LBA))
LBA対応版。パーティションが終了シリンダが1023を超える場合にこちらを利用する。

3. フォーマット

実際にmkfsコマンドを利用してフォーマットする。

$ sudo mkfs.vfat -v -c -F 32 /dev/sde1

後はまったりとフォーマットが完了するまで待つだけです。

オプションの解説
-v
詳細な進捗を表示
-c
不良ブロックの精査を行う
-F 32
FAT32形式でのフォーマットの指定。-FだとFAT(16)となる。

参考