Linux で作成できるディレクトリ数上限

Linuxで一般的に使われるファイルシステムは ext3 ですが、このext3ファイルシステム
でひとつのディレクトリの下に並べることができるディレクトリの上限は、32000 です。
(ディレクトリを変更しないでmkdirを何回までできるかってことです。)
「/usr/include/linux/ext3_fs.h 」に、「#define EXT3_LINK_MAX 32000」の定義がありここが元となっています。

実際に以下のようなプログラムを作成し実行すると。
31999個目を作成したとき「mkdir: Too many links」となります。
「.」「..」 のディレクトリがあるので事実上 31998個ということですね。

ちなみに、xfs ファイルシステムでは、2147483647(21億強) です。
「/usr/include/xfs/xfs_dinode.h」の「#define XFS_MAXLINK ((1U << 31) - 1U)」の
定義に由来します。
xfsファイルシステムを作って同じようにプログラムを流して、1000000(百万)ディレクトリ
まで試してみましたが作成できました。

#include <stdio.h>
#include <sys/stat.h>
#include <errno.h>
#include <strings.h>
#include <stdlib.h>


#define MDMAX 1000000

int main(int argc, char* argv[]) {

    int i;
    int ret;
    char s[1024];

    bzero(s, sizeof(s));

    for(i=1;i<=MDMAX ; i++) {
        if(i % 1000 == 0) {
            printf("count=%d\n",i);
        }
        sprintf(s, "%d", i);
        ret=mkdir(s, 0777);
        if(ret!=0) {
            perror("mkdir");
            printf("count=%d\n",i);
            exit(1);
        }
    }
    exit(0);
}

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2008-07-03 (木) 15:46:42 (3787d)