Linux標準教科書 第12章
ファイル管理
12.1 Linux のファイル管理
Linux のファイル管理にはハードディスクとファイルシステムとディレクトリ構造の知識が必要です。
12.1.1 ファイルシステムとは
ファイルシステムとは、ファイル名・更新日付などの属性データ・ファイルデータ本体を効率よく管理するための仕組みです。ファイルシステムにはいくつかの種類があり、利用するファイルシステムにより、ファイルをアクセスした時に得られる効率や安全性が変わります。
12.1.2 パーティションとは
ハードディスクを利用するために、ハードディスクを区切った単位です。ディスクの内部を複数のパーティション(領域)に区切る作業が必要になります。
12.1.3 Linux のディレクトリ構造
ファイル管理の効率化を図るために、多くのファイルシステムと同様に xe3 ファイルシステムでも、ディレクトリという入れ物が用意されています。Linux システムは FHS と呼ばれる規格に基づいてディレクトリの構成が定められています。
/ ディレクトリ
大元になるディレクトリで 「 / 」ルートと読み / ディレクトリをルートディレクトリと読みます。
マウント
ディスク(ハードディスクをはじめとしてDVD-ROM ドライブや RAM ディスクなど)を利用するためには1つ目を / ディレクトリに必ずマウント(紐付け)します。複数のディスクを利用する場合は、2つ目以降のディスクをすでにマウントされているディスクの中のディレクトリにマウントします。
12.1.4 ファイルシステムの作成方法
ハードディスクを利用するには以下の手順で作成して利用できます。
・パーティションの作成 ・・・ fdisk コマンド
・ファイルシステムの作成 ・・・mkfs コマンド
・マウント ・・・ mount コマンド
多くのシステム管理用コマンドは root ユーザで(管理者になってから)実行する必要があります。
12.2 ディスクのパーティション
fdisk コマンドで、分割されたパーティションの情報を調べたり、パーティションを作成、削除したりできます。
12.2.1 パーティションを分割する理由
・システムとデータのバックアップ頻度を差別化する
・障害発生時の影響範囲を狭める
・ファイルアクセスの速度向上
実習: ハードディスクのパーティション情報の表示
# fdisk -l
Disk /dev/sda: 10.6 GB, 10632560640 bytes, 20766720 sectors
ディスク領域
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト
(略)
デバイス ブート 始点 終点 ブロック Id システム
/dev/sda1 * 2048 1026047 512000 83 Linux
/dev/sda2 1026048 20766719 9870336 8e Linux LVM
(2つのデバイス情報が表示される)
12.2.2 パーティションの分割
ハードディスクは、1つのパーティションとして使うか、2〜4つまでのパーティションに分割できます。各パーティションは、基本パーティションまたは拡張パーティションとなります。拡張パーティションは1台のハードディスクに1つだけ作ることができ、拡張パーティションの中には、さらに論理パーティションを複数作ることができます。
パーティション分割の例
・基本パーティションを4つ
・基本パーティションを3つ+拡張パーティションを1つ(論理パーティションを2つ)
・論理パーティションは、基本パーティションと同様にファイルシステムを作成して、ファイルやディレクトリを保管できます。拡張パーティションは、論理パーティションを格納する役割となっており、ファイルシステムを作成することはできません。
パーティションの最大数
・IDE:63 (基本3+論理60)
・SATA:15 (基本3+論理12)
・SCSI:15 (基本3+論理12)
12.2.3 ハードディスクを増設して利用可能にする
Linux マシンにハードディスクを増設して利用可能な状態にします。新しいハードディスクには、データ用の領域と、スワップ領域( Linux がメモリの代わりにプログラムを置いておく領域)の2つを作成します。fdisk コマンドでパーティションを2つに分割します。パーティションは分割した後からサイズの変更が難しいので、あらかじめどのようにパーティションを分割するのか計画してから行います。
ハードディスクを利用するまでの手順
・増設前のディバイス構成の確認
・ハードディスクを増設
・増設後のディバイス構成の確認
・パーティション情報の確認
・パーティションの作成
・パーティションの種類の変更
・パーティション情報の保存
・再起動(警告が表示されて、必要な場合)
・ファイルシステムの作成
・マウント
・スワップパーティションの作成
・スワップの追加
・自動マウントの設定
実習: 増設前のディバイス構成の確認
$ ls -l /dev/sd*
brw-rw—- 1 root disk 8, 0 12月 22 06:26 /dev/sda
brw-rw—- 1 root disk 8, 1 12月 22 06:26 /dev/sda1
brw-rw—- 1 root disk 8, 2 12月 22 06:26 /dev/sda2
/dev ディレクトリは Linux が認識するすべてのデバイスが置かれています。このうち hd* もしくは sd* のような名前が付いているデバイスがハードディスクドライブになります。数字なしのデバイスはディスク自体を示しています。sdaには2つのパーティションが存在していることがわかります。
実習: ハードディスクを増設
CentOS をシャットダウンして、新しいハードディスクを増設します。VirtualBox の仮想システムの増設を使用しての内容はこちらです。物理システムを使用する場合はHDを購入ください。ハードディスクは増設しただけでは利用できません。以下の作業を行います。
・fdisk でパーティションを設定
・Physical Volume の作成
・mkfs コマンドを実行してディスクを作成
・マウントおよび自動マウントの設定
実習: 増設後のディバイス構成の確認
# ls -l /dev/sd*
brw-rw—- 1 root disk 8, 0 12月 28 01:22 /dev/sda
brw-rw—- 1 root disk 8, 1 12月 28 01:22 /dev/sda1
brw-rw—- 1 root disk 8, 2 12月 28 01:22 /dev/sda2
brw-rw—- 1 root disk 8, 16 12月 28 01:22 /dev/sdb
/dev/sdb として追加・認識されました。sdb には1つのパーティションが存在することがわかります。
実習: パーティション情報の確認
# fdisk /dev/sdb
コマンド (m でヘルプ): p
現在のパーティション情報を表示
Disk /dev/sdb: 2147 MB, 2147483648 bytes, 4194304 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト
Disk label type: dos
ディスク識別子: 0x77ac06d4
(分割されていない状態で何も表示されない)
デバイス ブート 始点 終点 ブロック Id システム
実習: パーティションの作成
# fdisk /dev/sdb
コマンド (m でヘルプ): m
コマンドの動作
a ブート可能フラグをつける
b bad ディスクラベルをつける
c dos 互換フラグをつける
d 領域を削除する
g 既知の領域タイプをリスト表示する
m このメニューを表示する
n 新たに領域を作成する
o 新たに空の DOS 領域テーブルを作成する
p 領域テーブルを表示する
q 変更を保存せずに終了する
s 空の Sun ディスクラベルを作成する
t 領域のシステム id を変更する
u 表示/項目ユニットを変更する
v 領域テーブルを照合する
w テーブルをディスクに書き込み、終了する
x 特別な機能(エキスパート専用)
(新しいパーティショ領域の確保)
コマンド (m でヘルプ): n
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p): p
パーティション番号 (1-4, default 1): 1 (エンターデでも可)
最初 sector (2048-4194303, 初期値 2048): (エンターデでも可)
初期値 2048 を使います可
Last sector, +sectors or +size{K,M,G} (2048-4194303, 初期値 4194303): +1024M
Partition 1 of type Linux and of size 1 GiB is set
(2つ目のパーティショ領域の確保)
コマンド (m でヘルプ): n
Partition type:
p primary (1 primary, 0 extended, 3 free)
e extended
Select (default p): p
パーティション番号 (2-4, default 2): 2 (エンターでも可)
最初 sector (2099200-4194303, 初期値 2099200): (エンターデでも可)
初期値 2099200 を使います
Last sector, +sectors or +size{K,M,G} (2099200-4194303, 初期値 4194303): +512M
Partition 2 of type Linux and of size 512 MiB is set
コマンド (m でヘルプ): p
(pで作った領域が見れる)
Disk /dev/sdb: 2147 MB, 2147483648 bytes, 4194304 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト
Disk label type: dos
ディスク識別子: 0x77ac06d4
(確保したパーティションリストの表示)
デバイス ブート 始点 終点 ブロック Id システム
/dev/sdb1 2048 2099199 1048576 83 Linux
/dev/sdb2 2099200 3147775 524288 83 Linux
シリンダを指定する箇所が2箇所あります。パーティションの分割は途中を空けないで連続して指定するので、最初のシリンダの数はデフォルトのシリンダ数をそのまま使えます。終点シリンダの数の代わりに + をつけたサイズを指定できます。シリンダ数を計算して指定するなどの面倒な作業が必要ないので、ここではシリンダ数に関して考慮する必要がありません。
実習: パーティションの種類の変更
# fdisk /dev/sdb
コマンド (m でヘルプ): t
パーティション番号 (1,2, default 2): 2
Hex code (type L to list all codes): L
(Lでリスト表示)
0 空 24 NEC DOS 81 Minix / 古い Li bf Solaris
1 FAT12 27 Hidden NTFS Win 82 Linux スワップ c1 DRDOS/sec (FAT-
2 XENIX root 39 Plan 9 83 Linux c4 DRDOS/sec (FAT-
3 XENIX usr 3c PartitionMagic 84 OS/2 隠し C: ド c6 DRDOS/sec (FAT-
4 FAT16 <32M 40 Venix 80286 85 Linux 拡張領域 c7 Syrinx
5 拡張領域 41 PPC PReP Boot 86 NTFS ボリューム da 非 FS データ
6 FAT16 42 SFS 87 NTFS ボリューム db CP/M / CTOS / .
7 HPFS/NTFS/exFAT 4d QNX4.x 88 Linux プレーン de Dell ユーティリ
8 AIX 4e QNX4.x 2nd part 8e Linux LVM df BootIt
9 AIX ブート可能 4f QNX4.x 3rd part 93 Amoeba e1 DOS access
a OS/2 ブートマネ 50 OnTrack DM 94 Amoeba BBT e3 DOS R/O
b W95 FAT32 51 OnTrack DM6 Aux 9f BSD/OS e4 SpeedStor
c W95 FAT32 (LBA) 52 CP/M a0 IBM Thinkpad ハ eb BeOS fs
e W95 FAT16 (LBA) 53 OnTrack DM6 Aux a5 FreeBSD ee GPT
f W95 拡張領域 (L 54 OnTrackDM6 a6 OpenBSD ef EFI (FAT-12/16/
10 OPUS 55 EZ-Drive a7 NeXTSTEP f0 Linux/PA-RISC
11 隠し FAT12 56 Golden Bow a8 Darwin UFS f1 SpeedStor
12 Compaq 診断 5c Priam Edisk a9 NetBSD f4 SpeedStor
14 隠しFAT16<32M 61 SpeedStor ab Darwin ブート f2 DOS セカンダリ
16 隠し FAT16 63 GNU HURD または af HFS / HFS+ fb VMware VMFS
17 隠し HPFS/NTFS 64 Novell Netware b7 BSDI fs fc VMware VMKCORE
18 AST SmartSleep 65 Novell Netware b8 BSDI スワップ fd Linux raid 自動
1b 隠し W95 FAT32 70 DiskSecure Mult bb 隠し Boot Wizar fe LANstep
1c 隠し W95 FAT32 75 PC/IX be Solaris ブート ff BBT
1e 隠し W95 FAT16 80 古い Minix
Hex code (type L to list all codes): 82
Changed type of partition ‘Linux’ to ‘Linux swap / Solaris’
コマンド (m でヘルプ): p
(pで確認)
Disk /dev/sdb: 2147 MB, 2147483648 bytes, 4194304 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト
Disk label type: dos
ディスク識別子: 0x77ac06d4
(82スワップ領域が確保された)
デバイス ブート 始点 終点 ブロック Id システム
/dev/sdb1 2048 2099199 1048576 83 Linux
/dev/sdb2 2099200 3147775 524288 82 Linux swap / Solaris
実習: パーティションの種類の保存
パーティションの変更を破棄したい場合には q コマンドで終わらせます。
コマンド (m でヘルプ): w
パーティションテーブルは変更されました!
(wでハードディスクパーティションの情報を書き込む)
ioctl() を呼び出してパーティションテーブルを再読込みします。
ディスクを同期しています。
12.3 ファイルシステム
ファイルシステムとは、ディレクトリやファイルの情報やデータをディスクのどこに保存してあるか管理するためのシステム(仕組)です。ファイルシステムはディレクトリやファイルのファイル名やファイルの作成時間やファイルの所有権限などの情報も管理してしています。
12.3.1 ジャーナリング機能
ジャーナリングとは、ファイルシステムに対する書き換え処理のコマンドをファイルシステムに逐一記録する機能です。ジャーナリング機能は、コンピュータが急停止するなどの障害時に有効となります。コンピュータが急停止し、ファイルのデータがファイルシステムに書き込み途中である場合、処理されていないコマンドを対処します。
12.3.2 マウント状態の表示
df コマンドで現在マウントされているファイルシステムのリストを表示できます。
実習: ハードディスクの確認
# df -h
ファイルシス サイズ 使用 残り 使用% マウント位置
/dev/mapper/centos-root 8.4G 1.1G 7.3G 13% /
devtmpfs 488M 0 488M 0% /dev
tmpfs 497M 0 497M 0% /dev/shm
tmpfs 497M 6.5M 491M 2% /run
tmpfs 497M 0 497M 0% /sys/fs/cgroup
/dev/sda1 497M 118M 379M 24% /boot
none 931G 244G 688G 27% /vagrant
12.3.3 ファイルシステムの作成
ハードディスクを利用するためには、パーティションに分割した後ファイルシステムを作成します。ファイルシステムの作成には、mkfs コマンドを使用します。
オプション
-t 作成するファイルシステムの種類を指定する。
-c ハードディスクの壊れている箇所を検出して、利用しない
実習: ハードディスクの作成
# mkfs -t ext3 -c /dev/sdb1
mke2fs 1.42.9 (28-Dec-2013)
Filesystem label= ハードディスクのラベル
OS type: Linux
Block size=4096 (log=2) ハードディスクのパーティションのサイズ
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
65536 inodes, 262144 blocks
13107 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=268435456
8 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376
Checking for bad blocks (read-only test): done
Allocating group tables: done
Writing inode tables: done
Creating journal (8192 blocks): done
Writing superblocks and filesystem accounting information: done
同じ意味のコマンドです。
# mkfs.ext3 /dev/sdb1
# blkid /dev/sdb1
/dev/sdb1: UUID=”2e83f8a7-ec0f-4a3e-b36b-7f1958a9b60d” SEC_TYPE=”ext2″ TYPE=”ext3″
(ファイルシステムの内容がわかるコマンド)
12.3.4 ラベル
ラベルとは、ハードディスクなどのパーティションを認識するための名前です。基本パーティションや論理パーティションにファイルシステムを作るときにラベルを指定するか、または e2label コマンドでラベルを付けられます。
実習: e2label コマンドでハードのラベル名を変更例
# e2label /dev/sdb2
opt
(/dev/sdb2 のラベルを表示)
# e2label /dev/sdb2 opt1
(/dev/sdb2 のラベル opt1 に変更)
12.4 マウント
ハードディスクはパーティション分割してファイルシステムお作ってからマウントすると読み書きできます。
12.4.1 マウントポイント
ハードディスクや CD-ROM などを利用する場合は、存在しているディレクトリにマウントする必要があり、マウントするために利用するディレクトリをマウントポイントと呼びます。 / として利用されるファイルシステムは / にマウントしており、後から利用するファイルシステムも、必ずどこかのディレクトリにマウントして初めて利用できます。
12.4.2 マウント( mount コマンド )
書式 mount -t (タイプ) -o (オプション)
# mount -t ext3 -o defaults /dev/sdb1 /opt
# ls /opt
lost+found
# df -h
ファイルシス サイズ 使用 残り 使用% マウント位置
(略)
devtmpfs 488M 0 488M 0% /dev
tmpfs 497M 0 497M 0% /dev/shm
tmpfs 497M 6.5M 491M 2% /run
tmpfs 497M 0 497M 0% /sys/fs/cgroup
/dev/sda1 497M 118M 379M 24% /boot
none 931G 241G 691G 26% /vagrant
/dev/sdb1 976M 1.3M 924M 1% /opt
12.4.3 アンマウント( umount コマンド )
実習: ハードディスクのパーティションのアンマウント
# umount /opt
# df -h
ファイルシス サイズ 使用 残り 使用% マウント位置
devtmpfs 488M 0 488M 0% /dev
tmpfs 497M 0 497M 0% /dev/shm
tmpfs 497M 6.5M 491M 2% /run
tmpfs 497M 0 497M 0% /sys/fs/cgroup
/dev/sda1 497M 118M 379M 24% /boot
none 931G 241G 691G 26% /vagrant
# ls /opt
(アンマウントを確認)
12.5 スワップ領域の作成
Linux のカーネルと呼ばれる根幹のプログラムは、ハードディスクからプログラムやデータをメモリ領域へ読み込んで実行します。プログラムやデータを新たに読み込むための空きメモリ領域がなくなると、Linux のカーネルは今使用していないメモリ上のプログラムやデータをスワップ領域へ一時的に退避します。スワップパーティションとは Linux のカーネルシステムがメモリの代わりとして一時的に使うハードディスクのパーティション領域です。
12.5.1 スワップファイルシステムの作成
スワップするためのパーティション確保と、ファイルシステムの作成は、インストールする時や新しくハードディスクを増設する時に実行します。スワップ領域(スワップパーティション)を作るには mkswap コマンドを使います。
12.5.2 スワップの領域作成と利用
スワップ領域は作成した後に swapon コマンドを実行すると有効化できるようになります。
利用中のスワップ領域は swapoff コマンドで無効化できます。
実習: スワップ領域を作成して有効化
# fdisk -l
(ハードディスクのパーティションを表示)
Disk /dev/sdb: 2147 MB, 2147483648 bytes, 4194304 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト
(略)
デバイス ブート 始点 終点 ブロック Id システム
/dev/sdb1 2048 2099199 1048576 83 Linux
/dev/sdb2 2099200 3147775 524288 82 Linux swap / Solaris
# swapon -s
Filename Type Size Used Priority
/dev/dm-1 partition 1040380 0 -1
(利用しているスワップ領域を表示)
# mkswap -c /dev/sdb2
0 bad pages
スワップ空間バージョン1を設定します、サイズ = 524284 KiB
ラベルはありません, UUID=7a08df66-d9bd-428e-8699-66c9b53710fd
(スワップ領域の作成)
# swapon /dev/sdb2
# swapon -s
Filename Type Size Used Priority
/dev/dm-1 partition 1040380 0 -1
/dev/sdb2 partition 524284 0 -2
(スワップ領域の有効化)
実習: スワップ領域を無効化
# swapoff -v /dev/sdb2
swapoff /dev/sdb2
# swapon -s
Filename Type Size Used Priority
/dev/dm-1 partition 1040380 0 -1
12.6 自動マウント
インストール時に作られたパーティションは、コンピュータの起動時に自動的にマウントされます。これは /etc/fstab というパスにある設定ファイルです。自動マウントには mount コマンドが使われます。増設したハードディスクを自動マウントするために、 /etc/fstab ファイルを変更してください。/etc/fstab ファイルに記述されるのは下記の通りです。
①ブロックスペシャルデバイス(パーティショニングされた領域)
②マウントポイント
③ファイルシステムのタイプ( ext3,swap など)
④オプション(カンマで区切る)
⑤dump コマンドがダンプ(バックアップ)するか否か( 0・・ダンプ不要、1・・ダンプ )
⑥ブート時にチェックする順番
実習: 新しく作ったパーティションの自動マウント
# df -h
# cp /etc/fstab /etc/fstab_orig
(バックアップを取る癖をつける)
# vi /etc/fstab
(略)
/dev/sdb1 /opt ext3 defaults 0 1
① ② ③ ④ ⑤⑥
# diff /etc/fstab /etc/fstab_orig
12d11
< /dev/sdb1 /opt ext3 defaults 0 1
(差分のチェックの癖をつける)
マウントの実行と確認
# mount -a
# df -h
(略)
/dev/sdb1 976M 1.3M 924M 1% /opt
# reboot
(再起動後、自動マウントされる事を確認)
12.7 CD/DVD/USB メモリ(リムーバブルメディア)の利用
電源を入れたまま取り外したり装着してメディアを取り替えられるリムーバブルな外部記憶装置をして、CD/DVD ドライブや USB メモリがあります。リムーバブルメディアを使用する場合、手動でマウントする必要があります。(一部のディストリビューションでは、自動的にマウントされる場合があります)。リムーバブルメディアのマウントポイントとして、/mnt ディレクトリや /media ディレクトリの下に作られたディレクトリが使われます。
12.7.1 CD/DVD のマウント
CD/DVD を Linux で使用するには、mount コマンドでマウントを行います。さらにオプションとして、タイプに CD の規格である iso9660 を、モードに読み込み専用の ro ( Read Only ) を指定します。
実習:CD/DVD のマウント
# mkdir /media/cdrom (マウントするためにディレクトリを作成)
# ls -ld /media/cdrom
drwxr-xr-x 2 root root 6 12月 30 10:10 /media/cdrom
# mount -t iso9660 -o ro /dev/cdrom /media/cdrom
# df
(略)
/dev/sr0 4364408 4364408 0 100% /media/cdrom (マウントされました)
# cd /media/cdrom/
# ls
CentOS_BuildTag GPL RPM-GPG-KEY-CentOS-7 images
EFI LiveOS RPM-GPG-KEY-CentOS-Testing-7 isolinux
EULA Packages TRANS.TBL repodata
# ls Packages
(略)
zsh-5.0.2-28.el7.x86_64.rpm
# rpm -ivh Packages/zsh-5.0.2-28.el7.x86_64.rpm
準備しています… ################################# [100%]
更新中 / インストール中…
1:zsh-5.0.2-28.el7 ################################# [100%]
(CD/ROMをマウントしているのでパッケージのインストールが素早くできるようになる)
実習例では、デバイス /dev/cdrom を /media/cdrom ディレクトリにマウントしています。ディストリビューションによっては、/media/cdrom ディレクトリが存在しないので、代わりに /mnt を指定します。
実習:CD/DVD のアンマウント
# umount /media/cdrom
12.7.3 アンマウントできない場合
マウントポイントが使用中であったり参照中の場合はアンマウントできません。pwd で /media/cdrom 以外のディレクトリからアンマウントしてください。
# pwd
/media/cdrom
# umount /media/cdrom
umount: /media/cdrom: target is busy.
(In some cases useful info about processes that use
the device is found by lsof(8) or fuser(1))
# cd ~
# umount /media/cdrom
# ls /media/cdrom/
# df
12.8 i ノード
ext3(ext2) ファイルシステムは、ファイルやディレクトリに対し、i ノード番号というユニークな番号を割り振って管理しています。ファイルシステムを作成した時に i ノード領域という場所が確保されます。i ノード領域には、ファイルがディスク上にある位置やアクセス権限などの情報が保持されています。ファイルシステムに作られるファイル数は、i ノード領域の大きさに左右されることになります。もしファイルが多く作られて i ノード領域が足りなくなると、そのファイルシステムにデータを書き込める空き領域があっても、新規のファイルが作成出来なくなります。
12.8.1 i ノード情報の確認
実習:i ノード情報の表示
# df -i
ファイルシス Iノード I使用 I残り I使用% マウント位置
(略)
tmpfs 127185 359 126826 1% /run
tmpfs 127185 13 127172 1% /sys/fs/cgroup
/dev/sdb1 65536 11 65525 1% /opt
/dev/sda1 512000 328 511672 1% /boot
/dev/sdb1 と /dev/sda1 は、Linux のファイルシステムである ext3 ファイルシステムとなっているので i ノード情報が表示されます。一方、DVD-ROM ドライブは ext3 ファイルシステムでない(ISO9660 規格のファイルシステム)ので i ノード情報を持たないことがわかります。
12.8.2 i ノード番号の確認
実習:i ノード情報の確認
$ ls -li /bin/ | sort
(略)
17243646 -rwxr-xr-x. 1 root root 563176 3月 6 2015 nmcli
17243761 -rwxr-xr-x. 1 root root 21214 3月 10 2015 kdumpctl
17243766 -rwxr-xr-x. 4 root root 262864 3月 6 2015 nmtui
17243766 -rwxr-xr-x. 4 root root 262864 3月 6 2015 nmtui-connect
17243766 -rwxr-xr-x. 4 root root 262864 3月 6 2015 nmtui-edit
17243766 -rwxr-xr-x. 4 root root 262864 3月 6 2015 nmtui-hostname
17243767 -rwxr-xr-x. 1 root root 79336 3月 6 2015 dumpkeys
17243768 -rwxr-xr-x. 1 root root 11408 3月 6 2015 kbd_mode
(略)
行頭(1番目)に i ノード番号が表示され nmtui, nmtui-connect, nmtui-edit, nmtui-hostname コマンドに同じ i ノード番号が割り振られています。ファイル名が別々でも i ノード番号が同じファイルはファイルとしての実態は同じなハードリンクという仕組みを表しています。3番目の4という数字はリンク数で、1つのファイル実態を4つのファイル名でリンクしていることを表しています。
12.9 ハードリンクとシンボリックリンク
リンク機能は、ファイルをコピーしたり移動したりせずに、別のディレクトリにあるように扱うことができる機能です。
ハードリンク
ハードリンクは、ファイルの実体を直接指し示して共有します。ハードリンクを削除しても、元ファイルは削除されません。ハードリンクは i ノード番号を共有することで実現しているので別ファイルシステム(別パーティション)には作成することが出来ません。
シンボリックリンク
シンボリックリンクは、元ファイルが保管されている位置(パス)を示す擬似的なファイルを作ります。シンボリックリンクを消しても元ファイルには影響はありません。元ファイルを消すとシンボリックリンクからのアクセスがエラーになります。また別ファイルシステムの間で作成することが出来Windows のショートカットと呼ばれるファイルと同じ考えです。
実習:ハードリンクの作成
# cp -p /usr/bin/file .
# ln file file2
# ls -il file*
33767752 -rwxr-xr-x 2 root root 19752 6月 10 2014 file
33767752 -rwxr-xr-x 2 root root 19752 6月 10 2014 file2
ファイルは必ず i ノード情報にリンクしており、ファイルを作るとハードリンクが1つできることと同じです。ファイルを消してリンク数が0になると、ファイルのデータがファイルシステムから完全に削除されます。
実習:シンボリックリンクの作成
# ln -s file file_sym
# ls -il file*
33767752 -rwxr-xr-x 2 root root 19752 6月 10 2014 file
33767752 -rwxr-xr-x 2 root root 19752 6月 10 2014 file2
33767753 lrwxrwxrwx 1 root root 4 1月 3 10:06 file_sym -> file
12.10 ディスクを管理するコマンド
ハードディスクを管理するコマンドとして、ファイルシステムをチェックして修復する fack コマンドや、ファイルやディレクトリが使っているディスク容量そ調べる du コマンドがあります。
12.10.1 ファイルシステムのチェックと修復
コンピュータが異常終了するなど正常にシャットダウンが行われないと、ファイルシステムのファイル管理情報とハードディスクに書き込まれたデータとの間で辻褄が合わなくなることがあります。ファイルシステムが不整合に陥った場合、fsck コマンドを使って整合性をチェックし、修復を行う必要があります。fsck コマンドは、異常終了した後のシステム起動時に自動的に実行されます。
12.10.2 fsck とジャーナリング機能
ジャーナリング機能を持つ ext3 ファイルシステムは、ジャーナリング情報があるので修復が素早く行えます。
実習:ハードディスクのチェック
マウントされているハードディスクをチェックして修復出来ますが、修復中にファイルシステムが書き換えられると、更に問題が増えるかも知れません。修復をするときは、チェックするパーティションがアンマウントされている状態での fsck コマンドの実行をお薦めします。
# df -h
(略)
/dev/sdb1 976M 18M 907M 2% /opt
# umount /opt
# fsck /dev/sdb1
12.10.3 ディレクトリ使用量の確認
df コマンドでハードディスクなどの全体の使用量を確認出来ました。細かいディレクトリの使用量を調べるには du コマンドを使います。
実習:ディレクトリ使用量の確認
du コマンドに -s オプションをつけるとディレクトリ毎の全ファイルのサイズの総計を表示します。
# du -s /usr/*
49892 /usr/bin
0 /usr/etc
0 /usr/games
21176 /usr/include
332060 /usr/lib
138668 /usr/lib64
55176 /usr/libexec
8 /usr/local
33104 /usr/sbin
302568 /usr/share
85052 /usr/src
0 /usr/tmp
12.11 章末テスト
(1)マシンのハードディスクのパーティションを確認するコマンドを記述しなさい。
(2)スワップファイルシステムについて説明しなさい。
(3)ext3 や ext4 が ext2 より優れている点を1つあげなさい。
(4)ハードリンクとシンボリックリンクの違いを説明しなさい。
(5)ログインしているユーザのホームディレクトリの使用量を表示するコマンドを記述しなさい。
章末テスト解答
(1)fdisk -l
(2)使用されていないメモリをスワップファイルに待避しておき未使用のメモリを確保する
(3)ジャーリング機能を加えて信頼度が向上している。
(4)ハードリンクはファイルの実体を直接指し示して共有。シンボリックは元ファイルが保管されている位置(パス)を示します。
(5)du /home