ファイルシステムとはファイルとしてデータを扱う仕組みだ。
このページでは、Linuxのファイルシステムの作成方法について一通りまとめている。
実際の運用でファイルシステムを変更するような機会はなかなかないと思うが、LPICの出題範囲でもあるし、Linuxの理解を深めるという意味でも、概要は掴んでおきたい。
目次
そもそもファイルシステムとは?
ファイルシステム
OSの基本機能の一つだ。ファイルシステムは「ファイルをとり扱うための枠組みと方法」を指す。
ファイルシステムがないと、データを読み出すときにも「192588セクタと192589セクタのデータを取り出す」といったよくわからない指示をしなければならない。
セクタとはディスクの区画のことで、コンピュータはデータを取り出すときこれを見に行っている。しかし、数字での管理は人間にとってとてもわかりにくい。
ファイルシステムを使うと、「/etc/test.txtファイルを開く」などのように人間でもわかりやすく使えるようになる。
どのような情報が取り扱うか?
ファイルシステムによって、変わってくるが次のような情報を取り扱う。
- 「最大どの程度の容量を扱うことができるのか?」「ファイルの大きさはいくつまでなのか?」といった「スケーラビリティ」
- 「どういった情報を保持しているのか?」「システムの整合性を保つジャーナリングという機能は実装されているのか?」などの「ジャーナルによる整合性」
- さらにファイルシステムによっては、「大きなファイルを扱うのが得意」、「ちいさなファイルを扱うのが得意」など「パフォーマンス」
昨今では主流なファイルシステムには、充分なスケーラビリティとジャーナルな機構がそなわっている。
ジャーナルに対応していないファイルシステムの場合、不意に異常終了したときにファイルシステムが破損し、データにアクセスできなくなる可能性が大きい。一応の復旧措置はあるものの非常に時間がかかる。そのため特別な理由がないかぎりジャーナルなファイルシステムを使うようにしよう。
ファイルシステムの種類
普段はあまり意識することはないのだが、ファイルシステムにも種類がある。
後ほど紹介していくが、今は「ext4」がlinuxのファイルシステムとしてはデファクトスタンダードとなっている。
また、linuxでは「VFS」という仕組みをつかってファイルシステムの違いを吸収する仕組みがある。
そのためユーザはファイルシステムの違いを意識せずに、システムとファイルのやりとりが可能となっている。
ext2
初期段階のlinuxシステムで使用されていた。「second extended filesystem」の略だ。
限界ファイルサイズ2TiB、最大容量(ボリュームサイズ)16TiB、ジャーナルには非対応となっているので、使うのは避けたほうがいい。
rootのために一部容量を予約しているので限界まで容量をつかいきってもrootでのメンテナンスが可能となっている。ジャーナルに非対応なため、一度クラッシュすると復旧に時間がかかる、このファイルシステムは旧式なので「ext4」の使用をおすすめする。
ext3
「third extended file system」の略だ、ext2との高い互換性があり、ext2をext3に変換することも可能だ。大きな変更点としてはジャーナルが追加されているところだろう。
ext4
「fourth extended file system」の略である。ext3の拡張であり、現在のlinuxファイルシステムのデファクトスタンダードだ。
最大ファイルサイズは16TiBと拡張され、最大ボリューム サイズも1EiBとなっている。また日付範囲も1901年12月14日から2514年4月25日までと拡張されている、下位互換もたもたれており、ext3としてマウントすることも可能だ。
JFS
このファイルシステムは「Journaled File System」の略であり、IBMが自社の商用UNIXであるAIXに採用したファイルシステムだ。
ジャーナルなファイルシステムとしては最古の部類に入る。このファイルシステムは既存ファイルシステムを拡張、機能追加するのではなく、ジャーナルを前提として新しく設計されたファイルシステムだ。
最大ファイルサイズは4PiB、最大容量(ボリュームサイズ)は32PiBとなっている、高負荷時にも一定のパフォーマンスを維持できる。信頼性は高いが、ディストリビューションのデフォルト設定ではext4が選択されていることが殆どだ。
XFS
XFSはSilicon Graphics Incで設計されたファイルシステムでRHEL7ではデフォルトのファイルシステムとなっている。こちらも最古のジャーナリングファイルシステムの一つだ。
マウントした状態でのデフラグなどの操作が可能となっている。最大ファイル サイズ8EiB、最大ボリューム サイズ8EiBである。XFSは当初からハイエンドシステム向に開発されたためスケーラビリティの面においてext4を圧倒している。RHELがデフォルトでXFSを採用したのはそういった理由もあるだろう。
Fat
「File Allocation Table」の略でWindows95やWindowsNTなどで使用されているファイルシステムのひとつだ。
非常に古典的なファイルシステムなためジャーナルには非対応でスケーラビリティも貧弱である。またLinuxからの属性情報をひきつげないため、パーミッション情報などが、失われる。
容量の小さなUSBメモリを扱うのが限界だ。しかし逆に超古典的なために、大概のOSで読み書きが可能となっている。最大ファイルサイズは4GiB最大容量(ボリュームサイズ)も 4GiBとなる。
Fat32
Fat32はFatの32Bit版である。これにより、扱えるボリュームサイズが大きくなっている。そのためFatと比べ外付けのHDDなどをフォーマットして使うパターンが多いだろう。
しかしジャーナルなファイルシステムではないので、こちらも障害耐性が低い。こちらも古典的なものなので大概のOSで読み書きが可能となっている。
実際にファイルシステムを作成してみる
紹介が長くなってしまったが、実際にやってみよう。今回は最もメジャーな「Ext4」と「XFS」を使うことにする。
デバイスの認識を確認
今回はUSBメモリを「フォーマット」し「マウント」してみる。GUIでもCUIでもやることはほぼ変わらない。まずはUSBメモリを差し込んで、結線する。
そうしたら、「dmesg」コマンドでデバイスの認識を確認する。
# dmesg
パーティションの設定
パーティションとは、いくつかに区切ったディスクの領域だ。Linuxでは、一般的に1つのディスクをいくつかの領域に分けて扱うようになっている。ひとつの場所が壊れたときにディスクのデータをすべて壊すのではなく、領域を限定するためだ。
「fdisk」コマンドでパーティションは設定できる。
ここから先はパーティション情報を操作するため、間違えると取り返しがつかないことが多い。気をつけて作業していただきたい。大事な環境ではなくVirtualBoxで別に環境を用意して操作を続けることをオススメする。
fdiskコマンドはパーティションを操作するための代表的なコマンドだ。パーティションの作成、削除、変更、情報表示などを行う。次のように叩いてみよう。
# fdisk /dev/sdb
fdiskが起動する。実行モードになって、対話的にパーティションの作成や削除などができるようになる。
「p」で現在の状態を確認する。Windowsのパーティションが存在しているのがわかる。今回はそれを「d」で削除、再度状態を「p」で確認する。パーティション削除されていることがわかる。
「n」で新しいパーティションを作成、ディスクを丸ごと使うのでガイドのいうとおりエンターを押してゆく「p」で状況を確認、パーティションが作成されたことを確認。
「w」で変更を書き込む。
フォーマット
今回は「sdb1」として認識された、認識されたデバイスをフォーマットする。
ここから先はデバイスにフォーマットをかけるのでデバイスの番号などを間違えるとデータを損失してしまうので慎重に作業すること。また、上でもお伝えしたが、勉強という意味ではVirtualBoxなどで環境を作って実施することをオススメする。失敗しても影響を出さないためだ。
mkfsコマンドを使う。mkfsコマンドはパーティション上にファイルシステムを作成するためのコマンドだ。
ext4の場合は
# mkfs.ext4 /dev/sdb1
XFSの場合は
# mkfs.xfs /dev/sdb1
今回は一回フォーマット済みの媒体を再フォーマットしようとしたため警告が出た。そのため「-f」オプションを使用した。するとフォーマットが完了する。
マウント
続いてマウントしよう。
# mount /dev/sdb1 <dir_path>
今回は<dir_path>を/mntとしてみる
# mount /dev/sdb1 /mnt
$ df -T
とするとマウントされた位置とファイルシステムのタイプが表示される。
usbメモリなどをマウントしたら、抜くまえに、かならず「umount」すること、umountせずに引き抜くと、ファイルシステムの破損につながる。
umountするときはマウントした場所、つまりマウントポイントを指定する。今回は「/mnt」となる。
# umount /mnt/
整合性の検査
CentOSでは主にext4かxfsが使われる。
ファイルシステムの整合性をチェックするときはext4の場合「fsck.ext4」 、xfsの場合「xfs_repair」を利用する。ファイルシステムの検査は基本的にマウントする前に実行することが前提となっている。
つまりデバイスファイルを指定するext4の場合、次のようになる。
# fsck.ext4 -y /dev/sdb1
マウント先ではないので注意していただきたい。「-y」オプションは対話的な処理に対してすべて「yes」と答えるオプションだ。
xfsの場合
# xfs_repair /dev/sdb1
となる。
シングルユーザモードでの起動
USBデバイスなどの場合、システムが通常起動している状態でumountが可能だが、「/」パーティションなどは安易にumountできない。なので、シングルユーザモードで起動する。
シングルユーザモードとは、rootユーザだけがログインできる状態だ。ランレベル1の状態である。
ここで「e」を押す。
ここで「ststemd.unit=rescue.target」を追加する。
そして「Control+x」を押すと「シングルユーザモード」で起動する。
「rootのパスワード」を打ち込み
のちに
# mount -o ro,remount /
# fsck.ext4 -y /dev/sda?
として「/」 を読み取り専用で再マウントし fsckをかけることになる。
(?にはデバイス番号が入る各自の環境に合わせること。基本的に/bootをパーティショニングしていない場合sda1となることが多い)
まとめ
以上で、ファイルシステムの作成が完了する。
なかなか実施する機会はないと思うが、ファイルシステムには種類があって、どのような手順で作成を進めていくかは知っておいた方がいい。
ぜひこの機会に、流れを掴んでいただければと思う。
コメント