12
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

デバイスとLinuxファイルシステム

Last updated at Posted at 2023-08-10

ファイルシステム管理

ファイルシステムとは、ハードディスクなど外部記憶装置のデータをファイルとして管理する仕組み。ディスク上にパーティションを作成し、パーティション内にファイルシステムを作成する。

FHS(Filesystem Hierarchy Standard)

ファイルシステム階層標準と呼ばれ標準化されている。最新バージョンは3.0

階層 説明
/bin 一般ユーザーが利用できるシステム管理に必須のコマンドを格納
/sbin システム管理者が利用する基本コマンド。基本rootユーザーのみ利用可能だが、オプションによっては一般ユーザーも利用可能
/etc システム設定ファイルや起動スクリプトファイルを格納
/dev デバイスファイルを格納
/lib 共有ライブラリファイル、カーネルモジュール(デバイスファイルなど)を格納。/bin,/sbinにあるコマンドが必要となるライブラリが配置される
/mnt マウントポイントとなるディレクトリを格納
/opt ソフトウェアのインストール先。追加でインストールしたパッケージを格納する。あまり利用されない
/boot Linuxカーネルなど起動に必要なファイルを格納
/proc カーネル情報にアクセスするための仮想ファイルシステム。起動中のプロセスやカーネルが認識しているハードウェアおよびシステムリソースなどの情報が格納されている
/root rootユーザーのホームディレクトリ
/home 一般ユーザーのホームディレクトリ
/tmp 一時ファイル置き場
/var ログファイルなど頻繁に更新されるファイル
/var/cache 一時的なキャッシュファイルを格納
/var/log ログファイルを格納
/usr システム起動時には必要とされないコマンドを格納。プログラムやソフトウェア、ライブラリなどを格納
/usr/bin 一般ユーザーコマンド(緊急時のシステム管理に必須でない)を格納
/usr/sbin システム起動時には必要とされない管理者コマンド(緊急時のシステム管理に必須でない)を格納
/usr/lib 共有ライブラリを格納
/usr/local ホスト固有で使用するプログラムや設定ファイルを格納する
/usr/local/bin 配下にブログラムを格納する
/usr/local/etc 配下に設定ファイルを格納する
/usr/share システムアーキテクチャに依存しないファイルやドキュメントを格納
/usr/src プログラムのソースコードを格納

デバイスファイル

デバイスを表すファイルのこと。デバイスファイルは/devディレクトリ以下に配置される。これらのデバイスファイルは、udevという仕組みによって自動的に作成される

Linuxカーネルが認識しているデバイスに関する情報の一部は、/procディレクトリ以下のファイルで確認できる。これらはファイルとして実体がない仮想的なファイルで、一部のファイルはテキストファイルとして閲覧可能

