LPIC201対策 - ファイルシステムとデバイス

# この記事について

Linux Level 2 取得を目標としている筆者です。
先日 Level 1 を取得しましたが、短期詰め込みの暗記がしんどかったので、Level2はじっくり時間をかけていいから、ちゃんと理解してやっていきたい。

一方で、暗記も暗記で重要。

ということで、理解を深めるためにと、暗記しやすいように、両方の目的で、覚えたことを Qiita に整理してまとめながら受験対策することにしました。

# この分野で覚えること

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

### システム領域に使用されるファイルシステム

| 名称 |説明 |
|:-|:-|
|ext2|Linux標準|
|ext3|↑＋ジャーナリング機能|
|ext4|↑＋大容量（1EiBまでをサポート）|
|btrfs|サブボリュームを構成しスナップショットなどの機能あり<br>ZFSを参考に作られた|
|xfs|ジャーナリング機能あり|


:::note
ジャーナリングとは、ディスクに実データを書き込む前に、メタデータを専用領域に書き込むこと。これにより、不正にシステムが終了した際にもファイルシステム内で不整合が起きることを防げる。
:::

### その他のファイルシステム

| 名称 |説明 |
|:-|:-|
|iso9660|CD-ROM用|
|FAT/VFAT|フラッシュメモリ<br>Windowsの古いファイルシステム<br>UEFIファームウェアのシステムパーティション<br>ISOILNUXのイメージ　等で使用|
|ntfs|最近のWindowsで使われる|
|nfs|ネットワークファイルシステム|
|tmpfs|メモリ上に配置（RAMディスク）|
|swap|物理メモリのスワップ先|
|ZFS|Solarisで使用|

## smartctl コマンドのオプション

| 短 | 長 | 意味 |
|:-|:-|:-|
|-t|--test|自己診断テストの**実行**|
|-a|--all|すべてのSMART情報を表示|
|-i|--info|SMARTの対応状況やデバイスの情報を表示|
|-c|--capabilities|テストの**対応状況を表示**|
|-l|--log|テストログを表示|
|-H|--health|デバイスの健康状態を表示|
||--scan|認識されているデバイスを表示|

## mkfs, mkfs.extx コマンドの関係


`mkfs [-t ファイルシステムの種類] デバイス` を実行すると、内部的に  `mkfs.指定したファイルシステムの種類 デバイス` が実行される。 

たとえば、

`mkfs -t ext3 /dev/sda1` を実行すると、内部的に  `mkfs.ext3 /dev/sda1` が実行される。 

## mke2fs コマンドのオプション

| オプション | 意味 |
|:-|:-|
|-t|ファイルシステムの種類を指定|
|-j|ext3として作成する|
|-b|ブロックサイズを指定（バイト単位）|
|-m|ルート用予備領域の割合を指定|
|-L|ボリュームラベル名を指定|
|-n|確認のみ（実際には実行しない）|

## tune2fs コマンドのオプション

2という数字がついているが、このコマンドで ext2/ext3/ext4 の操作・設定を行うことができる。

| オプション | 意味 |
|:-|:-|
|-c|自動fsckが行われるまでの**マウント回数**を指定|
|-i|自動fsckが行われるまでの**時間**を指定|
|-j|ext2をext3に変換|
|-l|スーパーブロックの内容を出力<br>(`dumpe2fs`と同様)|
|-m|ルート用予備領域の割合を指定|
|-L|次に指定した名前でラベルをつける|

:::note 
スーパーブロックの内容は後述
:::

## e2fsck コマンドのオプション

2という数字がついているが、このコマンドで ext2/ext3/ext4 の復元・チェックを行うことができる。
（xfsなどには対応していない。fsckコマンドであれば、 -t オプションで xfs などのファイルシステムにも対応）

| オプション | 意味 |
|:-|:-|
|-b|スーパーブロックを指定して、それを使って復元|
|-c|不良ブロックのチェックを行う|
|-p|自動的に不良ブロックを修復する|

fsckコマンドをたたくと、引数がこのコマンドに渡される。

たとえば `fsck -t ext3` をたたくと、fsck.ext3(e2fsckの別名)が呼ばれる。

## オートマウントの設定方法

### `/etc/auto.master`

- メインの設定ファイル
- この中で、マップファイルという設定ファイルを指定する
- 編集したら、`/etc/init.d/autofs reload`を実行することで設定を反映できる

```shell
# こちらの表記は直接マップ
/- /etc/auto.direct

#こちらの表記は間接マップ - /abc 部分がマウントポイントの起点
/abc /etc/auto.mapfile --timeout 60
```

### マップファイル

`/etc/auto.master` の中の2列目の要素。

上記の間接マップの例でいうと、`/abc` にどのようにマウントするかの設定情報が `/etc/auto.mapfile` に書かれている。

書式は `マウント名 [マウントオプション] マウントするリソースやデバイス（ロケーションという）`

```shell:直接マップの場合のマップファイル例
/mntname NFS1:/share
```

