FAT

From Gentoo Wiki
Jump to:navigation Jump to:search
This page is a translated version of the page FAT and the translation is 95% complete.
Resources

ファイルアロケーションテーブル (FAT) - 当初は MS-DOS (および後の NT 以前の Microsoft Windows) で使用するために作られたファイルシステム。現在では USB フラッシュディスクで FAT の改訂版 (FAT32) が使われています。[1]FAT は既に Linux システムに歩み寄っており、Linux カーネルで公式にサポートされています。

FAT32 は現代的なファイルシステムに備わっている多くの機能を欠いていますが、このファイルシステムは現代的なコンピュータでもいまだに、例えば EFI システムパーティションを使用するときに見つけることができます。2006 年に Microsoft は FAT の新しいバージョン (exFAT) を開発しましたが、これには以前のバージョンと後方互換性がありません。さらなる情報については exFAT の記事を参照してください。

インストール

カーネル

カーネル FATサポートを有効にする (CONFIG_VFAT_FS)
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 fatUTF-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 — 特にブート時において、どのようにそしてどこに主要なファイルシステムがマウントされるかを定義する設定ファイルです。

外部の情報

参照