web-dev-qa-db-ja.com

RHEL5:tmpfsに256GBを超えるスパースファイルを作成できません

_/var/log/lastlog_は、ログイン時に書き込まれます。このファイルのサイズは、システム内の最大のUIDに基づいています。最大UIDが大きいほど、このファイルは大きくなります。ありがたいことに、これはスパースファイルであるため、ディスク上のサイズはlsが報告するサイズよりもはるかに小さくなります(_ls -s_はディスク上のサイズを報告します)。

私たちのシステムでは、Active Directoryサーバーに対して認証を行っており、ユーザーに割り当てられたUIDは非常に大きくなります。たとえば、最初のADユーザーの場合はUID 900,000,000、2番目のユーザーの場合は900,000,001などです。

それは奇妙ですが、大丈夫なはずです。ただし、ADユーザーがログインするとlastlogは280GBと表示され、_/var/log/lastlog_はhuuuuuugeになります。ありがたいことに、実際のサイズはまだ小さいです。

これは、_/var/log/lastlog_がext3ファイルシステムのハードドライブに保存されている場合に正常に機能します。ただし、lastlogがtmpfsファイルシステムに格納されている場合は、機能しなくなります。次に、tmpfs上のすべてのファイルの最大ファイルサイズが256GBであるように見えるため、sessregプログラムはlastlogに書き込もうとしてエラーになります。

この256GBの制限はどこから来ており、どうすれば増やすことができますか?

私が行ってきた大きなスパースファイルを作成するための簡単なテストとして:

_dd if=/dev/zero of=sparse-file bs=1 count=1 seek=300GB
_

「tmpfsmaxfile size」、「256GB filesystem limit」、「linux maxfilesize」などでグーグルを試してみました。私は多くを見つけることができませんでした。私が見つけることができる256GBの唯一の言及は、2KBブロックのext3ファイルシステムが256GBファイルに制限されているということです。しかし、私たちのハードドライブは4Kブロックでフォーマットされているので、そうではないようです-言うまでもなく、これはハードドライブの上部にマウントされたtmpfsで発生しているため、ext3パーティションが要因になることはありません。

これはすべて、64ビットのRed Hat Enterprise Linux5.4システムで発生しています。興味深いことに、32ビットのFedora Core 6ボックスである私の個人的な開発マシンでは、tmpfsファイルシステムに300GB以上のファイルを問題なく作成できます。 RHEL5.4システムでは、それはうまくいきません。

5
John Kugelman

答えはLinuxソース、具体的には/usr/src/linux/mm/shmem.cにあり、私のシステム(Gentoo 2.6.31-ish)の70行目あたりから始まります。

/*
 * The maximum size of a shmem/tmpfs file is limited by the maximum size of
 * its triple-indirect swap vector - see illustration at shmem_swp_entry().
 *
 * With 4kB page size, maximum file size is just over 2TB on a 32-bit kernel,
 * but one eighth of that on a 64-bit kernel.  With 8kB page size, maximum
 * file size is just over 4TB on a 64-bit kernel, but 16TB on a 32-bit kernel,
 * MAX_LFS_FILESIZE being then more restrictive than swap vector layout.

2の8分の1 TBは正確に256GBです。32ビットFC6テストシステムで発見したように、32ビットカーネルではより大きなサイズが可能です。

カーネルでページサイズ 関連している可能性があります を有効にする HugeTLBファイルシステムサポート に変更しているようです。ただし、カーネルの内臓について、その方法や理由、カーネルを利用するために必要な手順、またはカーネルが持つ可能性のあるその他の影響について十分に理解していません。有効にするには、make menuconfigを実行し、ファイルシステムに移動してから、疑似ファイルシステム。問題のオプションはHugeTLBファイルシステムのサポートです。そのためのオンラインヘルプは言う:

CONFIG_HUGETLBFS:

hugetlbfs is a filesystem backing for HugeTLB pages, based on
ramfs. For architectures that support it, say Y here and read
<file:Documentation/vm/hugetlbpage.txt> for details.

If unsure, say N.

StackOverflowでこれを実行する価値があるかもしれません。これがお役に立てば幸いです。

7

1つの提案... tmpfsでext3イメージを作成してマウントし、そこにlastlogを配置できますか?何かのようなもの:

cd /tmp
dd if=/dev/zero of=lastlog.img bs=1024k count=10
losetup /dev/loop1 lastlog.img
mkfs.ext3 /dev/loop1
mount /dev/loop1 /var/lastlog
3
Josh