私は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