FAT
ファイルアロケーションテーブル (FAT) - 当初は MS-DOS (および後の NT 以前の Microsoft Windows) で使用するために作られたファイルシステム。現在では USB フラッシュディスクで FAT の改訂版 (FAT32) が使われています。[1]FAT は既に Linux システムに歩み寄っており、Linux カーネルで公式にサポートされています。
FAT32 は現代的なファイルシステムに備わっている多くの機能を欠いていますが、このファイルシステムは現代的なコンピュータでもいまだに、例えば EFI システムパーティションを使用するときに見つけることができます。2006 年に Microsoft は FAT の新しいバージョン (exFAT) を開発しましたが、これには以前のバージョンと後方互換性がありません。さらなる情報については exFAT の記事を参照してください。
インストール
カーネル
File systems --->
DOS/FAT/NT Filesystems --->
< > MSDOS fs support
<*> VFAT (Windows-95) fs support
(437) Default codepage for FAT
(iso8859-1) Default iocharset for FAT
[ ] Enable FAT UTF-8 option by default
-*- Native language support --->
(iso8859-1) Default NLS Option
<*> Codepage 437 (United States, Canada)
<*> NLS ISO 8859-1 (Latin 1; Western European Languages)
-*- NLS UTF-8
FAT パーティションをマウントしようとする時には、ユーザーは codepage=
オプションを mount に指定する必要があるかもしれません。上の例では United States と Canada 向けのコードページを使用していますが、それ以外のコードページも必要に応じて有効化できます。任意で、ユーザーがFAT用のデフォルトコードページをカーネル設定内で設定することもできます。使用する各コードページがカーネルで有効化されているか確認してください。
mountを通じて使用された
codepage
オプションはカーネルで使用されている設定を上書きします。Default iocharset for fat
を UTF-8 に設定することは避けてください; それは推奨されません。代わりに、FAT パーティションをマウントする際に utf8=true
オプションを渡すようにしましょう (これには CONFIG_NLS_UTF8 がカーネルで有効になっている必要があります)。より詳しい情報については mount(8) man ページを見るか、/usr/src/linux/Documentation/filesystems/vfat.rst にある適切なカーネルドキュメントを見てください。
Emerge
FATのユーザースペースユーティリティーを使うにはsys-fs/dosfstoolsパッケージが必要です:
root #
emerge --ask sys-fs/dosfstools
使い方
FAT ファイルシステムを作成するには、mkfs.fat を使用してください:
user $
mkfs.fat
mkfs.fat 4.2 (2021-01-31) No device specified. Usage: mkfs.fat [OPTIONS] TARGET [BLOCKS] Create FAT filesystem in TARGET, which can be a block device or file. Use only up to BLOCKS 1024 byte blocks if specified. With the -C option, file TARGET will be created with a size of 1024 bytes times BLOCKS, which must be specified. Options: -a Disable alignment of data structures -A Toggle Atari variant of the filesystem -b SECTOR Select SECTOR as location of the FAT32 backup boot sector -c Check device for bad blocks before creating the filesystem -C Create file TARGET then create filesystem in it -D NUMBER Write BIOS drive number NUMBER to boot sector -f COUNT Create COUNT file allocation tables -F SIZE Select FAT size SIZE (12, 16 or 32) -g GEOM Select disk geometry: heads/sectors_per_track -h NUMBER Write hidden sectors NUMBER to boot sector -i VOLID Set volume ID to VOLID (a 32 bit hexadecimal number) -I Ignore and disable safety checks -l FILENAME Read bad blocks list from FILENAME -m FILENAME Replace default error message in boot block with contents of FILENAME -M TYPE Set media type in boot sector to TYPE --mbr[=y|n|a] Fill (fake) MBR table with one partition which spans whole disk -n LABEL Set volume name to LABEL (up to 11 characters long) --codepage=N use DOS codepage N to encode label (default: 850) -r COUNT Make room for at least COUNT entries in the root directory -R COUNT Set minimal number of reserved sectors to COUNT -s COUNT Set number of sectors per cluster to COUNT -S SIZE Select a sector size of SIZE (a power of two, at least 512) -v Verbose execution --variant=TYPE Select variant TYPE of filesystem (standard or Atari) --invariant Use constants for randomly generated or time based values --offset=SECTOR Write the filesystem at a specific sector into the device file. --help Show this help message and exit
フォーマット
/dev/sdx9 パーティションを、ラベル "ESP" を付けて FAT32 ファイルシステムでフォーマットし、詳細な出力を表示するには:
root #
mkfs.fat -v -F 32 -n "ESP" /dev/sdx9
FAT ファイルシステムは mount コマンドでマウントできるはずです。リサイズは sys-fs/fatresize を使用して行えます。
トラブルシューティング
ファイルの転送速度が遅い
ファイルの転送速度 (iotop を使って確認できます) が遅い場合は、ファイルシステムが async
ファイルシステムオプションを使ってマウントされているか確認してください。/etc/fstab (または、autofs を使用している場合は /etc/autofs/auto.misc) システムファイルを編集し、必要に応じて、おそらくそこにあると思われる sync
マウントオプションを削除してください。デフォルトでは、ファイルシステムは async
マウントオプションを使ってマウントされます。
ファイルシステムの
sync
マウントオプションは、デフォルトの async
マウントオプションよりも遅い転送速度に制限します。
sync
マウントオプションはフラッシュメディアの寿命を縮めることもあります!man mount のオプション sync
の説明を確認してください。まだファイルの転送速度が遅い場合は、flush
マウントオプションを使ってファイルシステムを再マウントしてみてください:
root #
mount -o remount,flush /path/to/mountpoint
オペレーティングシステム互換性のある他のファイルシステム
UDFTools を利用して UDF ファイルシステムを試してみてください。これには sys-fs/udftools と Linux カーネル UDF ファイルシステムドライバが必要です。近年 mkudffs に、Microsoft 関連オペレーティングシステムとの互換性を改善する、モックパーティションの作成に関する修正コードが追加されました。より古い Linux カーネルを使用している場合、互換性を改善するためには、ブロックサイズが 512 に設定されていることを確認してください。モックパーティションを作成するために必要な --bootarea=mbr
を除き、ほとんどのオプションは互換性のためデフォルトになっています。
root #
mkudffs --bootarea=mbr --label=your_label /dev/device_file
Samsung の F2FS ファイルシステムも試してみてください。
UTF-8/UTF-16 文字によるハードウェアのバグ
Sometimes hardware firmware bugs will occur on embedded devices (eg. car radios) when reading their required formatted FAT/FAT32 filesystems containing UTF-8 characters. A workaround is to ensure initially mounting the FAT filesystem using (current default) mount options codepage=437,iocharset=iso8859-1,shortname=mixed,errors=remount-ro
.
For short filenames, codepage=437
is IBM-PC characters or basically ASCII. For long filenames, iocharset=iso8859-1
specifies ASCII. The option shortname=mixed
is default, and can also try shortname=win95
option. Of which, are all current defaults. Additionally to further remedy UTF-8/UTF-16 incompatible characters, use a loop with sed to replace all incompatible UTF-8/UTF-16 characters with an underscore or other ASCII character. (See this replace_chars.sh script.)
参考までに、このバグは Sony のカーラジオで発生しました。MEX-GS610BT モデルのラジオは、UTF-8/UTF-16 文字を含む USB フラッシュメディア/ドライブを読もうとしたときにハードリセットします。
前述の通り、codepage、iocharset、または utf8 マウントオプションを使うかどうかについてのさらなる説明については、 Linux カーネルの vfat のソースコードドキュメンテーション /usr/src/linux/Documentation/filesystems/vfat.txt を確認してください。
ファイルとフォルダがソートされない
FAT/FAT32 ファイルシステムにファイルを書き込んで、別のデバイスでそのファイルシステムを読み込んだとき、ファイルとフォルダがソートされずに表示されることがあります。ふつう、見る人はファイルとフォルダをアルファベット順にソートされた状態で見たいでしょう。sys-fs/fatsort をインストールして、次のコマンドを実行してください:
root #
fatsort /dev/device_file
関連項目
- ExFAT — マイクロソフトがつくった、USB スティックメモリのようなフラッシュメモリ記憶媒体に合わせたファイルシステム
- ext4 — オープンソースのディスクファイルシステムで、extended filesystem シリーズの最新バージョンです。
- btrfs — 耐障害性、自己修復特性、管理のしやすさに焦点を当てつつ、先進的な機能を実装することも主眼としている、Linux 向けのコピーオンライト (CoW) ファイルシステムです。
- removable media — システムから容易に取り除くことができるメディア
- /etc/fstab — 特にブート時において、どのようにそしてどこに主要なファイルシステムがマウントされるかを定義する設定ファイルです。
外部の情報
- /usr/src/linux/Documentation/filesystems/vfat.txt - Linux カーネルのソースに含まれている VFAT ファイルシステムのドキュメント。
- FAT filesystem and Linux - Wikipedia より