Como eu posso criar arquivos no diretório para ter inodes alocados para arquivos com números de inode não seqüenciais?

1

Montei um sistema de arquivos ext4 no diretório Dir e ajustei alguns códigos de leitura de diretório, o que requer ter arquivos nos inodes de diretório com números de inodes não seqüenciais para seus testes. Como eu estou criando arquivos com o script de shell, que aloca inodes para os arquivos com números de inode sequenciais. Porque para os arquivos que estão sendo criados ao mesmo tempo, os inodes são alocados sequencialmente do inode freelist, que geralmente possuem números de inode seqüencialmente. Eu usei seguinte script de shell para criar arquivos em 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 dá o seguinte 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
..

Como posso fazer com que esses arquivos tenham inodes não sequenciais?

    
por mahesh bhosale 31.03.2017 / 13:09

3 respostas

3

Bem, uma abordagem simples seria apenas criar um monte de arquivos temporários antes de cada arquivo .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.*

Isso criará de 1 a 10 arquivos temporários após cada arquivo .bin , mudando o próximo número de inode adiante.

    
por 31.03.2017 / 13:43
1

Basta randomizar a ordem em que você as criou:

#! /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
    
por 31.03.2017 / 14:12
0

Crie uma imagem do sistema de arquivos de teste de uma vez por todas. Use um depurador de sistema de arquivos, se necessário, para obter os números de inode desejados. Para realizar o teste, faça uma cópia da imagem e monte-a.

Você pode usar um sistema de arquivos FUSE para montar uma imagem do sistema de arquivos sem precisar de permissões de root. Não existe uma implementação FUSE do ext4, mas existe uma para ext2 , uma para zfs , etc.

    
por 01.04.2017 / 02:44