ファイルシステム
ext ファイルシステムの概要
ファイルシステム | リリース時期 | 登場カーネルバージョン | 最大ファイルサイズ | 最大ファイルシステムサイズ | 説明 |
---|---|---|---|---|---|
ext | 1992/04 | 0.96 | 2 GB | 2 GB | Linux 初期のファイルシステム。2.1.12 以降のカーネルではサポートされない |
ext2 | 1993/01 | 0.99 | 2 TB | 32 TB | ext からの拡張 (可変ブロックサイズ、3 種類のタイムスタンプ、ビットマップブロックと i ノード管理、ブロックグループの導入) |
ext3 | 2001/11 | 2.4.15 | 2 TB | 32 TB | ext2 からの拡張 (ジャーナル機能)。ext2 と後方互換性有り |
ext4 | 2008/12 | 2.6.8 | 16 TB | 1 EB | ext2/ext3 からの拡張 (ettent 採用によるパフォーマンス向上、ナノ秒単位のタイムスタンプ、デフラグ機能)。ext2/ext3 と後方互換性有り |
ext2/ext3 ファイルシステムのデータブロック管理
- 属性情報
- パーミッション (mode)
- ユーザー ID (uid)
- サイズ (size)
- etc…
- データブロックへの参照情報
- 直接マップ
- 間接マップ
- 二重間接マップ
- 三重間接マップ
ext4 ファイルシステムのデータブロック管理
- 属性情報
- パーミッション (mode)
- ユーザー ID (uid)
- サイズ (size)
- etc…
- データブロックへの参照情報
- ヘッダ
- エクステント: 先頭ブロックと、そこから隣接自他ブロック個数の情報
- インデックス: 別のエクステントが格納されたリーフノードのブロック情報#### 主要なファイルシステム
mke2fs コマンド
ext2, ext3, ext4 ファイルシステムを作成する。
- -b [ブロックサイズ]: ブロックサイズをバイト単位で指定する (1024, 2048, 4096)
- -i [i ノードあたりのバイト数]: i ノードあたりのバイト数を指定する
- -j: ジャーナルを追加する。デフォルトで ext3 ファイルシステムを作成する
- -m [予約ブロック比率]: 予約ブロックの比率を指定する。デフォルトは 5 %
- -t [ファイルシステムタイプ]: ext2, ext3, ext4 のいずれかを指定する
- -O [追加機能]: has_journal, extent など追加する機能を指定する
Brrfs
Btrfs は 2009 年 1 月 にリリースされたファイルシステムである。 木構造に B-tree を採用し、GPL で配布されている。
- COW (Copy on Write)、スナップショット機能、ロールバック機能
- データ領域の割り当てにエクステントを採用
- 単一ファイルシステム内に独立した i ノードとデータ領域を持つ複数のサブボリュームを作成可能
- 複数のディスクパーティションを持つ単一のファイルシステムを作成可能
- RAID0, RAID1, RAID10 の構成が可能
- データ及びメタデータのチェックサムにより完全性の検査が可能
- ext2, ext3, ext4 のオフラインによる Btrfs への移行が可能 (
btrfs-convert [デバイス名]
コマンド) - ファイルの最大サイズ、ファイルシステムの最大サイズはともに 16 EiB Btrfs をルートシステムファイルあるいは /boot 以下のファイルシステムとする場合は GRUB2 が Btrfs モジュールをリンクする。
btrfs コマンド
btrfs に対する管理を行う。
サブボリュームを作成する。 サブボリューム名はパスで指定するか、名前だけを指定する。
btrfs subvolume create [サブボリューム名]
XFS
1993 年に SGI (Silicon Graphics, Inc) によって開発された。 大容量ファイルを扱え、並行処理が可能。 2000 年に Linux へ移植され、GPL でリリースされた。 RHEL 7 ではデフォルトのファイルシステムとなっている。
- 単一ファイルシステム内に独立した i ノードとデータ領域を持つ複数のアロケーショングループを持ち、各アロケーショングループは並行処理ができる
- データ領域の割り当てにエクステントを採用
- ファイルの最大サイズ、ファイルシステニの最大サイズはともに 8 EiB
- XFS をルートシステムファイルあるいは /boot 以下のファイルシステムとする場合は GRUB2 が XFS モジュールをリンクする。
XFS 管理コマンド
- xfsdump: XFS ファイルシステムのバックアップ
- xfsrestore: XFS ファイルシステムのリストア
- xfs_info: XFS ファイルシステムの情報を表示
- xfs_check: XFS ファイルシステムの整合性チェック
- xfs_repair: XFS ファイルシステムの修復
ZFS
Sun Microsystem (Oracle) により開発され、2005 年に OSS として公開されたファイルシステム。
- ファイルの最大サイズ、ファイルシステムの最大サイズはともに 16 EiB
- RAID 0, RAID 1, RAID-Z(RAID 5 の拡張), RAID-Z 2 (RAID 6 の拡張) をサポート
- 複数のストレージデバイスからストレージプールを構成
- スナップショット機能
ISO イメージファイルの作成
CD-ROM や DVD で使用するファイルシステム規格に基づくファイル。
Windows の場合は ISO9660, もしくは ISO9660+Joliet 拡張のファイルを読み込み可能。
mkisofs コマンド
ISO ファイルを作成する。
mkisofs [オプション] ディレクトリ
TRANS.TBL は短縮系ファイル名と元の長いファイル名の変換テーブル。
- -J: ISO9660 に Joliet 拡張を追加する
- -R: RockRidge 拡張を追加する
- -o: 出力先ファイル名を指定
- -T: TRANS.TBL ファイルを各ディレクトリに作成する。
fstab
マウントオプション | 説明 |
---|---|
atime | アクセス時に i ノード内のアクセス時間 (atime) を更新する |
noatime | アクセス時に i ノード内のアクセス時間 (atime) を更新しない |
loop | loop デバイスを使用してマウントする。ブロックデバイスではなくファイルシステムが格納されたファイルマウントで使用する |
mount オプションでデバイスを指定すると、fstab ファイルを参照せずにマウントを試行する。 一般ユーザーにはマウントの権限はない。
/etc/mtab = /proc/mounts = /proc/self/mounts へのシンボリックリンク
ファイルシステムが VFAT の場合、マウントオプションで uid=
を指定するとどのユーザーがマウントしても既存及び新規ファイルの所有者は指定したユーザーとなる。
CD-ROM/DVD のファイルシステム規格
規格 | 特徴 |
---|---|
ISO9660 | CD-ROM ファイルシステムの標準化案である High Sierra Format をもとに定められた規格。ファイル名の文字数は 8 文字以下、拡張子 3 文字以下、大文字や小文字の区別をしない |
RockRidge | UNIX 系 OS のための拡張規格。ISO9660 の上位互換である。大文字小文字の区別あり、ファイル名の文字数は 255 文字である。UID/GID、パーミッション、シンボリックリンク、ブロック、キャラクタデバイスをサポート。 |
Joliet | ISO9660 の上位互換。文字コードは Unicode ベースの UCS-2。ファイル名の文字数は 64 文字まで |
UDF | Universal Disk Format。ISO9660 に代わる光ディスクの標準ファイルシステム。DVD, CD-ROM に対応し、そのほかのリムーバブルメディアにも対応する。ファイル名の文字数は 255 文字まで。 128 TB までの容量に対応。 |
ファイルシステムのマウント
mount コマンド (iSCISI デバイスの操作)
- -a -O _netdev: /etc/fstab 第 4 フィールドに
_netdev
の指定があるエントリだけをマウントする - -a -O no_netdev: /etc/fstab 第 4 フィールドに
_netdev
の指定がないエントリだけをマウントする
システム起動時に実行される RC スクリプトでは no_netdev → _netdev オプションの順に実行される。
ファイルシステムの管理
iSCSI (Internet Small Computer System Interface)
SCSI プロトコルを TCP/IP ネットワーク上で利用するためのプロトコルである。 ストレージ提供側をターゲット、利用側をイニシエーターと呼ぶ。 設定ファイル内で scsi_id パラメーターで他と重複しない値を割り当てる。 指定しな愛場合はターゲット番号と LUN 番号をもとに自動で割り当てられる。 1 つのターゲットには複数のボリュームを設定でき、各ボリュームに LUN が割り当てられる。
iSCSI ターゲットとイニシエーターにはグローバルで一意な識別子をつける必要がある。 ターゲットの識別子には 2 種類のタイプがある。
- iqn (iSCSI Qualified Name)
- eui (Extended Unique Identifier)
iqn (iSCSI Qualified Name)
タイプ識別子 (iqn.)、ドメイン取得日、ドメイン名、識別用文字列から構成する。 識別用文字列には任意の文字列を指定可能。
iqn.yyyy-mm-<reversed domain name>[:identifier]
eui (Extended Unique Identifier)
タイプ識別子 (eui.) と IEEE EUI-64 フォーマットで構成する。 IEEE EUI-64 フォーマットは上位 6 桁が IEEE が企業に発行した OUI、下位 10 桁が企業内で一意に割り当てた番号である。
eui.02004567A425678D
iSCSI ターゲットへのアクセス手順
iscsiadm
コマンドでターゲットへアクセスする。 事前に iscsid デーモンが起動している必要がある。 設定ファイル (/etc/iscsi.conf
) に node.startup=automatic
と記載することで iscsid デーモンは自動起動する。
- ターゲットの検知
- ターゲットへのログイン
1. ターゲットの検知
- -m: モード (検知: discovery, ノード関係: node, セッション関係: session)
- -t: タイプ
- -p: ターゲットポータルの IP アドレス
iscsiadm -m discovery -t sendtargets -p <IP アドレス>
一度検知したターゲット情報は /var/lib/iscsi
ディレクトリ配下のデータベースに保持される。 検知後に反映させるにはデータベースのレコードを iscsiadm
で削除してから再度検知する。
2. ターゲットへのログイン
/etc/iscsi.conf
で node.startup=manual
と設定し、node
モードで --login
オプションをつけて実行する。 node.startup=automatic
と記載した場合はログインまで自動で行う。
iscsiadm -m node --login -p <IP アドレス>
session
モードでログインセッションを確認できる。
iscsiadm -m session
fuser コマンド
ファイルあるいファファイルシステムにアクセスしているプロセスを表示する。
fuser [オプション] ファイル名
fuser [オプション] ファイルシステム名
- -v: ユーザー名、プロセス ID、アクセスタイプ、コマンド名を表示
- -m: ファイルシステムにアクセスしているプロセスを表示
- -n [tcp|udp] [ポート番号|サービス名] : ローカルの TCP/UDP ポートにアクセスしているプロセスを表示
ファイルシステムには識別のために任意の名前であるボリュームラベルを付けることができる。
スーパーブロックの表示
- tune2fs
- dumpe2fs: ext2/ext3/ext4 のスーパーブロックとブロックグループの情報を表示する -h オプション
- debugfs: ext2/ext3/ext4 をデバッグする、stats -h オプションでスーパーブロックの内容を表示
sync コマンド
sync システムコールを発行し、キャッシュを持つバッファキャッシュ、i ノードキャッシュ、ディレクトリエントリキャッシュ、ページキャッシュのデータをディスクに書き込み、データを最新の状態にする。
- 正常にシャットダウンをできない時、sync コマンドを実行してから電源を切る
- ディスクの書き込み後、キャッシュデータを直ちにディスクへ書き込む
tune2fs コマンド
fsck コマンド
ファイルシステムの不整合をチェックし、必要であれば修正する。 fsck コマンド実行時はファイルシステムをアンマウントする。
fsck [オプション] [デバイスファイル名]
- -t:チェックするファイルシステムのタイプを指定する
- -s:fsck の動作を逐次的にする
- -A:/etc/fstab に記載されているファイルシステムをすべてチェックする
- -b: 指定したスーパーブロックバックアップを使って実行する
- -p: 軽微なエラーを確認なしで自動的に修復し、それ以外は確認も修復もしない
- -y: fsck の確認に対してすべて yes と答える
- -n: fsck の確認に対してすべて no と答える
- -f: スーパーブロック中のファイルシステム状態フラッグが clean の時でも Pass 1 ~ 5 のチェックを行う
ext2/ext3/ext4 に対するファイルシステム整合性の検査と修復
- Pass 1: Checking inodes, blocks, and sizes
- すべての i ノードについて、mode の値が正当であるか、size と block の値が正しいか、データブロックが複数の i ノードによって参照されていないかをチェックする
- Pass 2: Checking directory structure
- すべてのディレクトリについて、そのデータが正常であるか (使用中の i ノードを参照しているか、エントリが
.
,..
の順番になっているか、など) をチェックする
- すべてのディレクトリについて、そのデータが正常であるか (使用中の i ノードを参照しているか、エントリが
- Pass 3: Checking directory conectivity
- すべてのディレクトリがファイルシステムのツリーに接続されているかどうかチェックし、接続されていない場合は
lost+found
配下に置くかどうかを確認する
- すべてのディレクトリがファイルシステムのツリーに接続されているかどうかチェックし、接続されていない場合は
- Pass 4: Checking reference counts
- 各 i ノードの参照カウントをチェックし、異なる場合は修正するかを確認する
- Pass 5: Checking group summary information
- 各ブロックグループの i ノードビットマップとブロックビットマップをチェックする
スワップ領域の管理
メモリに入りきらないプロセスをページ単位あるいはプロセス単位で退避させる領域である。 スワップ領域にはパーティションかファイルを指定する。
- スワップ領域用のディスクパーティションあるいはファイルを作成する
- mkswap コマンドでパーティションあるいはファイルをスワップ領域として初期化する
- swapon コマンドでスワップ領域として使用開始する
システム起動時に自動で開始するには /etc/fstab
にエントリを記述する。 スワップ領域の使用を停止する場合は swapoff コマンドを実行する。
dd コマンド
ファイルを作成する。
dd [if=file] [of=file] [bs=bytes] [count=blocks]
- if=[入力ファイル名]: 入力ファイルの指定
- of=[出力ファイル名]: 出力ファイルの指定
- bs=[ブロックサイズ]: 1 会の read/write で使用するブロックサイズの指定
- cout=[ブロック数]: 入力するブロック数を指定
/dev/zero
をファイルに指定するとオールビットゼロの内容を読み込む。
mkswap コマンド
指定したパーティションあるいはファイルをスワップ領域として初期化する。
mkswap [オプション] デバイスファイル名
- c: 不良ブロックのチェックを行う
- -L [ラベル名]: ラベルを指定し、そのラベルで swapon できるようにする
スワップ領域の構成
- ヘッダー用のページ (4096 バイト)
- ブートローダー用の領域 (1024 バイト)
- バージョン番号 (1)
- 最後のページ番号
- 不良ページの個数
- uuid: mkswap が生成した uuid
- ラベル名
- パッディング
- 不良ページ番号
- シグネチャ: スワップ領域として初期化されかことを示すシグネチャ “SWAPSPACE2” が入る
- 仮想メモリ用のページ群
- 1 ページは 4096 バイト
swapon コマンド
カーネルが指定したデバイスやファイルをスワップ領域として使用開始する。
swapon [オプション] デバイスファイル名
- -a: /etc/fstab 中でswap マークがついているデバイスをすべて有効にする
- -L [ラベル名]: 指定されたラベルのパーティションを有効にする
- -s: スワップの使用状況をデバイスごとに表示する
swapoff コマンド
カーネルが指定したデバイスやファイルのスワップ領域としての使用を停止する。
1 | swapoff [オプション] デバイスファイル名 |
- -a: /etc/fstab 中でswap マークがついているデバイスをすべて無効にする
暗号化ファイルシステム
暗号化ファイルシステムには、ブロックデバイスを暗号化してその上でファイルシステムを構築する方式と、ファイルシステム自体を暗号化する方式がある。
ファイルシステム自体を暗号化する方式
- EncFS: FUSE (Filesystem in Userspace) を利用してファイルシステム自体を暗号化する。ファイルシステム内のディレクトリを指定して FUSE ファイルシステムのマウントポイントとするディレクトリ以下が暗号化される。
- eCryptfs: 擬似ファイルシステムを利用してファイルシステム自体を暗号化する。ファイルシステム内のディレクトリを指定して擬似ファイルシステムとしてマウントすると、指定したディレクトリ以下が暗号化される。
ロックデバイスを暗号化してその上でファイルシステムを構築する方式
- loop-AES: ループバックデバイスにより、指定したファイルをブロックデバイスとして暗号化して、その上にファイルシステムを構築する。
drm-crypt
は使用しない。 - LUKS (Linux Unified Key Setup): dm-crypt (device mapper crypt) を使用してブロックデバイスを暗号化し、その上にファイルシステムを構築する。暗号化デバイスと名前をデバイスマッパーによってマッピングする。アクセス時には暗号化して格納されたマスターキーを使用して復号化を行う。
cryptsetup コマンド
LUKS およびplain dm-crypt の暗号化と管理を行う。 また、loop-AES および TrueCrypt の暗号化と管理を行う。
cryptsetup [オプション] アクション [アクションの引数]
アクションコマンド
- luksFormat: LUKS パーティションを初期化し、マスターキーの 1 番目 (slot0) のパスフレーズを設定する
- luksOpen: 暗号化デバイスと名前のマッピングを行う。名前は任意に指定可能
- luksClose: マッピングを終了し、カーネルメモリからマスターキーを消去する。ファイルシステムをアンマウント後に実行する
- luksDump: LUKS デバイスのヘッダー情報を表示する。ヘッダーには暗号化方式、UUID、スロット内のマスター機情報などが含まれる
- luksAddKey: マスターキーのパスフレーズを追加する (最大 8)
- luksRemoveKey: マスターキーのパスフレーズを削除する
- isLuks: 引数に指定したデバイスが LUKS の場合は 0 (True)、そうでない場合は 1 (False) を返す
ファイルシステムのタイプ
- LUKS: luks (デフォルト)
- plain dm-crypt: plain
- loop-AES: loopaes
- TrueCrypt: tcrypt → 2014 年 5 月にサポート終了
LUKS 構築手順
- cryptsetup luksFormat [暗号化デバイス名]
- cryptsetup luksOpen [暗号化デバイス名] [名前]
- mkfs -t ext4 [マッピング名]
- mount [マッピング名] [マウント先]
オートマウントの設定
automaunt はオートマウントを実行するデーモンである。 マスターマップ路呼ばれる設定ファイル /etc/auto.master
を参照する。
NFS や Samba サーバーのディレクトリやストレージデバイスを自動的にマウントする機能を提供し、自動でアンマウントもする。 自動マウントはユーザーがディレクトリにアクセスしたことを検知して実行する。 一定時間アクセスしない場合は自動的にアンマウントする。
オートマウントの設定手順
1. マスターマップファイルを編集
マウントポイント マップファイル [オプション]
- 直接マップ: マスターマップの第 1 フィールドでマウントポイントを指定する。
/- マップファイルの絶対パス [オプション]
- 間接マップ: マスターマップで指定したマップファイルの第 1 フィールドでマウントポイントを指定する。
ベースディレクトリ マップファイルの相対パス [オプション]
2. マスターマップファイルで指定したマップファイルを編集
キー [マウントオプション] ロケーション
直接マップの場合はキーにはマウントポイントを絶対パスで指定する。 間接マップの場合はマスターマップのマウントポイントからの相対パスで単一のディレクトリを指定する。 マウントオプションではファイルシステムタイプなどを指定可能。
3. autofs を再開
/etc/initd/autofs restart
NFS
yuko sv1:/home/yuko
Samba
yuko -fstype=cifs,username=yuko,password=pass ://sv2/yuko
コメント