
QuierotodoMis archivos en un sistema de archivos ext4 no están fragmentados por varias razones. Lamentablemente e4defrag
(aconsejado aquí:Cómo desfragmentar un sistema de archivos ext4) no logra desfragmentar varios archivos. ¿Cuáles son mis alternativas?
El sistema de archivos ya tiene todos los archivos (no deben cambiarse de ninguna manera) y está casi lleno. Hay varios bloques libres (según df -h
: 434M disponibles de 85G y 80G usados) que se pueden utilizar como buffer. No necesito que el sistema de archivos esté montado mientras lo desfragmento. Además, tengo otro sistema de archivos disponible con suficiente espacio para usarlo como búfer.
Una idea que tengo es mover los archivos a otro sistema de archivos y luego copiarlos nuevamente de alguna manera diciéndole al sistema de archivos que los almacene de forma contigua.
[EDITAR]
Acabo de descubrir que no puedo confiar en e4defrag
la producción. Cuenta los archivos con más de una extensión como fragmentados, mientras sabe que las extensiones son contiguas:
$ sudo filefrag file.file
file.file: 1 extent found
$ sudo e4defrag -vc file.file
e4defrag 1.45.5 (07-Jan-2020)
<File>
[ext 1]: start 22388736: logical 0: len 32768
[ext 2]: start 22421504: logical 32768: len 32768
[ext 3]: start 22454272: logical 65536: len 32768
[ext 4]: start 22487040: logical 98304: len 27962
Total/best extents 4/1
Average size per extent 126266 KB
Fragmentation score 0
[0-30 no problem: 31-55 a little bit fragmented: 56- needs defrag]
This file (file.file) does not need defragmentation.
Done.
Respuesta1
Quiero que todos mis archivos en un sistema de archivos ext4 no estén fragmentados por alguna razón.
Si bien existen razones legítimas para desfragmentar, ninguna requierecada unoarchivo para ser desfragmentado y contiguo. Las razones principales por las que alguien podría querer desfragmentar todos los archivos están relacionadas con OCPD, lo cual es una completa pérdida de tiempo porque el sistema de archivos se "fragmentará" nuevamente poco después de montarse rw.
El sistema de archivos... está casi lleno...
En ese escenario, probablemente no podrá desfragmentar todos los archivos porque los programas de desfragmentación de Linux tienden a funcionar a nivel de archivo y no necesariamente tiene suficiente espacio libre contiguo para desfragmentar cada archivo.
Una idea que tengo es mover los archivos a otro sistema de archivos y luego copiarlos nuevamente...
Esa es tu opción más viable. Sin embargo, la asignación de archivos específica la determina el controlador del sistema de archivos.
Para reordenar bloques basta con tener un bloque libre como buffer.
Los desarrolladores de sistemas de archivos de Linux no le han dado a la desfragmentación la misma prioridad que los desarrolladores de Windows. Así que el problema no es tanto que sea técnicamente imposible, sino que nadie se ha molestado en escribir ningún programa para hacerlo.
El fs puede configurarse en ro después de la desfragmentación.
Luego use un sistema de archivos diseñado para uso ro, como squashfs. Todos los archivos serán desfragmentados, contiguos e incluso comprimidos.
Respuesta2
Si algunos de sus archivos son grandes, puede ser técnicamente imposible desfragmentarlos todos sin reformatear el sistema de archivos.
Cualquiersistema de archivos ext4se compone de una secuencia de grupos de bloques. De forma predeterminada, cada grupo de bloques tiene una longitud de 128 MiB.
Cada grupo de bloques comienza con un conjunto de metadatos del sistema de archivos (superbloque, descriptor de grupo, mapas de bits de asignación y tablas de inodos) seguidos de bloques de datos reales utilizados por los archivos que pertenecen a ese grupo de bloques. Esto significa que los metadatos del sistema de archivos se encuentran dispersos de manera casi uniforme en todo el dispositivo.
Sin embargo, gracias a la flex_bg
función opcional, se pueden agregar varios grupos de bloques en uno solo más grande. mke2fs
ha estado creando sistemas de archivos de forma predeterminada con 16 grupos de bloques empaquetados juntos desde 2008. Suponiendo que no haya cambiado esto al crear el sistema de archivos usando la -G
opción mkfs, es probable que su sistema de archivos esté dividido en grupos flexibles de 2 GiB.
A menos que todos sus archivos sean significativamente más pequeños que 2 GiB, inevitablemente se encontrará con una situación en la que el siguiente archivo a almacenar tendrá que fragmentarse en dos o más grupos de bloques (flexibles). Por supuesto, se garantiza que esto sucederá si alguno de sus archivos es más grande que los bloques de datos utilizables en un grupo de bloques (flexibles).
Para lograr su objetivo, probablemente tendrá que reformatear el sistema de archivos con una configuración de -G
opción mucho más alta que la predeterminada 16 para que el sistema de archivos utilice grupos de bloques flexibles realmente grandes.
Respuesta3
Antes de DOS 6, el consejo habitual para desfragmentar una partición FAT era:
- Copie los archivos de la partición a otra cosa;
- Limpiar la partición;
- Vuelva a crear la estructura del directorio en la partición vacía; y
- Copie los archivos nuevamente.
Nunca probé esto porque salió MS-DOS 6 (con su utilidad de desfragmentación incluida) antes de que la desfragmentación se convirtiera en un problema para mí.