LPIC・ファイルシステムの管理

個人的なメモです。

##ファイルシステム階層標準

###☆FHS(Filesystem Hierarchy Standard)
・ディレクトリ構造の標準を定めた仕様書
・FHSベースで**ディレクトリファイル**が配置されている
・ルート(/)を起点とした単一の**ツリー構造**であり、/以下に目的に応じたディレクトリ階層が配置される

(例)ツリー構造
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/447762/69c44b0b-2852-738f-3fd9-60cee86a87b0.png)



####デバイスファイル
デバイス(周辺機器)を操作するためのファイル
/dev以下に検出されたデバイスへアクセスするためのデバイスファイルが作成される


####主なディレクトリ

**/bin**･･･一般ユーザー、管理者が使用するシステム起動時に必要なコマンドが配置
**/dev**･･･デバイスファイルを配置
**/etc**･･･設定ファイルが配置
**/lib**･･･共有ファイルが配置
**/opt**･･･追加でインストールしたパッケージ(ソフトウェア)が配置
**/sbin**･･･主にシステム管理者使用するコマンドが配置。オプションによっては一般ユーザーも使用可能
**/tmp**･･･一時ファイルが配置
**/var**･･･サイズが変化するファイルが配置
**/var/log**･･･ログファイルが配置
**/boot**･･･システム起動時に必要なブートローダ関連のファイルや、カーネルイメージが配置
**/home**･･･ユーザのホームディレクトリが配置
**/usr**･･･ユーザが共有するデータが配置
**/usr/bin**･･･一般ユーザ、管理者が使用するコマンドが配置
**/usr/lib**･･･各種コマンドが利用するライブラリが配置
**/usr/local**･･･追加でインストールしたパッケージ(ソフトウェア)が配置。このディレクトリ以下には、bin,sbin,libなどのディレクトリが配置
**/usr/sbin**･･･システム管理者のみ実行できるコマンドが配置

※/usr以下のコマンドはシステム起動時に必要ないコマンドが配置

##パーティショニング

###☆パーティショニング
・一台の物理的なディスクを複数の領域に分割し、それぞれの領域を独立した論理的なディスクとして扱えるようにする操作
・分割された領域を**パーティション**と呼ぶ
・パーティション単位の効率的なバックアップや、ファイルシステム単位での障害修復が可能になる
・パーティションを細かく分けることで、パーティションごとにファイルを分類して格納できるため、ファイル管理が容易になる
・パーティションのサイズより大きなファイルは作成できない
・パーティションの分割は、インストール前にある程度見通しを立てておく

####主なパーティション

**/パーティション**･･･ルートディレクトリが格納される領域。**/etc、/bin、/sbin、/lib、/dev**のディレクトリは必ず配置
**/bootパーティション**･･･システム起動時に必要なブートローダ関連のファイルや、カーネルイメージを配置
**/usrパーティション**･･･他ホストと共有できるデータを配置
**/homeパーティション**･･･ユーザのホームディレクトリを配置
**/optパーティション**･･･追加でインストールしたパッケージ(ソフトウェア)を配置
**/varパーティション**･･･サイズが変化するファイルが配置
**/tmpパーティション**･･･誰でも読み書き可能な共有データを配置
**swapパーティション**･･･実メモリに入りきらないプロセスを退避させる領域

###☆LVM(Logical Volume Manager)

・複数のハード・ディスクやパーティションにまたがった記憶領域を一つの**仮想的**で**伸縮可能な論理ボリューム(LV)**として扱うことのできるディスク管理機能
・論理ボリューム(LV)の上にファイルシステムを作成できる
・ハードディスクのパーティションは**pvcreateコマンド**を実行することでLVMの物理ボリューム(PV)になる
・論理の**スナップショット**を取ることができる

