연속되지 않은 inode 번호가 있는 파일에 inode를 할당하기 위해 디렉토리에 파일을 어떻게 생성합니까?

연속되지 않은 inode 번호가 있는 파일에 inode를 할당하기 위해 디렉토리에 파일을 어떻게 생성합니까?

나는 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

답변3

테스트 파일 시스템 이미지를 한 번만 생성합니다. 필요한 경우 파일 시스템 디버거를 사용하여 필요한 inode 번호를 얻습니다. 테스트를 수행하려면 이미지를 복사하여 설치하세요.

당신은 그것을 사용할 수 있습니다퓨즈파일 시스템을 사용하여 루트 권한 없이 파일 시스템 이미지를 마운트합니다. ext4에는 FUSE 구현이 없지만 FUSE 구현이 하나 있습니다.외부 2, 하나는지브스, 등.

관련 정보