Linuxのファイルシステムについて

# ファイルシステムとは
ハードディスクなどの***データ(```セクタ```という区画で分かれている)を人間がわかりやすくするために整理するシステム***を
```ファイルシステム```と言います。
ファイルシステムは```ブロック```という単位でデータを管理していてアプリケーションプログラムではブロック単位でデータを扱います。Linuxのファイルシステムでは、「ファイルの中身（データ）」　と「ファイルの属性や管理情報」は別々に保存されており、後者は```iノード```と呼ばれる領域で管理されています。


Linuxではのファイルシステムでは、「ファイルの中身（データ）」　と「ファイルの属性や管理情報」は別々に保存されており、後者はiノードと呼ばれる領域で管理されている。iノードはファイルシステム作成時に予め用意されていてファイルやディレクトリを作成するたびに1つずつ使われいく。

# ファイルシステムのイメージ
ファイルシステムはそれぞれのデータごとに区切られています。（パーティション)

# ファイルシステムの種類

![スクリーンショット 2022-06-30 18.29.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1748789/7e704978-91e4-d201-7615-2987b238e37b.png)

>引用　https://qiita.com/kakkie/items/768fa330f1e1832b702c


# Btrfsファイルシステム
都合上こちらの記事で確認お願いします。

https://qiita.com/sion_cojp/items/c8e015db39ddbf43012e


# mkfs(ファイルシステム作成コマンド)
***パーティションにファイルシステムを作成するコマンド***で***rootユーザー***のみ使えます。
オプションの```-t```でファイルシステムの種類を指定し、
```-c```で***不良のブロックを調査***します。
ext２を指定すると「mkfs.ext2」というプログラムが呼び出されます。」

```
$ mkfs -t ext2 /dev/sdc1
```
これでext2 というファイルシステムで/dev/sdc1デバイス(パーティション)に
ファイルシステムを作成というコマンドです。

# mke2fs(ファイルシステム作成コマンド)
***パーティションにファイルシステムを作成するコマンド***でext2、ext3、ext4
オプションの```-t```でファイルシステムの種類を指定し、```-c```で***不良のブロックを調査***し、
オプションの```-j```でext3を作成し、指定しない場合はext2を作成するみたいです。

```
$ mkefs -t ext4 /dev/sdc1
```
これでext4 というファイルシステムで/dev/sdc1デバイス(パーティション)に
ファイルシステムを作成というコマンドです。


# mkfs.btrfs(ファイルシステム作成コマンド)
Btrfsファイルシステムを作成し、```mkfs　-t Btrs```コマンドで呼び出されます。
```
$ mkfs.btrfs  /dev/sdc1
```
/dev/sdc1デバイス(パーティション)にBtrfsファイルシステムを作成というコマンドです。

# XFSコマンド

|mkfs.xfs|XFSファイルシステムを作成する。|
|--|--|
||XFSファイルシステム作成|

|操作コマンド|	説明|
|--|--|
|mkfs.xfs|XFSファイルシステムを作成する。|
|xfs_repair|XFSファイルシステムの検査・修復を実行する。|
|xfs_info|XFSファイルシステムの情報を表示する
|xfs_db|XFSファイルシステムのデバックを行う。|
|xfs_check|XFSファイルシステムをチェックする。|
|xfs_admin|XFSファイルシステムのパラメータを変更する。|
|xfs_far|XFSファイルシステムのデフラグを行う|
|xfs_fsr|XFSファイルシステムのフラグメンテーションを検査、解消（デフラグ）を実行する。|

>引用　　https://www.ricecake24book.com/linux-xfs/

# スワップ領域
ハードディスク内の追加スペースのことで、使っていないメモリの内容を一時的にしまっておくための場所です。


# mkswap
***スワップ領域を作成するコマンドでファイルをスワップ領域として利用***できます。

```
$ mkswap /dev/sdc1
```
/dev/sdc1デバイス(パーティション)にスワップ領域を作成しろという意味です。

# スワップ領域を有効、無効にするコマンド
### swapon
***スワップ領域を有効***にします。

オプションは```-S```で***有効化されているスワップ領域を一覧表示***で
```cat /proc/swaps```コマンドでも確認できます。
引数はデバイス名、ファイル名です。

### swapoff
***スワップ領域を無効***にします。
引数はデバイス名、ファイル名です。

# ファイルシステムのマウント(mount)
```マウント```とは***ファイルシステムに別のファイルシステムを入れること***です。
別のファイルシステムを接続するディレクトリを```マウントポイント```と言います。
ファイルシステムを取り外すことを```アンマウント```と言います。


### mountコマンド
***指定したデバイスを指定したマウスポイントにマウントするコマンド***です。
まず***マウント、アンマウントコマンドはrootユーザーしか使えません***。
***オプションを指定しないでmountだけの場合はマウント状況確認***になります。
オプションの```-a```で***/etc/fstabファイルにあるシステムを全てマウント***し、```-tファイルシステム種類```で
***ファイルシステムの種類を指定***し、オプションの```-o```で***マウントオプションを指定****します。
引数はデバイス名、マウスポイントです。

```
$ mount -t ext2 /dev/sdc1/data
```
/dev/sdc1/dataにあるext2ファイルシステムをマウントポイント(/data)にマウントするという意味です。


# /etc/fstabファイル
***/etc/fstabファイルはファイルシステムの情報が記述***されています。
この記事に詳細が載ってました。

https://qiita.com/kakkie/items/768fa330f1e1832b702c


# マウントオプション種類

|オプション|説明|
|--|--|
|async|ファイルシステムの入出力を非同期で実行|
|auto|mount -a コマンドの実行時にマウントする|
|noauto	|mount -a コマンドの実行にマウントしない|
|defaults	|デフォルトのオプションを設定(async, auto, dev, exec, nouser, rw, suid)|
|exec|バイナリの実行を許可|
|noexec|バイナリの実行を禁止|
|ro|読み取り専用モードでマウント|
|rw|読み書き可能モードでマウント|
|unhide|隠しファイルも表示|
|suid|SUIDとSGIDの有効化|
|user|一般ユーザーにマウントを許可する|
|users|一般ユーザーにマウントを許可し、マウントを実行していないユーザーにアンマウントを許可|
|nouser|一般ユーザーのマウントを許可しない|


>引用  https://qiita.com/kakkie/items/768fa330f1e1832b702c

### unmount
***指定したデバイスまたはマウスポイントに接続されているデバイスをアンマウントするコマンド***です。
ユーザーが利用中はアンマウントできないみたいです。
オプションの```-a```で***/etc/fstabファイルにあるシステムを全てアンマウント***し、
```-tファイルシステム名```でファイルシステムの種類だけをアンマウントします。

```
$ unmount /data
```
マウントポイント/dataにつながるファイルシステムをアンマウントしろというコマンドです。

```
$ unmount -at btrfs
```
マウントされている全てのBtrfsファイルシステムをアンマウントするコマンドです。




# 資料

https://www.udemy.com/course/linuc-lv1-101/

https://qiita.com/h-tatsu/items/5aa6f77dc4db62eee512

https://qiita.com/kamihork/items/fbcd116a631324aae05d

https://qiita.com/kakkie/items/768fa330f1e1832b702c

https://wa3.i-3-i.info/word1721.html