数年Linuxを使用してそれなりに慣れ親しんだのですが、このへんで知識を総まとめしておいたほうが良いと考え「Linuxの基本」と題しておさらいをやっております。今更?って驚かないでほしいし、自分なりの理解を書いているので「間違い」と思われるものもあると思います。ツッコミは大歓迎しますので、よろしくおねがいします。
第1回は「Linuxのファイルシステム」を中心にしました。
1.HDDのパーティショニング、フォーマットとは
購入してきたばかりのHDDは未開拓の原野のようなもので、ここに境界を作り縄を張り、これを不動産登記簿に登記しなければなりません。これがパーティショニング(領域確保)です。
fdisk、cgdisk コマンドに /dev/sda などのドライブ名の引数を渡してやって領域を確保します。
2.Linuxのファイルシステム、ディレクトリ構造とその役割
次に、あっちはグランド、こっちは宅地などのように区画を分けて、それぞれに適した土地に仕立て上げる必要があります。
これが mkfs コマンドで、この作業を通常はフォーマットと読んでいますが、Linuxのファイルシステムを作成することです。
HDD(二次記憶装置)にはルートファイルシステムとスワップ領域が確保される必要がある
この ルートファイルシステムによって全体がツリー構造を持ったディレクトリ、ファイルで管理されている。
https://ja.wikipedia.org/wiki/Filesystem_Hierarchy_Standardを参照。
ファイルシステム | ディレクトリ | その役割 |
---|---|---|
swap | メモリ(一時記憶装置)の退避(※) | |
root file system | / | root ディレクトリ ↓その配下のディレクトリ |
bin | 基本的なコマンドの実行ファイル | |
sbin | システム管理者が利用するコマンド | |
lib | 共有ライブラリ | |
etc | システムの環境設定ファイル | |
dev | デバイスファイル | |
boot | Linuxの起動ファイル | |
proc | デバイスやプロセス情報などが参照するためのファイル | |
usr | 共有ファイル | |
home | 一般ユーザのホームディレクトリ | |
root | システム管理者(root)のホームディレクトリ | |
var | ログなど常に内容が変更するファイルなど | |
tmp | 一時ファイル。再起動で消滅。 |
ちなみにこの構成を基本としながらも、ディストリビューションによって異なっている。
ArchLinuxの場合は binやsbin、libが全て/usr/ の配下に集約されている。ユーザが基本的なコマンド、システム管理者のコマンドなどと意識しないで操作できるので、このほうが合理的に思える。
# ls -al
drwxr-xr-x 17 root root 4096 Aug 28 17:49 .
drwxr-xr-x 17 root root 4096 Aug 28 17:49 ..
lrwxrwxrwx 1 root root 7 Aug 21 23:21 bin -> usr/bin
drwxr-xr-x 4 root root 4096 Sep 21 08:36 boot
drwxr-xr-x 21 root root 3440 Sep 27 02:28 dev
drwxr-xr-x 82 root root 4096 Sep 21 08:42 etc
drwxr-xr-x 4 root root 4096 Oct 26 2017 home
lrwxrwxrwx 1 root root 7 Aug 21 23:21 lib -> usr/lib
lrwxrwxrwx 1 root root 7 Aug 21 23:21 lib64 -> usr/lib
drwx------ 2 root root 16384 Oct 26 2017 lost+found
drwxr-xr-x 2 root root 4096 Mar 27 2017 mnt
drwxr-xr-x 6 root root 4096 May 9 11:31 opt
dr-xr-xr-x 224 root root 0 Sep 27 02:28 proc
drwxr-x--- 6 root root 4096 Nov 2 2017 root
drwxr-xr-x 23 root root 640 Sep 27 02:28 run
lrwxrwxrwx 1 root root 7 Aug 21 23:21 sbin -> usr/bin
drwxr-xr-x 4 root root 4096 Oct 26 2017 srv
dr-xr-xr-x 13 root root 0 Sep 27 02:28 sys
drwxrwxrwt 14 root root 500 Sep 27 07:00 tmp
drwxr-xr-x 9 root root 4096 Sep 21 08:41 usr
drwxr-xr-x 12 root root 4096 Sep 21 08:42 var
一台のHDDの領域を分けてfile systm を構築するだけでなく、別のHDDにfile system作成することも可能。それを /homeや /var に割り当てるのが合理的だと思われる。
3.ファイルシステムの種類
(1)Linuxのファイルシステムには主に 8 種類が用意されている
通常は迷わずext4を使用すればよい。
ファイルシステム名 | その機能 |
---|---|
ext | 長いファイル名、大きなiノードに対応したローカルファイルシステム |
ext2 | extの拡張 |
ext3 | ext2の拡張。アクセスログを記録するジャーナリングなどの機能を持つ |
ext4 | ext3の拡張。最大16Tiビットのファイル、最大1Eiビットの領域をサポート |
XFS | 大規模データを効率良く扱える高性能ファイルシステム |
Btrfs | XFS以上の高信頼性なスナップショットなどの機能を持つ |
VFAT | WindowsパーティションであるFAT互換 |
LVM | 補助記憶装置の上に「論理ボリューム」と呼ばれる仮想化されたボリュームに束ねて利用するためのシステム。物理的なドライブを束ねて取り扱うことができる |
注:iノードとは、VFSの一機能で、ファイルに関する様々な上を含んでいる構造化されたデータ領域で、iノード番号やファイル名が書かれている。OSは ファイルの特定にこのiノード番号を用いる。
(2)VFS(Virtual File System)
異なったファイルシステムだけでなく、様々なデバイスへもファイルのようにアクセスできるのは、ファイルシステムやデバイスとユーザの間に介在し、「ファイルの抽象化」を担っているVFSの機能
3.mkfs、mkswap コマンドのオプション、引数
(1)mkfs -t ファイルシステムタイプ デバイスファイル名
【使用例】
# mkfs -t ext4 /dev/sdb1
注:-t オプションのあとに ext4などの引数を渡すと、mkfs.ext4コマンドが呼び出されることになるが、mkfs.ext4コマンドを直接実行することもできる。
(2)mkswap デバイスファイル名
【使用例】
# mkswap /dev/sdb2
4.マウント作業
ここまででHDDに物理的区画を決め、それにファイルシステムを作成できました。でもこれだけではまだ不十分です。生活道具や工作機械(コマンド群)を収める家や納屋(ディレクトリ)とファイルシステムを関連付ける必要があります。これをマウントという。また外付けデバイスを取り外す場合はマウントを解除しますが、これはアンマウントと呼ぶ。
(1)マウントできるのは、ext ext2 ext3 ext4 XFS Bttrfs VFATファイルシステムの他、以下のものがある
- CIFS — Windowネットワーク共有のファイルシステム
- ISO9660 — CD-ROMドライブのファイルシステム
- UDF — DVD-ROMドライブのファイルシステム
(2)mount -t マウントするファイルシステム デバイスファイル名 マウントするディレクトリ(マウントポイント)
【使用例】
CD-ROMのファイルシステムiso9660 を /media にマウント
# mount -t iso9660 /dev/cdrom /media
(3)umount マウントポイントのディレクトリ名
# umount /media
(4)swapon(swapoff) デバイス名
# swapon /dev/sdb2
# swapoff /dev/sdb2
5.マウントの自動登録
起動ごとに重要なディレクトリを手動でマウントしていたら面倒でしょうがない。そこで自動でマウントする機能が fstab ファイル。ここに記載すれば起動ごとに自動的にマウントしてくれる。
最近では、/dev/sdx 型ではなく UUID でマウントするのが通常。これだとドライブがユニークドライブ名が使われている。
$ cat /etc/fstab
# setting example
# UUID=497e6d6b-cd7c-41ad-8ba7-6085da304ca4
/dev/sda2 / ext4 rw,relatime,data=ordered 0 1
# UUID=5665-EEE9
/dev/sda1 /boot/efi vfat rw,relatime,fmask=0022,dmask=0022,codepage=437,iocharset=iso8859-1,shortname=mixed,errors=remount-ro 0 2
# UUID=5634a1d7-6abf-4a51-a2ab-36db3b43538a
/dev/sda3 none swap defaults 0 0
# 解説-----------------------------------------
# 書式は filesystem dir type option dump pass
# filesystem_ マウントしたいデバイスのファイル
# dir マウントポイント
# type マウントするシステムのタイプ
# option マウント時のオプション
# dump dumpコマンドによるバックアップ対象
[0]対象としない[0以外の数値]バックアップ対象
# pass ファイルシステムの整合性をチェック
[0]実行しない[1]ルートファイルシステムをチェック[2]その他のファイルシステムをチェック
コメント