Linuxファイルシステムの作成

Linux filesystem 2/N

公開日: 2021-12-30
更新日: 2023-07-28

  Table of Contents

ファイルシステムとは?

デバイスファイルをパーティショニングしたあとに, 各パーティションにファイルシステムを作成しないと そのデバイスはmountすることができません. そもそも, mountは「ファイルシステムを結合させる」コマンド であるためです.

Def: ファイルシステム

ファイルシステムとは, 「ファイル」というインターフェースをユーザーやアプリケーションに提供する仕組みのこと. ファイルシステムという仕組みによって以下のことが実現できる:

  • 記憶装置の種類の違いや記憶装置にデータがどのように記録されているか意識することなく, データをファイルという 仮想的な容器に格納したり取り出す
  • ファイルをディレクトリにまとめる(=ファイルの管理性の向上)
  • ファイルをアクセス権で保護する(=セキュリティ確保)

ファイルシステムが用意されていない場合, ディスク上のデータの読み出しに例えば「1534セクタの データを開く」という指示が必要となります. 一方, ファイルシステムが用意されていれば, 「/tmp/data.txt のファイルを開く」のように分かりやすくデータを取り扱いできます.

ファイルシステムの種類

利用できるファイルシステムはOSによって違います. Linuxではext4というファイルシステムがメインで用いられています.

ファイルシステム 最大ファイルサイズ 最大ファイルシステムサイズ 説明
ext 2GB 2GB 2.1.21以降のカーネルではサポートされていない
ext2 2TB 32TB 可変ブロックサイズ
ctime/atime/mtimeのサポート
ビットマップによるブロックとi-nodeの管理
ブロックグループの導入
ext3 2TB 32TB ext2にジャーナル機能を追加. ext2と後方互換性がある
ext4 16TB 1EB ナノ秒単位のタイムスタンプをサポート
デフラグ機能追加
4Kブロックサイズが標準
extentの採用
ext2/ext3と後方互換性がある

ext2/ext3/ext4ファイルシステムは, ディスク上のセクタを集めたブロック単位で構成されます. ブロックサイズが4096であるファイルサイズでは, 1 Byteのデータを格納する場合でも, 1ブロックを必要とします. ブロックサイズは, ファイルシステム作成時に指定できますが, 後から変更することはできません.

Column: ジャーナル機能

ファイルシステムのデータの更新を記録する機能. 不要な電源切断があった場合など, 変更履歴をチェックして管理データの再構築ができるため,. ファイルシステムチェックを短縮することができる.

その他のファイルシステム

ファイルシステム 説明
xfs ジャーナル機能を持ったファイルシステム. i-nodeの動的割当をサポート
jfs ジャーナル機能を持ったファイルシステム. i-nodeの動的割当をサポート
vfat SDカードやフラッシュメモリで使われるファイルシステム
WIndowsとLinuxの両方で読み書き可能
ファイルシステム最大サイズは4GB
ntfs Windows NT系の標準ファイルシステム. Linuxでは読むことはできるが作成することはできない
exfat vfatの拡張. 最大ファイルサイズ(16EiB)対応
btrfs B-Tree(木構造)を採用
データ領域の割当にextentを採用
スナップショット機能あり
複数のディスクパーティションから1つのファイルシステムを構成可能
reiserfs ジャーナル機能を持ったファイルシステム
ディスク使用効率が高い
i-nodeの動的割当をサポート
クラッシュからの高速回復機能がある
tmpfs 仮想メモリベースのファイルシステム
sysfs デバイス情報を扱う仮想ファイルシステム
procfs プロセス情報を扱う仮想ファイルシステム
devpts 疑似端末を制御するための仮想ファイルシステム

ファイルシステムの作成: mkfsコマンド

ファイルシステムを作成する際は, mkfsコマンドを利用します. Usageは以下の形式に従います.

1
% mkfs [options] [-t <type>] [fs-options] <device> [<size>]

option -t <type>でファイルシステムタイプを指定します. 何も指定しない場合は, ext2がデフォルトで動くようになっています.

Column: ext3の設定

