ファイルシステムについて調べてみた

# 概要
ファイルシステム(Linuxの)について勉強したのでまとめてみようと思う
# ファイルシステムって？
ディスクに保存されるデータをファイルとして管理する仕組みのこと。ハードディスクやSSDを利用するには、ディスク内にパーティションを作成後、パーティション内にファイルシステムを作成し、そのファイルシステムをマウントする。
ファイルシステムがないと「XXXセクタのデータを取得」のように人間が見てもわからない指示しか出せず、逆にファイルシステムがあると「/etc/hogehoge.txtを取得」と指示でき、管理がしやすくなる。
# ハードディスク
|  規格  |  説明  |
| ---- | ---- |
|  SATA  |  現在主流になっている規格で、ほとんどのPCで標準的に搭載されている。[Serial ATA]  |
|  SAS  |  SATAよりも高速で信頼性が高い。主にサーバ用途で使用されるがSATA余地も高価。[Serial Attached SCSI]  |
|  SCSI  |  ハードディスクやDVDドライブなどの様々な周辺機器を接続するための規格。高価だが、データ転送速度も速いので、高速性や拡張性を求められるサーバやワークステーション環境で利用されることもある。  |
|  USB  |  周辺機器と接続する菊花うとして一般的な規格。必要に応じて取り外しできるのが便利なところ。  |
# デバイスファイル
ハードディスクやSSD,DVDドライブ、シリアルポートといった、デバイスの入出力を扱うための特殊なファイルのこと。デバイスへの書き込みは出力、読み込みは入力を表す
|  デバイスファイル  |  説明  |
| ---- | ---- |
|  /dev/sda  |  1番目のハードディスク  |
|  /dev/sdb  |  2番目のハードディスク  |
|  /dev/sdc  |  3番目のハードディスク  |
|  /dev/sdd  |  4番目のハードディスク  |
|  /dev/sr0  |  1番目のCD/DVDドライブ  |
|  /dev/st0  |  1番目のテープドライブ  |
# パーティションの種類
1台のディスクドライブを複数の論理的な区画（パーティション）に分割して使うことができる。それぞれのパーティションには異なるファイルシステムを作成できる。BIOSベースのシステムでは、パーティションの種類は3つある。パーティションに分割することで、ファイルシステムの一部が破損した場合に諸以外により被害を１つのパーティション内だけに留めることができたり、大量のログが発生するなどし、ディスクの空き容量が足りなくなったとしても、システム全体への被害を少なくできる。
|  パーティションの種類  |  説明  |
| ---- | ---- |
|  基本パーティション  |  ディスクには最大4個のパーティションを作成できる。基本パーティションのデバイスファイル名は、ハードディスク/dev/sdaの場合、/dev/sda1=sda4となる。  |
|  拡張パーティション  |  基本パーティションの1つを拡張パーティションにすることができる。拡張パーティションお腹には論理パーティションが格納される。  |
|  論理パーティション  |  拡張パーティション内に作成されたパーティションのこと。論理パーティションのデバイスファイル名は/dev/sda5以降になる。  |
# パーティションテーブルの方式
|  方式  |  説明  |
| ---- | ---- |
|  MBR（マスターブートレコード）  |  MBRで扱えるハードディスクの容量は2TBまでで、基本パーティションを4個作成できる  |
|  GPT（GUIDパーティションテーブル）  |  GPTで扱えるハードディスクの容量は2TB制限がなくなり、パーティションも最大128個作成できる  |
# ルートファイルシステム
Linuxのディレクトリは階層構造になっていて、その頂点となる「/」ディレクトリからなるファイルシステムをルートファイルシステムと呼ぶ。
以下はルートファイルシステムに必要なディレクトリ
|  ディレクトリ  |  説明  |
| ---- | ---- |
|  /bin,/sbin  |  システムに必要なコマンド、ディレクトリ  |
|  /etc  |  各種設定  |
|  /lib  |  ライブラリ  |
|  /dev  |  デバイスファイル  |
# パーティション管理コマンド
## fdiskコマンド
パーティションの作成、削除、変更、情報表示を行うコマンド
|  サブコマンド  |  説明  |
| ---- | ---- |
|  l  |  パーティションタイプを一覧表示する  |
|  n  |  パーティションを作成する  |
|  d  |  パーティションを削除する  |
|  p  |  パーティションテーブルを表示する  |
|  t  |  パーティションタイプを変更する  |
|  a  |  ブートフラグをオン・オフを切り替える  |
|  w  |  パーティションテーブルの変更を保存して終了する  |
|  q  |  パーティションテーブルの変更を保存しないで終了する  |
|  m  |  ヘルプメニューを表示する　 |
## gdiskコマンド
GPT方式に対応したパーティション操作コマンド
## parted
MBRもGPTにも対応したパーティション操作コマンド
|  サブコマンド  |  説明  |
| ---- | ---- |
|  check 番号  |  ファイルシステムの簡単なチェックを行う  |
|  mklabel [gpt\|msdos]  |  新しいパーティションテーブルを作成する  |
|  mkpart 種類 開始 終了  |  指定した種類のパーティションを作成する  |
|  rm 番号  |  指定したパーティションを削除する  |
|  print、p  |  パーティションテーブルを表示する  |
|  quit、q  |  終了する  |
# ファイルシステムの作成
ファイルシステムは`ブロック`という単位でデータを管理している。アプリケーションプログラムではブロック単位でデータを扱うことができる。
Linuxではのファイルシステムでは、「ファイルの中身（データ）」　と「ファイルの属性や管理情報」は別々に保存されており、後者は`iノード`と呼ばれる領域で管理されている。iノードはファイルシステム作成時に予め用意されていてファイルやディレクトリを作成するたびに1つずつ使われいく。
＃ファイルシステムの種類
|  ファイルシステム  |  説明  |
| ---- | ---- |
|  ext2  |  Linuxの標準ファイルシステム  |
|  ext3  |  ext2にジャーナリング機能を加えたもの  |
|  ext4  |  ext3を機能拡張したもの  |
|  XFS  |  SGI社が開発したジャーナリングファイルシステム  |
|  JFS  |  IBM社が開発したジャーナリングファイルシステム  |
|  iso9660  |  CD-ROMのファイルシステム  |
|  msdos  |  MS-ROMのファイルシステム  |
|  vfat  |  SDカードや古いWindowsで使われるファイルシステム  |
|  exFAT  |  FATの後継となるフラッシュメモリ向けファイルシステム  |
## mkfsコマンド
パーティション上にファイルシステムを作成する。ファイルシステムに対応したコマンドを呼びだします
|  オプション |  説明  |
| ---- | ---- |
|  -t ファイルシステムタイプ  |  ファイルシステムタイプを指定する(ex, mkfs -t ext3)  |
|  -c  |  実行前に不良ブロックを検査する  |
## mke2fsコマンド
|  オプション |  説明  |
| ---- | ---- |
|  -t ファイルシステムタイプ(ext2,3,4)  |  ファイルシステムタイプを指定する  |
|  -j  |  ext3ファイルシステムを作成する  |
|  -c  |  実行前に不良ブロックを検査する  |
# ディスクの利用状況の確認
ファイルシステムに書きも見ができなくなる要因として下記が考えられ、利用状況（空き容量）の確認は重要
・空き容量が不足している
・使用できるiノードがない
## dfコマンド
パーティション上にファイルシステムを作成する。ファイルシステムに対応したコマンドを呼びだします
|  オプション |  説明  |
| ---- | ---- |
|  -h  |  容量を適当な単位で表示する（Mは1,048,576バイト）  |
|  -H  |  容量を適当な単位で表示する（Mは1,000,000バイト）  |
|  -k  |  容量をKB単位で表示する  |
|  -i  |  iノードの使用状況を表示する  |
## duコマンド
|  オプション |  説明  |
| ---- | ---- |
|  -a  |  ディレクトリ以外にファイルについても表示する  |
|  -l  |  リンクを含めて集計する  |
|  -c  |  すべての容量の合計を表示する  |
|  -k  |  容量をKB単位で表示する  |
|  -m  |  容量をMB単位で表示する  |
|  -s  |  指定したファイルやディレクトリ飲みの合計を表示する  |
|  -S  |  サブディレクトリを含めずに集計する  |
|  -h  |  容量を読みやすい単位で表示する  |
# ファイルシステムのチェック
システム障害などが原因でファイルシステムに破損が発生する場合があるため、fsckコマンドでディスクのチェック、修復を行うことができる。
※書き込み途中で実行すると、ファイル破損する可能性があるので、必ずアンマウントした状態で行うこと
## fsckコマンド
|  オプション |  説明  |
| ---- | ---- |
|  -t ファイルシステム名  |  ファイルシステムタイプを指定する  |
|  -a  |  自動的に修復を実行する  |
|  -r  |  対話的に修復を実行する  |
|  -A  |  /etc/fstabに記述されている全ファイルシステムに対して実行する |
|  -N  |  実際には実行せず何が行われるかのみ表示する  |
## e2fsckコマンド
|  オプション |  説明  |
| ---- | ---- |
|  -p  |  すべての不良ブロックを自動的に修復する  |
|  -y  |  問い合わせに対してすべて「yes」と回答する  |
|  -n  |  問い合わせに対してすべて「no」と回答する  |
## tune2fsコマンド
est2,3,4ファイルシステムの様々なパラメータを設定する
|  オプション |  説明  |
| ---- | ---- |
|  -c 回数  |  チェック無しでマウントされる最大回数を指定する  |
|  -i 時間  |  ファイルシステムをチェックする最大の時間間隔を指定する  |
|  -j  |  ext2ファイルシステムをext3に変換する  |
|  -L  |  ファイルシステムのボリュームラベルを指定する  |

# まとめ
Linuxにおけるファイルシステムの概要を、管理に必要なコマンドをまとめました。これらに加えマウントの仕組みや、FHSまで学べばファイルシステムとはなんぞやというところまで理解できるのではないかと思います。