web-dev-qa-db-ja.com

Linuxでext4のブロックサイズを8192に変更すると、マウントできなくなります

私はそれをしました:

mkfs.ext4 -j -b 8192 /dev/sda3

今私はそれをマウントしようとしています:

Sudo mount -t ext4 /dev/sda3 foo 

しかし、私はこのエラーを受け取ります:

mount: wrong fs type, bad option, bad superblock on /dev/sda3

どうしたの?

3

私が知っているように、そのような巨大なブロックはx86プラットフォームではサポートされていません。問題は次のとおりです。ext* fsは汎用VFSフレームワークに基づいており、ブロックサイズがページサイズ(x86では4096)より大きい場合は機能しません。 4KBを超えるメモリページを備えたItaniumおよびその他のエキゾチックアーキテクチャ(ただし、2MBまたは4MBページを備えたx86/x86_64では機能しない)では、このようなブロックサイズが機能する可能性があります。 Linuxでの同じ問題は、フラグメントサイズが4096を超えるufs2にあります。

この知識は、1人のUFS2/Linux開発者からの情報に基づいています。リストには、 質問回答 のような文字もあります。

「AndreasDilger」からの回答を引用

Linuxはblocksize <= PAGE_SIZEを必要とするため、基本的にすべてのファイルシステムは、ページまたはバッファーキャッシュからの部分ディスクブロックの読み取り/書き込みのサポートを内部的に実装しない限り、blocksize <= 4096を使用します。

Ext2/3を使用すると、ブロックサイズを変更せずに割り当てられたiノードの数を変更できます(ブロックグループあたりのiノードが少なくなります)。

UFS2の場合、fragment_size <= 4096の明示的なチェックがあります。 ext * fsにも同じチェックがあると思います。

基本的に、エクステントが有効になっている場合は、ext4にそれほど大きなブロックサイズを設定する必要はありません。エクステントは、巨大なファイルの巨大なブロックに非常に似ています。 extensを使用すると、パフォーマンスが向上し、断片化が少なくなりますが、古いLinuxカーネルやWindowsなどのサードOS用の古いドライバーではサポートされていません(下位互換性はありません)。

2
osgx