ext3ext2にジャーナル機能をつけたファイルシステムと先に説明しましたが, mkfsコマンドで -jというジャーナル機能有効オプションを指定すると, ext3でファイルシステムを作成することができます.

1
2
3
4
5
6
7
## ext2 
% sudo mkfs /dev/sda1

## ext3 
% sudo mkfs -j /dev/sda1
% sudo mkfs.ext3 /dev/sda1
% sudo mkfs -t ext3 /dev/sda1

ext4フォーマットを作成する

1
2
3
4
5
% lsblk /dev/sda 
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
sda      8:0    1 57.3G  0 disk 
├─sda1   8:1    1   10G  0 part 
└─sda2   8:2    1 47.3G  0 part 

上記の構成で, /dev/sda1の方をext4でフォーマットする場合は以下のように実行します.

1
2
3
4
5
6
7
8
9
10
11
% sudo mkfs -t ext4 /dev/sda1
mke2fs 1.46.5 (30-Dec-2021)
Creating filesystem with 2621440 4k blocks and 655360 inodes
Filesystem UUID: 534b46bf-6259-4f70-a46b-e898389cfdbc
Superblock backups stored on blocks: 
	32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632

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

なお, sudo mkfs.ext4 /dev/sda1でも同じ挙動となります.

exfat ファイルシステムを設定する場合

ファイルシステムの異なるWindows, Mac, Linuxなどは, 基本的にそのままではお互いのファイルを利用することはできません. ファイルをやり取りするためには, 専用のアプリケーションを使うか, 互換性のあるファイルフォーマットを使用する必要があります.

WindowsやMacでも利用可能性のあるFlash Driveをフォーマットしたい場合は, exfatファイルシステムを用いることが推奨されます. ただし, Ubuntuではデフォルトでは利用できないので, 必要なパッケージをまずインストールします.

1
% sudo apt install exfat-fuse

その後は, mkfsコマンドでフォーマットを exfatを指定すればOKです.

1
2
3
4
5
6
7
8
9
10
11
12
13
% sudo mkfs -t exfat /dev/sda2
exfatprogs version : 1.1.3
Creating exFAT filesystem(/dev/sda2, cluster size=131072)

Writing volume boot record: done
Writing backup volume boot record: done
Fat table creation: done
Allocation bitmap creation: done
Upcase table creation: done
Writing root directory entry: done
Synchronizing...

exFAT format complete!

このままではまだMacでは使用できません. 実際にMacでファイルシステムを確認してみると Linux Filesystemという形で認識されデータを読み込むことができません.

partedコマンドを用いて, gpt partition情報についてmsftdataを設定する必要があります.

1
2
3
4
5
6
7
% sudo parted /dev/sda 
GNU Parted 3.4
Using /dev/sda
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) set 1 msftdata on                                                
(parted) quit                                                             
Information: You may need to update /etc/fstab.

fdiskで以下のようにTypeが確認できればMacでも使用できるようになります.

1
2
3
4
% sudo fdisk -l /dev/sda
Device        Start       End  Sectors  Size Type
/dev/sda1      2048  20973567 20971520   10G Linux filesystem
/dev/sda2  20973568 120127454 99153887 47.3G Microsoft basic data

Appendix: ファイルのatime/ctime/mtime

時間種類 説明 確認コマンド
atime アクセス時間 ls -la
ctime 作成時間 ls -lc
mtime 修正時間 ls -l

statコマンドでファイルアクセス時刻を検索することも可能です.

1
2
3
4
5
6
7
8
9
% stat README.md
  File: README.md
  Size: 2527            Blocks: 8          IO Block: 4096   regular file
Device: 10302h/66306d   Inode: 1715881     Links: 1
Access: (0664/-rw-rw-r--)  Uid: ( 1000/hoshinokirby)   Gid: ( 1000/hoshinokirby)
Access: 2021-09-10 05:27:40.311500980 +0900
Modify: 2021-08-02 16:50:33.582077940 +0900
Change: 2021-08-02 16:50:33.582077940 +0900
 Birth: 2021-07-23 04:08:26.370426410 +0900

References



Share Buttons
Share on:

Feature Tags
Leave a Comment
(注意:GitHub Accountが必要となります)