※スナップショット･･･ある瞬間のファイルシステムのイメージを保持したもの。全データを複製するのではなく、元のデータへのリンク情報だけを残し、元のデータに変更が加えられた場合は、スナップショット領域に変更前のデータが退避される

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/447762/c7e6b2fa-fcf9-9c44-8b1f-0680d990672b.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/447762/2327f768-c924-f025-17ff-d63de6e4d6ad.png)


####LVMの構成要素

**物理ボリューム(PV)**･･･PEの集合を保持するボリューム
**物理エクステント(PE)**･･･LVに割り当てられる単位
**ボリュームグループ(VG)**･･･PVとLVを含む。PVの集合から任意サイズのLVを作成できる
**論理ボリューム(LV)**･･･VGから作成されるパーティションの制限を受けないボリューム。PEの個数の増減によってサイズの伸縮が可能

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/447762/50976ecd-ca81-7782-7fa6-9fef96794258.png)

###☆ハードディスクの新規追加手順

**①ハードディスクをマシンに接続する**
**②追加したハードディスクのデバイスファイルが作成されていることを確認する**
**③パーティションをいくつに分けるか検討する**
**④ハードディスクにパーティションを作成する**
**⑤各パーティションにファイルシステムを作成する(ファイルシステムの作成)**
**⑥作成したファイルシステムをディレクトリツリーにマウントする(マウントとアンマウント)**
※⑤、⑥は後述

####③パーティションをいくつに分けるか検討する

MBR形式の場合、いくつかのパーティションの種類がある

**基本パーティション**･･･1台のディスクに必ず1つ以上存在するパーティション。最大**4つ**作成できる。
**拡張パーティション**･･･5つ以上のパーティションを利用したい場合は拡張パーティションを利用する。拡張パーティションを作成すると、プライマリパーティションは最大で3つまでに制限される
**論理パーティション**･･･拡張パーティションの中に複数作成することができるパーティション。パーティション番号は5以上が割り当てられる

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/447762/298357b6-8c74-2019-3f66-9c0d028574b9.png)

####④ハードディスクにパーティションを作成する

**fdisk**
・パーティションの作成、削除、変更、表示が可能
・-lオプションを使用すると、作成済みの**パーティションテーブル**を表示する

**fdiskコマンドの主なサブコマンド**

| 主なサブコマンド | 説明 | 
|:-----------:|:------------:|
| d | 領域を削除 | 
| l | パーティションのタイプを表示 | 
| m | 利用可能なメニューの表示 | 
| n | 新規パーティションの作成 | 
| p | パーティションテーブルの表示 |
| q | 変更を保存せず終了 | 
| t | パーティションのタイプを変更 | 
| w | テーブルをディスクに書き込み、終了 | 

**gdisk**
fdiskと同様の機能を持つGPTパーティション用のコマンド

**parted・gparted**
パーティションテーブルを作成したり操作するためのコマンド

#####パーティションテーブル
・パーティションの情報が格納されたテーブル
・ハードディスクの先頭に保存されている

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/447762/e02fcecc-c883-0726-a329-2e8d27468059.png)

※ハードディスクの先頭にはMBRと呼ばれる特別なセクタがあり、その中にパーティションテーブルがある

#####スワップ領域
・専用のパーティションを割り当てることが一般的だが、特定のファイルをスワップ領域として利用することも可能
・**mkswapコマンド**でスワップ領域を初期化する。スワップ領域の利用を開始するには、**swaponコマンド**で有効にする。無効にする場合は**swapoffコマンド**を使用する

##ファイルシステムの作成

####⑤各パーティションにファイルシステムを作成する
fdiskコマンドを使用してパーティションを作成した後、各パーティションに**ファイルシステム**を作成する。これにより、パーティション内にディレクトリ階層構造を作りデータをファイルとして保存することが可能になる

**ファイルシステム**
Linux環境で使用される主なファイルシステムの**ext、ext2、ext3、ext4**などはファイルシステムの初期化時に用意される**iノード**の数が、作成できる数の上限となる
その他、**reiserfs、xfs、jfs、vfat、exfat、btrfs**などのファイルシステムも使われる