```shell:間接マップの場合のマップファイル例
/cdrom -fstype=iso9660 :/dev/cdrom
```

## ファイルシステムにおけるブロック

ext2, ext3 は、ブロック単位でデータを管理している。
ブロックには、以下の種類がある。

| ブロックの種類 | 意味 |
|:-|:-|
|データブロック|実際のファイル内容を保持|
|iノードブロック|個々のファイルのメタ情報を保持。<br>ファイル名、ファイルサイズ、アクセス権、所有者など|
|スーパーブロック|ファイルシステム全体に関わる情報を保持。<br>（**マウント回数、ブロックサイズ**など）<br>冗長化されている。|

## ファイルシステムの修復を行う際の注意事項

対象ファイルシステムに書き込みがされないようにしておくこと。
具体的には、

- あらかじめアンマウントしておく
- マウント時に ro マウントオプションを指定しておく

上記がいずれもできない場合は、 /etc/fstab の fsck フラグ（最後のbit）が1になっていることを確認の上、 `shutdown -r -F now` （強制再起動）を実行して起動時にチェックする

## 暗号化関係

### 暗号化の手順

1. ブロックデバイスへの暗号化マッピングを作成
1. 暗号化マッピングにファイルシステムを作成
1. 暗号化ファイルシステムをマウント

:::note
ブロックデバイスとは、要するにブロックストレージ的なものの総称と理解（違う？）
https://e-words.jp/w/%E3%83%96%E3%83%AD%E3%83%83%E3%82%AF%E3%83%87%E3%83%90%E3%82%A4%E3%82%B9.html
:::

### 暗号化マッピングの作成

`cryptsetup` コマンドを使用し、`/dev/mapper` 配下に指定した名前で暗号化マッピングを作成

| オプション | 意味 |
|:-|:-|
|create マッピング名 デバイス名|指定したデバイスに、指定したマッピング名で暗号化マッピングを作成|
|remove マッピング名|指定したマッピングを削除|
|status マッピング名|指定した暗号化マッピングの状態を表示|

上記を実施後、`mkfs` コマンドでファイルシステムを作成、 `mount` コマンドでマウント

### luks関係

LUKS(Linux Unified Key Setup) は Linux において標準的に使用される暗号化ファイルシステムの仕様。

LUKSでは、dm-cryptという、デバイスマッパー（物理デバイスと論理デバイスをマッピングする機能）の暗号機能を使ってデバイス全体の暗号化を実施。
KeySlotといって、暗号化管理のための鍵をパーティションごとに8つまで保持可能。これにより、万が一の場合の予備鍵や、（少数なら）ユーザーの使い分けにも対応できる。

| オプション | 意味 |
|:-|:-|
|luksFormat デバイス名|指定したデバイスをLUKS（暗号化）されたパーティションとして初期化|
|luksOpen デバイス名 パーティション名 |指定されたデバイス・LUKSパーティションを開く|
|luksClose パーティション名 |指定されたLUKSパーティションを閉じる|
|luksDump デバイス名 |指定したデバイスの暗号化の**状態**を表示|

## mkisofsコマンドのオプション

| コマンド | 意味 |
|:-|:-|
|mkisofs|CD-Rに焼き込み可能なファイルシステムイメージを作成|

| オプション | 意味 |
|:-|:-|
|-o|イメージファイルの出力先を指定|
|-J|Jolietフォーマットで作成（Windows系の拡張）|
|-R|RockRidgeフォーマットで作成（UNIX系の拡張）|
|-udf|UDFフォーマットで作成（DVDで使用）|

## その他のコマンド

| コマンド | 意味 |
|:-|:-|
|xfsrestore|xfsファイルシステムをバックアップから復元|
|xfsdump|XFSファイルシステムのバックアップを行う<br>（コマンド名はdumpだが、単なる表示ではなくバックアップにも使える）|
|debugfs|ext系のファイルシステムを対象に、専用のシェルを起動して対話的に調査・編集を行うコマンド|
|e2label|ext系のファイルシステムにラベルを設定する専用コマンド（2,3,4どれでも使える）|


## ファイル・ディレクトリ関連

| ファイル | 中身 |
|:-|:-|
|/proc/filesystem|現在のシステムで利用可能なファイルシステムの一覧|
|/dev/disk/by-uuid|デバイスのUUIDを確認できる。（`blkid`コマンドを打鍵するのと同様だが、表示形式は異なる）|
|/lost+found|どこからも参照されていないファイルの保管場所|

## その他の暗記事項

| 暗記事項 | 説明 |
|:-|:-|
|VFS|Virtual File System の略で、Linux で異なるファイルシステムの違いを吸収する為に用いられる仕組み。これのおかげで、ユーザープログラムはファイルシステムの違いを意識することなく処理を記述できる。内部的にはシステムコール（OSの機能を呼び出す仕組み）を使ってVSFを呼び出す|


# 以上！

勉強が進んだら適宜追記・修正などしていきます。