mkfs.ext4

たまにしかやらないからコマンド忘れます。

-L はなんとなくボリュームラベルを付けているだけです。

# mkfs.ext4 -L home /dev/vdb1
mke2fs 1.43.3 (04-Sep-2016)
Creating filesystem with 524278 4k blocks and 131072 inodes
Filesystem UUID: da887148-9728-46df-9cfa-4afed5ed62bb
Superblock backups stored on blocks:
        32768, 98304, 163840, 229376, 294912

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

gentoo の /usr/portage とかは大体 2GB もあればサイズ的に十分なんですが、とにかくファイル数が多いので普通にファイルシステムを作ると inode が枯渇してしまいます。

とくに inode を指定せずに 2GB のファイルシステムを作るとこんな感じになります。

# df -i /mnt/test
Filesystem     Inodes IUsed  IFree IUse% Mounted on
/dev/vdb1      131072    11 131061    1% /mnt/test
# df -hT /mnt/test
Filesystem     Type  Size  Used Avail Use% Mounted on
/dev/vdb1      ext4  2.0G  6.0M  1.9G   1% /mnt/test

デフォルトだと 4ブロックごとに1つの inode ブロックを作るらしいです。で、ブロックサイズのデフォルトは 4KB なので、16KB に対して1つの inode ブロックが作成される……らしいです。なので /usr/portage のように、極端に小さなファイルを多く格納するファイルシステムを作成する場合は、-i オプションでこの比率をいじってあげると良いです。

mkfs.ext4 -i 4096 -L home /dev/vdb1
mke2fs 1.43.3 (04-Sep-2016)
Creating filesystem with 524278 4k blocks and 524288 inodes
Filesystem UUID: 6be69ad9-9376-446c-b243-ba9c4aa0d71c
Superblock backups stored on blocks:
        32768, 98304, 163840, 229376, 294912

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

-i は bytes-per-inode ratio を指定するので、デフォルトで 16384(16K) に対して1つの inode だったものを、-i 4096 とすることで4096(4K) に対して1つの inode ブロックを持つようにします。こうすると、デフォルトの4倍の inode ブロックが確保できます。

# df -i /mnt/test
Filesystem     Inodes IUsed  IFree IUse% Mounted on
/dev/vdb1      524288    11 524277    1% /mnt/test
# df -hT /mnt/test
Filesystem     Type  Size  Used Avail Use% Mounted on
/dev/vdb1      ext4  1.9G  6.0M  1.8G   1% /mnt/test

inode ブロックをたくさん確保するので、このファイルシステムで実際に使用できる容量は減りますけどね。

https://manimani.cc/lib/plugins/linkback/exe/trackback.php/wiki:linux:mkfs.ext4