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 ファイルシステム

ファイルシステムとは、ディレクトリやファイルの情報やデータをディスクのどこに保存してあるか管理するためのシステム(仕組)です。ファイルシステムはディレクトリやファイルのファイル名やファイルの作成時間やファイルの所有権限などの情報も管理してしています。

Linuxで利用できるファイルシステムの一例

WindowsとCD/DVDのファイルシステムの一例

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 ノード領域が足りなくなると、そのファイルシステムにデータを書き込める空き領域があっても、新規のファイルが作成出来なくなります。

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)ログインしているユーザのホームディレクトリの使用量を表示するコマンドを記述しなさい。

Linux標準教科書表紙イメージ

Linux標準教科書より抜粋

章末テスト解答

(1)fdisk -l

(2)使用されていないメモリをスワップファイルに待避しておき未使用のメモリを確保する

(3)ジャーリング機能を加えて信頼度が向上している。

(4)ハードリンクはファイルの実体を直接指し示して共有。シンボリックは元ファイルが保管されている位置(パス)を示します。

(5)du /home

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください