LoginSignup
68
58

More than 5 years have passed since last update.

Linuxのファイルシステムについて勉強したメモ

Posted at

書籍を読みながら、実際にコマンドを利用して確認した時のメモ。

参考

環境

  • Amazon Linux AMI 2016.03.0

ファイルシステムとは

ウィキペディア参照

ファイルシステムは、コンピュータのリソースを操作するための、オペレーティングシステム (OS) が持つ機能の一つ。ファイルとは、主に補助記憶装置に格納されたデータを指すが、デバイスやプロセス、カーネル内の情報といったものもファイルとして提供するファイルシステムもある。

また、書籍に以下のように書いてありました。

ファイルシステムはアプリケーションがデータの読み込み・書き込みをストレージに行う際に仲介するカーネルのサービスの一つです。

ストレージとはHDDやSSDであったり色々ありますが、アプリケーションからストレージに対して書き込みを行う場合にはプロセスからLinuxのシステムコールを呼び出し、その後ファイルシステムを介してストレージに書き込みが行なわれています。

最近のストレージはどんどん大容量化していくため、希望しているデータを以下に早く取得できるかの検討が必要となります。また、実ファイルだけでなく、どのユーザーがファイルを利用できるのかなどの管理データも必要です。

ファイルシステムでは上記のようなファイル検索アルゴリズムであったり、ファイルの管理情報などを持っています。また、ファイルシステムによって認識できるファイルサイズなども違ってきます。

Linuxでは対象OSで認識できるファイルシステムは以下のファイルを確認することで確認できます。

$cat /proc/filesystems
nodev   sysfs
nodev   rootfs
nodev   ramfs
nodev   bdev
nodev   proc
nodev   cpuset
nodev   cgroup
nodev   tmpfs
nodev   devtmpfs
nodev   debugfs
nodev   tracefs
nodev   securityfs
nodev   sockfs
nodev   bpf
nodev   pipefs
nodev   devpts
nodev   hugetlbfs
nodev   pstore
nodev   mqueue
    ext3
    ext4
nodev   binfmt_misc

様々なファイルシステムがありますが、VFS(Virtual File System)という仕組みがプロセスとファイルシステムの間に介在することで、プロセス側ではどのファイルシステムにアクセスするかを意識する必要はありません。

ファイルシステムの仕組み

ファイルシステムでは先ほども書いたように実際のファイルだけでなく、ファイル情報を管理するためのメタデータが記録されます。メタデータでは利用している領域、利用していない領域、どのディスクレトリがどこにあるかなどの情報を記録しています。

また、ファイルシステムではデータ格納の際に1ビットずつ書き込むようなことはせず、効率化のためにある程度まとまった単位で扱うようにしております。この容量をブロックサイズといいます。

現在、多くのLinuxで使われているファイルシステムのext4ではデフォルトブロックサイズは4096byteとして設定されています。

実際にマウントされているext4ファイルシステムのブロックサイズを確認してみます。

# マウントされているファイルシステムを確認
$df -Th
ファイルシス   タイプ   サイズ  使用  残り 使用% マウント位置
/dev/xvda1     ext4       7.8G  1.3G  6.4G   17% /
devtmpfs       devtmpfs   490M   56K  490M    1% /dev
tmpfs          tmpfs      498M     0  498M    0% /dev/shm

# /dev/xvda1(ext4)のブロックサイズを確認
$sudo /sbin/tune2fs -l /dev/xvda1 |grep 'Block size'
Block size:               4096

なお、詳細なext4のファイルシステムのレイアウトは以下より確認できます。

Ext4 Disk Layout

新しいデバイスを認識させてみる

以下の流れで新しいデバイスを認識させて利用することができます。

  • ストレージをPCに接続し、認識させる
  • ストージにファイルシステムを作成する
  • 任意の位置にマウントさせ、Linuxからアクセスできるようにする

新しくマシンを買うのは面倒なので以下を参考に今回はAWSを使ってみます。

Amazon EBS ボリュームを使用できるようにする

では順番にやっていきましょう

ストレージをPCに接続し、認識させる

今回はEC2を使っているのでEBSというストレージをEC2にアタッチさせます。

マネージメントコンソールでEBS(種類及びディスクサイズは何でもOK)を作成します。
作成後、起動しているEC2にアタッチします。
アタッチする際に指定できるデバイス名は「/dev/sdf through /dev/sdp」との事なので今回は/dev/sdfとしてアタッチします。

確認してみます

# 現在マウントされているディスク
$df -Th
ファイルシス   タイプ   サイズ  使用  残り 使用% マウント位置
/dev/xvda1     ext4       7.8G  1.3G  6.4G   17% /
devtmpfs       devtmpfs   490M   60K  490M    1% /dev
tmpfs          tmpfs      498M     0  498M    0% /dev/shm

# それぞれ以下のような構成
$ll /dev/sda*
lrwxrwxrwx 1 root root 4  4月 28 08:27 /dev/sda -> xvda
lrwxrwxrwx 1 root root 5  4月 28 08:27 /dev/sda1 -> xvda1

# 先ほどアタッチしたEBSがデバイスとして認識されているか
$ll /dev/sdf
lrwxrwxrwx 1 root root 4  4月 29 09:43 /dev/sdf -> xvdf

$ll /dev/xvdf
brw-rw---- 1 root disk 202, 80  4月 29 09:43 /dev/xvdf

# 利用可能なデバイスを確認。/dev/sdf/でなく/dev/xvdfgがブロックデバイスとして認識されている
$lsblk
NAME    MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
xvda    202:0    0   8G  0 disk
└─xvda1 202:1    0   8G  0 part /
xvdf    202:80   0  10G  0 disk

ドキュメントにも書いてあるようにデバイス名を「/dev/sdf」としても末尾の文字が置き換えられる場合があるようで今回の場合も「/dev/xvdf」と置き換わっている(シンボリックリンク)のが分かりました。

また、fileコマンドでアタッチされたEBSに既にファイルシステムが作成されていないか念のため確認します。

$sudo file -s /dev/xvdf
/dev/xvdf: data

上記のように表示されれば、ファイルシステムは作成されていません。

ストージにファイルシステムを作成する

次に先ほどLinuxから認識できたデバイスのブロックデバイスファイル/dev/xvdfにext4のファイルシステムを作成します。

ファイルシステム作成にはmkfsコマンドを利用します。

# ext4ファイルシステムを作成
$sudo mkfs -t ext4 /dev/xvdf
mke2fs 1.42.12 (29-Aug-2014)
Creating filesystem with 2621440 4k blocks and 655360 inodes
Filesystem UUID: 6c4b8eca-da34-4cb7-87ac-bcbc6255d802
Superblock backups stored on blocks:
    32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632

Allocating group tables: done
Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done

# 確認
$sudo file -s /dev/xvdf
/dev/xvdf: Linux rev 1.0 ext4 filesystem data, UUID=6c4b8eca-da34-4cb7-87ac-bcbc6255d802 (extents) (large files) (huge files)

先ほど同じコマンドですが、/dev/xvdfがext4である表示に変わりました。

任意の位置にマウントさせ、Linuxからアクセスできるようにする

最後に作成したファイルシステムをマウントさせてアクセスできるようにします。

最初にマウントさせる任意のディレクトリを作成します。
今回は/dataというディレクトリを作成し、マウントさせます。

# ディレクトリ作成
$sudo mkdir /data

# マウント
$sudo mount /dev/xvdf /data

# ファイルシステムとして認識されている
$df -Th
ファイルシス   タイプ   サイズ  使用  残り 使用% マウント位置
/dev/xvda1     ext4       7.8G  1.3G  6.4G   17% /
devtmpfs       devtmpfs   490M   60K  490M    1% /dev
tmpfs          tmpfs      498M     0  498M    0% /dev/shm
/dev/xvdf      ext4       9.8G   23M  9.2G    1% /data

このままだとLinuxが再起動した際に自動でマウントされないので必要に応じて以下のような追記を行い、自動マウントすることができます。

/etc/fstab
/dev/xvdf       /data   ext4    defaults,nofail        0       2

お疲れ様でした。

68
58
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
68
58