仮想ファイルシステムについて
はじめに
Linuxには/dev, /proc, /sys, /tmpといった仮想ファイルシステムが存在します。
それぞれについての概念をまとめました。
対象者
仮想ファイルシステムの概念について知りたい人。
仮想ファイルシステムについて
OS内でファイルシステムのインターフェースを提供する抽象層であり、
統一されたインターフェースで異なるファイルシステムやデバイスへアクセスできる。
仮想ファイルシステムの具体的な実装やデータ構造は、OSのカーネル内部で保持されていて、
/proc、/sys、/dev などのディレクトリを通じて、ユーザーやアプリケーションにシステム情報やデバイスへのアクセスを提供する。
つまり、仮想ファイルシステムのおかげで
異なるファイルシステムやデバイスであっても、
簡単にアクセス可能にしてくれる。
/devについて
ハードウェアのアクセスを抽象化するデバイスファイルの格納場所で、デバイスファイルはudevという仕組みによって自動的に作成される。
すべてのハードウェアはデバイスファイルとして表され、デバイスファイルの読み書きを通してハードウェアにアクセスできるようになっている。
つまり、/devディレクトリはユーザーがデバイスにアクセスするための「入り口」のようなもの。
/devディレクトリ以下のデバイスファイルを確認
# ls /dev
autofs crash initctl null sda1 tty0 tty2 tty30 tty41 tty52 tty63 usbmon1 vcsa3
block disk input nvram sda2 tty1 tty20 tty31 tty42 tty53 tty7 usbmon2 vcsa4
bsg dm-0 kmsg oldmem sg0 tty10 tty21 tty32 tty43 tty54 tty8 vcs vcsa5
btrfs-control dm-1 log port sg1 tty11 tty22 tty33 tty44 tty55 tty9 vcs1 vcsa6
bus dri loop-control ppp shm tty12 tty23 tty34 tty45 tty56 ttyS0 vcs2 vfio
cdrom fb0 mapper ptmx snapshot tty13 tty24 tty35 tty46 tty57 ttyS1 vcs3 vga_arbiter
centos fd mcelog pts snd tty14 tty25 tty36 tty47 tty58 ttyS2 vcs4 vhci
char full mem random sr0 tty15 tty26 tty37 tty48 tty59 ttyS3 vcs5 vhost-net
console fuse mqueue raw stderr tty16 tty27 tty38 tty49 tty6 uhid vcs6 zero
core hpet net rtc stdin tty17 tty28 tty39 tty5 tty60 uinput vcsa
cpu hugepages network_latency rtc0 stdout tty18 tty29 tty4 tty50 tty61 urandom vcsa1
cpu_dma_latency hwrng network_throughput sda tty tty19 tty3 tty40 tty51 tty62 usbmon0 vcsa2
/procについて
Linuxカーネルが認識しているデバイスに関する情報の一部は、/procディレクトリ以下のファイルで確認できる。
つまり、システムやプロセスの状態をリアルタイムで参照・調整できる「情報窓口」の役割をする。
下記は/procディレクトリ以下のファイルであり、一部のファイルはテキストファイルとしてcatコマンド等で確認できる。
CPU情報
/proc/cpuinfo
# cat /proc/cpuinfo
processor : 0
vendor_id : GenuineIntel
cpu family : 6
model : 142
model name : Intel(R) Core(TM) i5-8257U CPU @ 1.40GHz
stepping : 10
cpu MHz : 1394.176
cache size : 6144 KB
physical id : 0
siblings : 1
core id : 0
cpu cores : 1
apicid : 0
initial apicid : 0
fpu : yes
fpu_exception : yes
cpuid level : 22
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx rdtscp lm constant_tsc rep_good nopl xtopology nonstop_tsc eagerfpu pni pclmulqdq monitor ssse3 cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt aes xsave avx rdrand hypervisor lahf_lm abm 3dnowprefetch invpcid_single fsgsbase bmi1 avx2 bmi2 invpcid rdseed clflushopt md_clear flush_l1d arch_capabilities
bogomips : 2788.35
clflush size : 64
cache_alignment : 64
address sizes : 39 bits physical, 48 bits virtual
power management:
ちなみに若干出力結果は異なるがlscpuコマンドでもcpu情報が確認できる。
# lscpu
アーキテクチャ: x86_64
CPU op-mode(s): 32-bit, 64-bit
Byte Order: Little Endian
CPU(s): 1
On-line CPU(s) list: 0
コアあたりのスレッド数:1
ソケットあたりのコア数:1
Socket(s): 1
NUMAノード: 1
ベンダーID: GenuineIntel
CPUファミリー: 6
モデル: 142
Model name: Intel(R) Core(TM) i5-8257U CPU @ 1.40GHz
ステッピング: 10
CPU MHz: 1394.176
BogoMIPS: 2788.35
ハイパーバイザーベンダー:KVM
仮想化タイプ: 完全仮想化
L1d キャッシュ: 32K
L1i キャッシュ: 32K
L2 キャッシュ: 256K
L3 キャッシュ: 6144K
NUMAノード 0 CPU: 0
Flags: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx rdtscp lm constant_tsc rep_good nopl xtopology nonstop_tsc eagerfpu pni pclmulqdq monitor ssse3 cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt aes xsave avx rdrand hypervisor lahf_lm abm 3dnowprefetch invpcid_single fsgsbase bmi1 avx2 bmi2 invpcid rdseed clflushopt md_clear flush_l1d arch_capabilities
IRQ情報
/proc/interrupts
I/Oアドレス情報
/proc/ioports
メモリ情報
/proc/meminfo
USBデバイス情報
/proc//bus/usb/*
PCIデバイス情報
/proc/bus/pci/*
/sysについて
カーネルオブジェクトやデバイスの情報や設定を管理するための仮想ファイルシステム。
主にデバイスドライバやカーネルサブシステムとやりとりするために使用され、
カーネルとデバイスの情報や設定を管理するためのインターフェースを提供する。
つまり、デバイスやカーネルオブジェクトの情報や設定を管理・調整するための「コントロールパネル」のようなもの。
/tmpについて
一時ファイルを格納するためにある。
データはメモリ上に保持されシステムの再起動時に消去されるため、
高速なファイルアクセスや、ディスク容量を節約することができる。
ちなみに、/var/tmpはより長期間保持される一時ファイルを格納する場所である。
つまり/tmpと/var/tmpの違いは、一時ファイルの保持期間である。
各仮想ファイルシステムについて改めて整理
-
/dev
デバイスファイルを格納し、ハードウェアへのアクセスを抽象化する「入り口」 -
/proc
カーネルやプロセスの情報をリアルタイムで提供する「情報窓口」 -
/sys
カーネルオブジェクトやデバイスの情報や設定を管理する「コントロールパネル」 -
/tmp
短期間の一時ファイルを保存し、速度とディスクスペースを最適化。再起動時に消える。 -
/var/tmp
/tmpと同様に一時ファイルを格納するが、より長期間保持される。
Discussion