**ジャーナル機能**
ファイルシステムのデータの更新を記録する機能
ext3、ext4、reiserfs、xfs、jfsなどがジャーナル機能を持つ

**mkfsコマンド**･･･ファイルシステムの作成(初期化)するコマンド

#####ファイルの構成要素
ファイルシステム内で使用される「ファイル」は、ファイル名でデータにアクセスできるよう、以下の三つの要素から成り立つ

| 構成要素 | 説明 | 
|:-----------:|:------------:|
| ファイル名 |ファイルにつけられている名前。ファイルにアクセスする際に使用される　| 
| iノード | ファイル1つにつき、1個割り当てられる。メタデータとしてファイルの詳細情報や実データが格納されているポインタが格納されている　| 
| データブロック | 実データが格納される領域　| 

##ファイルシステムの整合性検査

###☆ファイルシステムを確認する重要コマンド

**dfコマンド**･･･ファイルシステムの**使用状況**の表示

| 主なオプション | 説明 | 
|:-----------:|:------------:|
| -k | キロバイト単位で表示する　| 
| -h | 要領に合わせた適切な単位で表示する　| 
| -i | inodeの使用状況をリスト表示する　| 

※オプションを指定せずに表示するとキロバイト単位表示

**duコマンド**･･･ファイル、ディレクトリの**使用容量**の表示

| 主なオプション | 説明 | 
|:-----------:|:------------:|
| -a | ディレクトリだけでなく、すべてのファイルについて容量を表示する | 
| -h | 要領に合わせた適切な単位で表示する　| 
| -s | 指定されたファイル、ディレクトリの使用量の総和を表示する | 
| -S | サブディレクトリの使用量を含めずに、個々のディレクトリの使用量を分けて表示する | 

**fsckコマンド**･･･ファイルシステムの不適合をチェックし、必要であれば修正する。デフォルトの動作として/etc/fstabに書かれているファイルシステムを遂次的にチェックする(fsck -Asを実行した場合と同じ)

| 主なオプション | 説明 | 
|:-----------:|:------------:|
| -t | チェックするファイルシステムのタイプを指定する | 
| -s | fsckの動作を遂次的にする。複数のファイルシステムを対話的にチェックする際に使用する　| 
| -A | /etc/fstabに記載されているファイルシステムをすべてチェックする | 

**e2fsckコマンド**･･･ext2、ext3、ext4ファイルシステムの不整合をチェックする場合に使用

**tune2fsコマンド**･･･ext2/ext3/ext4ファイルシステムのパラメータを適切な値に変更するコマンド

| 主なオプション | 説明 | 
|:-----------:|:------------:|
| -c 回数 | マウント数がこの回数を超えると、次回ブート時にファイルシステムをチェックする | 
| -i [d,m,w] | ファイルシステムをチェックする最大の時間間隔を設定する。数値のみだとdになる | 
| -j | ext3ジャーナルをファイルシステムに追加する | 
| -l | ファイルシステムのスーパーブロックの内容を表示する | 

**dumpe2fs**･･･スーパーブロックの内容に加え、ブロックグループに関する情報も表示する

| 主なオプション | 説明 | 
|:-----------:|:------------:|
| -b | 不良ブロックとして扱われているブロックを表示する | 
| -h | スーパーブロックの情報だけを表示する | 

**debugfsコマンド**･･･ext2、ext3、ext4ファイルシステムの対話的なデバッガツール。ファイルシステムの調査・変更を行うことができる

| 主なオプション | 説明 | 
|:-----------:|:------------:|
| -w | ファイルシステムを読み書き可能なモードでオープンする | 
| -f コマンドファイル | コマンドファイルからコマンドを読み込ませ、実行させる | 

###☆xfsファイルシステムで使用可能なコマンド

