連続していないinode番号を持つファイルにinodeを割り当てるためにディレクトリにファイルを作成するにはどうすればよいですか?

連続していないinode番号を持つファイルにinodeを割り当てるためにディレクトリにファイルを作成するにはどうすればよいですか?

私はDirディレクトリにext4ファイルシステムをマウントし、テストのためにディレクトリinodeのファイルが非連続inode番号を持つように要求するいくつかのディレクトリ読み取りコードを調整しました。シェルスクリプトを使用してファイルを生成すると、連続したinode番号を持つファイルにinodeが割り当てられます。同時に生成されたファイルの場合、inodeはinode freelistから順番に割り当てられます。次のシェルスクリプトを使用してDirにファイルを生成しています。

#! /bin/bash
for n in {1..1000}; do
    dd if=/dev/urandom of=file$( printf %03d "$n" ).bin bs=1 count=$(( RANDOM + 1024 ))
done

ls -i Dirは次のo / pを提供します。

567 file001.bin  
568 file002.bin
569 file002.bin  
570 file004.bin  
571 file005.bin  
572 file006.bin 
573 file007.bin  
574 file008.bin
575 file009.bin
576 file010.bin
..

これらのファイルに連続していないinodeを含めるにはどうすればよいですか?

答え1

簡単な方法は、各ファイルの前に一時ファイルの束を作成することです.bin

function randomFiles() {
    for (( i=1; i<=$[$RANDOM%$1+1]; i++ ))
    do
            mktemp -q --tmpdir=.
    done
}

for n in {1..1000}; do
    dd if=/dev/urandom of=file$( printf %03d "$n" ).bin bs=1 count=$(( RANDOM + 1024 ))
    randomFiles 10
done

rm -f tmp.*

これにより、.bin各ファイルの後に1〜10個の一時ファイルが作成され、次のinode番号が前に移動します。

答え2

生成順序をランダムに指定してください。

#! /bin/bash
for n in $(seq 1 1000 | sort -R); do
    dd if=/dev/urandom of=file$( printf %03d "$n" ).bin bs=1 count=$(( RANDOM + 1024 ))
done

答え3

テストファイルシステムイメージを一度だけ生成します。必要に応じて、ファイルシステムデバッガを使用して必要なinode番号を取得します。テストを実行するには、イメージをコピーしてインストールしてください。

あなたはそれを使用することができますヒューズファイルシステムを使用して、root権限なしでファイルシステムイメージをマウントします。 ext4にはFUSE実装はありませんが、FUSE実装は1つあります。外部2、一つはジブス、等。

関連情報