Eu sei que rsync
com --remove-source-files
(que eu uso em vez de mv
para poder mesclar hierarquias de diretórios) cria novos inodes:
stat 2021_07_30_20_18_17.pdf~
rsync --remove-source-files 2021_07_30_20_18_17.pdf~ 2021_07_30_20_18_17.pdf~.moved
stat 2021_07_30_20_18_17.pdf~.moved
Device: 805h/2053d Inode: 4850411 Links: 1
Device: 805h/2053d Inode: 4849693 Links: 1
Como está alocando um novo inode, isso significa que ele aloca novo espaço para o arquivo de destino? Ou --remove-source-files
apenas faz o novo inode apontar para os locais de memória do arquivo original?
Fundo
A razão pela qual estou perguntando é porque tenho uma unidade muito lenta devido a enormes hierarquias de diretórios com arquivos grandes e pequenos misturados) e acho que isso piora a fragmentação. Como a maioria dos sistemas de arquivos Linux não sofre fragmentação, não existe uma ferramenta simples para desfragmentar como no Windows.
Eu sei que posso rsync para uma nova unidade para reduzir a fragmentação, mas e para a mesma unidade? A movimentação de arquivos funciona da mesma maneira do ponto de vista de alocação de memória?
O rsync sempre é executado no modo de dois processos - ainda há um processo "remetente" e um processo "receptor" (apenas uma bifurcação do pai), trocando dados por meio de um par de soquetes da mesma maneira que eles se comunicam pela rede. Isso significa que mesmo uma cópia/movimento local ainda envolve a leitura de todo o arquivo original, o streaming para o processo do receptor rsync e a gravação de tudo no novo arquivo.
(Esta arquitetura é específica para o rsync, e não necessariamente aplicável a outras ferramentas. Por exemplo,
cp A B
ou mesmocat A > B
não garante que uma cópia completa será feita - eles podem copiar dados completos, mas também podem pedir deliberadamente ao sistema de arquivos para vincular dados existentes a o novo arquivo.No entanto, atualmente o ext4 não suporta tais links; As cópias baseadas em "reflink" são encontradas apenas em Btrfs e XFS. Portanto, um
cp A B
em ext4 resultará neste momento em uma cópia completa.)Eles fazem 1 , e existem ferramentas - e2fsprogs (o conjunto de ferramentas oficial ext4) tem
e4defrag
, btrfs-progs similarmente tembtrfs fi defrag
, e assim por diante.1 Não tanto quanto, por exemplo, FAT16/FAT32 (o ext2 foi projetado em parte para evitar os problemas de fragmentação que o sistema de arquivos "ext" anterior do Linux costumava ter), mas isso não significa que eles de alguma forma evitam a fragmentação completamente, ou mesmo significativamente mais do que NTFS. Em particular, qualquer tipo de sistema de arquivos "copiar na gravação" (como Btrfs ou ZFS ou NILFS) será, por design, fortemente fragmentado quando os arquivos forem substituídos no local.