Se você quiser garantir fragmentação, mas não evitar (então você só tem controle parcial sobre o que acontece), e você não se importa com as especificidades do fragmentação, aqui está um rápido & maneira suja de fazer as coisas.
Para criar um arquivo de n
bloqueia em pelo menos dois fragmentos:
- Abra o arquivo com gravações síncronas, escreva m < n blocos.
- Abra outro arquivo. Adicione a ele até que haja no máximo n -m blocos livres no disco. Não faça isso escasso por engano!
- Escreva os blocos n-m restantes no primeiro arquivo.
- Fechar e
unlink
o segundo arquivo.
Você pode fragmentar mais peças entrelaçando mais arquivos.
Isso pressupõe que o sistema de arquivos está disponível para esse tipo de tortura, ou seja, não em um ambiente multiusuário ou de missão crítica. Ele também assume que o sistema de arquivos não possui blocos reservados, ou os blocos reservados são reservados para o seu UID, ou você é root.
Não existe uma maneira direta para garantir a fragmentação, porque os sistemas Unix empregam a abstração do sistema de arquivos, portanto, você nunca fala com o sistema de arquivos raw.
Além disso, garantir a fragmentação no nível do sistema de arquivos não informa nada sobre o que acontece nos níveis inferiores. LVM, software e hardware RAID, remapeamento de setor em nível de hardware e outras camadas de abstração podem atrapalhar suas expectativas (e medidas).