| 主なオプション | 説明 | 
|:-----------:|:------------:|
| xfs_info | 引数で指定されたxfsファイルシステムに関する情報の表示。実行時は、マウントされた状態で行う | 
| xfs_repair | xfsファイルシステムの修復を行う。修復の調査のみの場合は、-nオプションを使用する | 
| xfs_fsr | マウントしているxfsファイルシステムのデフラグを行う | 
| xfs_db | xfsファイルシステムのデバッグを行う | 

##マウントとアンマウント

####⑥作成したファイルシステムをディレクトリツリーにマウントする
mkfsコマンドなどによりファイルシステムを作成後、ルートファイルシステムからアクセスできるように**mountコマンド**を使用し、**マウント**する

**マウント**･･･あるディレクトリにファイルシステムのルートディレクトリを接続する作業のこと

(例)マウントの概要

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/447762/36f3ff76-6393-c53d-2553-d6dfe6fdc055.png)

/home2ディレクトリに/dev/sda5ファイルシステムをマウントする(接続する)ことで、/(ルート)から/dev/sda5ファイルシステムにアクセスすることができる
ファイルシステムをマウントするには、接続するディレクトリ(マウントポイント)を事前に作成し、mountコマンドを実行する

**mountコマンド**･･･使用する際は、デバイスファイル名(ファイルシステム)とマウントポイントを指定する。UUIDやLABELを持つファイルシステムを指定することも可能

| 主なオプション | 説明 | 
|:-----------:|:------------:|
| -a | /etc/fstabファイルに記載されているファイルシステムをすべてマウントする | 
| -r | ファイルシステムを読み取り専用でマウントする | 
| -w | ファイルシステムを読み書き可能なモードでマウントする(デフォルト) | 
| -t | ファイルシステムタイプを指定してマウントする | 
| -o | マウントオプションを指定する | 
| -bind | サブツリーをどこか他の場所に再マウントする |

**umountコマンド**･･･アンマウントすると、そのファイルシステムに存在するファイルやディレクトリにルートファイルシステムからアクセスできなくなる

| 主なオプション | 説明 | 
|:-----------:|:------------:|
| -a | /etc/fstabファイルに記載されているファイルシステムをすべてアンマウントする | 
| -r | アンマウントが失敗した場合、読み取り専用での再マウントを試みる | 
| -t | 指定したタイプのファイルシステムのみに対してアンマウントする | 

###☆ブロックデバイス
デバイスファイルのうち、ブロック単位でデータを転送するものを**ブロックデバイス**と呼ぶ

####ブロックデバイスを調査するコマンド

**lsblkコマンド**･･･利用可能なブロックデバイスの一覧(デバイス名(NAME)や、デバイスのマウント先(MOUNTPOINT))を表示する

**blkidコマンド**･･･利用可能なデバイスに関する情報(UUID、ファイルシステムのタイプ(TYPE)、ボリュームラベル(LABEL)などの属性)を表示する

###☆/etc/fstabファイル
**/etc/fstabファイル**には、mountコマンドの実行に必要な情報を記述する
マウントするには、主に以下の3つがあり、

①デバイスとディレクトリを指定して主導でマウントする
②/etc/fstabを参照して主導でマウントする
③Linuxの起動時にマウントする

②は、**「mount -a」**を実行することで/etc/fstabファイルを参照して、ファイル内のオプションフィールドがautoのエントリをすべてマウントする
時々使用する場合は、①のように必要な時だけマウントすればよいが、よく利用するファイルシステムは/etc/fstabに記述しておくことで起動時にマウントされる


(例)/etc/fstabの設定

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/447762/55591f4b-2fac-4b88-52cd-bf3889936793.png)

①デバイスファイル名(デバイスファイル名、ラベル名、UUID)
②マウントポイント
③ファイルシステムの種類
④マウントオプション
⑤バックアップの指定
⑥ファイルシステムのチェック