ファイル名 説明
/proc/cpuinfo CPU情報
/proc/interrupts IRQ情報
/proc/ioports I/Oアドレス情報
/proc/meminfo メモリ情報
/proc/bus/usb/* USBデバイス情報
/proc/bus/pci/* PCIデバイス情報

lsblk(List Block Devices)コマンド

書式:lsblk
システムのブロックデバイス一覧を表示するコマンド。

  • ブロックデバイス
    ハードディスクやSSDなどメディア上の任意の場所にアクセスできるデバイスのこと

  • キャラクタデバイス
    キーボードやシリアルポートなど文字単位でデータを読み書きできるデバイスのこと

デバイスファイルのうち、ブロック単位でデータを転送するデバイスのこと。

exFAT(Extended FAT)ファイルシステム

USBメモリのようなフラッシュドライブ向けで、マイクロソフトが開発したプロプライエタリな(私有の)ファイルシステム。「開発者によりプログラムやソースコードの利用に際して、秘密保持契約や利用料の支払いが必要などの制限がかけられている」ことを意味する。
Linuxで使用するにFUSE(Filesystem in Userspace)が必要
理論上では16EiBの大容量のファイルを扱え、最大ボリュームサイズも拡張されている

ルートファイルシステム

Linuxのディレクトリはツリー状の階層構造になっており、/ディレクトリを含むファイルシステムのこと。
/bin,/sbin,/etc,/lib,devディレクトリがシステム起動に必要となる

キャプチャ1.PNG

ファイルシステムの作成

パーティションを作成しただけではその中にファイルを保存することはできない。データを管理できるようにするにはファイルシステムを作成する必要があり、OSによって種類が異なってくる。

rootユーザーでしか書き込めない予備領域のデフォルト値はファイルシステム全体の5%。実際の使用領域が95%超えると、root権限を持つプログラム以外はディスクに書き込みが出来なくなる。

ファイルシステム 説明
ext2(extended file system2) 一昔前のLinux標準ファイルシステム
ext3 ext2を改良し機能強化したファイルシステム
ext4 ext3を改良したファイルシステムで、現在の標準ファイルシステム
XFS(Extents File System) SGI社が開発した、高速かつ堅牢なファイルシステム
Btrfs(B-tree file system) Linux向けに開発されている高速かつ多機能なファイルシステム
NTFS Windowsのファイルシステム
FAT デジカメなどでよく使われているファイルシステム
ISO9660 CD-ROMで使われているファイルシステム
UDF DVDで使われているファイルシステム

ext2,ext3,ext4はinode番号の数に制限がある。inodeはファイルシステム作成時に作成され、増やすことはできない。inode番号がなくなった場合、ディスクに空き容量があってもファイルを新規に作成できなくなる。

mkfs(make filesystem)コマンド

書式:mkfs [-t ファイルシステム] デバイスファイル名
ファイルシステムを作成するためのコマンドで、rootユーザーのみ実行可能。ファイルシステムの種類を指定する場合は「-t」で指定する。オプション指定がない場合はext2ファイルシステムが作成される

オプション 説明
-t ファイルシステムタイプ ファイルシステムの種類を指定する
-j ext3ファイルシステムを作成する
-c 実行前に不良ブロックを検査する
#ext4ファイルシステムの作成
# mkfs -t ext4 /dev/sda5

ファイルシステムの作成は「フォーマット(初期化)する」を意味しているため、実行すると記録されているデータは失われる。

mke2fsコマンド

書式:mke2fs [オプション]デバイスファイル名
ext2,ext3,ext4ファイルシステムを作成する際に使用する。デフォルトではext2を作成する。

オプション 説明
-t ファイルシステムタイプ ファイルシステムの種類を指定する
-j ext3ファイルシステムを作成する
-c 実行前に不良ブロックを検査する

mkfs.btrfsコマンド

書式:mkfs.btrfs デバイス名
Btrfsを作成するコマンド

・Btrfs(B-tree file system)とは??
Linux向けの新しいファイルシステムで、耐障害性にすぐれ、先進的な機能が取り込まれている

  • ストレージプール
    複数の物理ボリューム(パーティションやディスク)をまとめて1つの仮想的なボリュームを作成することができる

  • マルチデバイスファイルシステム
    複数の物理ボリュームにまたがってファイルシステムの作成が可能

  • スナップショットの作成

  • ファイルシステムを分割したサブボリュームの活用

mkswapコマンド

書式:mkswap デバイス名
パーティション上にスワップ領域を作成する。

・スワップ領域とは??
物理メモリが不足した際に仮想メモリ領域として利用するパーティションのこと。割り当てる容量の目安は物理メモリの1~2倍。

ディスクの利用状況の確認

df(Disk Free)コマンド

書式:df [オプション][デバイス名やディレクトリ名]
ファイルシステムの空き容量を確認するコマンド。引数なしで使用すると、マウントされているすべてのファイルシステムの使用状況を表示する

オプション 説明
-h human readableの略。容量を適当な単位で表示する(Mは1048576バイト)
-H 容量を適当な単位で表示する(Mは1000000バイト)
-k 容量をKB単位で表示する
-l iノードの使用状況を表示する

作成できるiノードの数は、ファイルシステム作成時に設定され、後から追加・変更することはできない。枯渇してしまうと、空き容量があったとしてもファイルを新規に保存することが出来なくなる。

du(Disk Usage)コマンド

書式:du [オプション][デバイス名やディレクトリ名]
ファイルやディレクトリが占めている容量を表示するコマンド。

オプション 説明
-a(--all) ディレクトリ以外にファイルについても表示する
-l リンクも含めて集計する
-c 全ての容量の合計を表示する
-k 容量をKB単位で表示する
-m 容量をMB単位で表示する
-s(--summarize) 指定したファイルやディレクトリのみの合計を表示する
-S(--separate-dirs) サブディレクトリを含めずに集計する
-h(--human-readable) 容量を読みやすい単位で表示する

ファイルシステムのチェック

ext2,ext3.ext4ファイルシステムでは、デフォルトでファイルシステム全体の5%分の領域がrootユーザー用の予約領域として確保される。一般ユーザーのプロセスがファイルシステムの領域を全て使い切ってしまっても、rootユーザーの権限で実行するsyslogdなどのプログラムがファイルシステムに書き込みできるようにする目的で使用される。

fsck(File System Check)コマンド

書式:fsck [オプション] デバイス名
ディスクのチェックを行い、必要であれば修復を試みることが出来る。チェックと修復は、ファイルシステムを破壊してしまう可能性があるので必ずアンマウントした状態で行う。

オプション 説明
-t ファイルシステム名 ファイルシステムの種類を指定する
-a 自動的に修復を実行する
-r 対話的に修復を実行する
-A /etc/fstabに記述されている全ファイルシステムに対して実行する
-N 実際には実行せず何が行われるかのみ表示する

e2fsck(Ext2 File System Check)コマンド

書式:e2fsck [オプション] デバイス名
ext2,ext3.ext4ファイルシステムのチェックと修復に使用する。

オプション 説明
-p 全ての不良ブロックを自動的に修復する
-y 問い合わせに対して自動的に「yes」と回答する
-n 問い合わせに対して自動的に「no」と回答する

tune2fs(Tune Ext2 File System)コマンド

書式:tune2fs [オプション] デバイス名
ext2,ext3.ext4ファイルシステムの様々なパラメーターを設定する

オプション 説明
-c 回数 e2fsckコマンドでファイルシステムのチェックを行うまでの最大マウント回数を指定
-i 時間[d,m,w]] e2fsckコマンドでファイルシステムのチェックを行うまでの最大時間間隔を指定。時間のみまたはdを付けると「日」、mを付けると「月」、wを付けると「週」
-j ext2をext3ファイルシステムに変換
-L ラベル名 ファイルシステムのボリュームラベルを設定

dumpe2fsコマンド

書式:dumpe2fs [オプション] デバイスファイル名
ファイルシステムの詳細情報を表示するコマンド

debugfsコマンド

書式:debugfs [オプション] デバイスファイル名
ext2,ext3.ext4ファイルシステムの状態の調査・変更を行うことが出来る。デバッグをしながら修復することが出来る。

XFS

SGI社が自社のUNIXであるIRIX用に開発した、堅固で高速なジャーナリングファイルシステム。CentOS7では標準のファイルシステムになっている。

XFSは設計上、ファイルの作成や削除を繰り返すうちにハードディスク上の連続した領域が少なくなり、データが分散されて保存される断片化(フラグメンテーション)が発生することがある。断片化が多くなるとデータの読み書きのパフォーマンスが低下するため、デフラグを行って断片化を解消する

・ジャーナリングファイルシステムとは??
ファイルシステムの操作をジャーナル(ログ)に記録する仕組みを備えたファイルシステムのこと。整合性チェックが素早く行え、障害発生時のリブート時間を短縮することが出来る

コマンド 説明
mkfs.xfs XFSファイルシステムを作成する
xfs.info XFSファイルシステムの情報を表示する
xfs_db XFSファイルシステムのデバッグを行う
xfs_check XFSファイルシステムをチェックする
xfs_admin XFSファイルシステムのパラメータを変更する
xfs_fsr XFSファイルシステムのデフラグを行う
xfs_repair XFSファイルシステムを修復する

・デフラグとは??
デフラグメンテーション(defragmentation)の略であり、ファイルの断片化(フラグメンテーション)を解消すること。断片化したデータを、可能な限り連続して配置・整理し直す。

・フラグメンテーションとは??
ハードディスクで何度もデータの読み書きや消去を繰り返すうちに、1つのファイルが連続した領域に収まらず、複数の領域に分断されていくこと

デフラグ

マウント

全体として1つのファイルシステムとして扱えるようにすること。Linuxにはドライブという概念がなく、すべてディレクトリツリーに接ぎ木して管理する。

現在マウントされているファイルシステムの情報が格納されているファイルは「/etc/mtab

キャプチャ6.PNG

/etc/fstabファイル

書式:デバイス名 マウントポイント ファイルシステムの種類 マウントオプション dumpフラグ fsckフラグ

利用するファイルシステムのマウント設定を事前に行っておく設定ファイルのこと。CD-ROM、DVDなど頻繁に利用することが予想されるデバイスについては、設定を記載することでデバイスファイル名かマウントポイントを指定するだけでマウントできるようになる。

マウントオプションに「auto」、「default」が設定されているファイルシステムはシステム起動時に自動的にマウントされる

オプション 説明
auto 「mount -a」コマンド実行時にマウント
noauto 「mount -a」コマンド実行時にマウントしない
default デフォルト指定(async,auto,dev,exec,nouser,rw,suid)
exec バイナリの実行を許可
noexec バイナリの実行を禁止
ro 読み取り専用
rw 読み書きを許可
user 一般ユーザーでもマウントを可能にする。本人のみアンマウント可
users 一般ユーザーでもマウントを可能にし、マウントしたユーザー以外のユーザーもアンマウントできるようにする
nouser 一般ユーザーのマウントを許可しないようにする
$ /dev/sda1 /boot ext3 defaults 1 1
$ /dev/sda1 /boot ext3 auto 1 1

設定項目

/etc/fstabファイルの設定項目は6つある

  • 1.デバイス名
    「/dev/sda1」のようにデバイスファイルを書くか、ラベル(あらかじめファイルシステムに対して付けておいた名前)やUUID(Universally Unique Identifier: 汎用一意識別子、全世界で重複が起きないように生成される一意な値)を使った指定を書く。
    ラベルを使う場合は LABEL=/boot」のように「LABEL=」の後ろにラベル名を書く。

  • 2.マウントポイント
    ルートファイルシステム上のどの位置にマウントするかの指定をルートからのパスで書く。

  • 3.ファイルシステムの種類
    デバイス名で指定したファイルシステムの種類を書く。

  • 4.マウントオプション
    マウントする際に必要となるオプションを書く。

  • 5.dumpフラグ
    そのファイルシステムをdumpコマンド(バックアップ用のコマンド)の対象とするかどうかを「0」か「1」で書く。「0」では対象外となり、「1」では対象となる

  • 6.fsckフラグ
    起動時に自動的に行われるfsck(ファイルシステムチェック)の優先度を数字で書く。数字が小さいものから順にチェックされるが、0は例外で、チェックを省く指定になる。

最近のディストリビューションはシステムによって自動的に処理されており、手動での書き換えは好ましくない場合がある。

mountコマンド

書式:mount [オプション] [マウントするデバイス名] マウントポイント
マウントを実行するためのコマンド。マウントポイントとはデバイスを接続するディレクトリのことで、任意のディレクトリで問題ない。
一般ユーザーによるファイルシステムのマウントは禁止されているが、現在のマウントされているファイルシステムの一覧が表示される。

/proc/self/mounts/etc/mtab/proc/mountsファイルを参照し全てのファイルシステムを表示することも出来る

オプション 説明
-a(--all) /etc/fstabに記述されているファイルシステムを全てマウントする(noautoオプションがついているものを除く)
-t(--types) ファイルシステム名 ファイルシステムの種類を指定する
-o(--options) マウントオプションを指定する
--bind 元のディレクトリを行先のディレクトリにマウントする 
-r ファイルシステムを読み取り専用でマウントする 
-w ファイルシステムを読み書き可能なモードでマウントする 
#/dev/sr0として認識されているCD-ROMドライブを/mnt/cdromにマウントする
$ mount /dev/sr0 /mnt/cdrom
$ mount -t iso9660 /dev/sr0 /mnt/cdrom

#ログディレクトリ「/var/log」をrootユーザのホームディレクトリ配下の「/root/systemlogs」にマウント
# mount --bind /var/log /root/systemlogs

標準的なCD-ROMのファイルシステムタイプは「iso9660」だが、-tオプションで種類を指定しない場合は自動で判別される

/etc/fstabファイルにあらかじめCD-ROMドライブのエントリが記述されている「デバイス名」か「マウントポイント」のどちらか片方だけ指定すれば、もう片方は参照され自動的に決定される

umountコマンド

書式:umount [オプション] マウントされているデバイス名またはマウントポイント
ファイルシステムをアンマウントする。

オプション 説明
-a /etc/mtabに記述されているファイルシステムを全てアンマウントする(noautoオプションがついているものを除く)
-t ファイルシステム名 指定した種類のファイルシステムだけをアンマウントする

ファイルシステムにあるファイルが操作中の場合や、ユーザがファイルシステム内で操作をしている場合、そのファイルシステムはアンマウントできない

ファイルの配置と検索

findコマンド

書式:find [検索起点ディレクトリ][検索式][アクション]
ファイル名だけではなく、様々な条件を指定して、リアルタイムでファイルを検索できる。

検索式 説明
-name ファイル名で検索
-size ファイルサイズで検索
-atime ファイルの最終アクセス日で検索
-amin ファイルの最終アクセス時刻を〇分前で検索
-mtime ファイルの最終修正日で検索
-mmin ファイルの最終更新時刻を〇分前で検索
-uid ファイルの所有者のユーザーIDを指定
-user ファイルの所有者のユーザー名またはユーザーIDを指定
-perm ファイルのアクセス権で検索
-type ファイルの種類で検索(f:ファイル、d:ディレクトリ、l:シンボリックリンク)
-maxdepth 検索したいディレクトリ以下の階層数を指定できる
-print パス付のファイル名を標準出力する。省略可能
アクション 説明
-print 検索結果を開業で区切って表示(デフォルト)
-print0 検索結果をNULL文字で区切って表示
-exec コマンド名 {} ¥; 検索結果のファイルに対してコマンドを実行
#ファイル名が「c」から始まるファイル検索
$ find /usr/bin -name "c*"

#複数の検索条件を指定
$ find -size -10k -atime -1

#アクセス権が755のディレクトリを検索
$ find . -type d -perm 755

locateコマンド

書式:locate 検索パターン
ファイルなどを名前で検索することができる。「*」「?」などのメタキャラクタも使用可能で、その際は引用符で囲む必要がある。

作成済みのファイル名データベースを使って検索をしているため、更新後に作成されたファイルを検索することは出来ない。
updatedbコマンドを実行しファイル名データベースを更新することが解消できる。これはrootユーザーのみが実行できる

updatedbコマンド

書式:updatedb [オプション]
locateコマンドが利用する検索用のデータベースを更新するためのコマンド。
/etc/updatedb.confファイルでは、データベースに登録しない(locateコマンドでの検索対象外とする)ディレクトリの設定などを行うことが可能

オプション 説明
-e データベースのファイルの一覧に取り込まないディレクトリパスを指定する
-o 更新対象のデータベースを指定する。独自に作成したデータベースを指定したい場合に利用

whichコマンド

書式: which コマンド名
コマンドを探し出して絶対パスを表示するコマンド。環境変数PATHに基づいて検索を行うため、一般ユーザーが管理者用のコマンドを検索することはできない。

指定したコマンドが格納されている場所のみを検索する
PATH環境変数に指定されたディレクトリ以外の検索は、findコマンドを使用する。

whereisコマンド

書式:whereis [オプション] コマンド
指定されたコマンドのバイナリファイル、ソースコード、マニュアルファイルが置かれている場所を検索し、絶対パスで表示する

オプション 説明
-b バイナリファイルのみ検索する
-m マニュアルファイルのみ検索する
-s ソースファイルのみ検索する

typeコマンド

書式:type コマンド
指定したコマンドが通常の実行ファイルなのか、シェルの組み込みコマンドなのか、エイリアスなのかといった情報を表示する

headコマンド

書式: head [オプション] [ファイル名]
ファイルの先頭部分を表示する。オプションしていない場合は先頭から10行目までを表示する

オプション 説明
-n 行数 指定した行数をファイルの先頭から表示
-c バイト数 指定したバイト数をファイルの先頭から表示

statコマンド

ファイルやファイルシステムのinode番号やタイムスタンプ(アクセス時刻や修正時刻)などの詳細情報を表示できるコマンド。

tailコマンド

書式:tail [オプション] ファイル名
指定したファイルの末尾部分を表示するコマンド

オプション 説明
-n 行数 指定した行数のファイルの末尾から表示。-nは省略可能
-c バイト数 指定したバイト数をファイルの末尾から表示
-f ファイルの末尾に追加された行を表示し続ける
12
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?