나는 Dir 디렉토리에 ext4 파일 시스템을 마운트하고 테스트를 위해 디렉토리 inode의 파일이 비연속적인 inode 번호를 갖도록 요구하는 일부 디렉토리 읽기 코드를 조정했습니다. 쉘 스크립트를 사용하여 파일을 생성하면 연속된 inode 번호가 있는 파일에 inode가 할당됩니다. 동시에 생성된 파일의 경우 inode는 inode freelist에서 순차적으로 할당되며, inode freelist는 일반적으로 inode 번호가 순서대로 배열되어 있기 때문입니다. 다음 쉘 스크립트를 사용하여 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