Como entendí, "archivo disperso" significa que el archivo puede tener 'huecos', por lo que los datos utilizados reales pueden ser más pequeños que el tamaño de archivo lógico.
¿Cómo los sistemas de archivos de Linux guardan archivos en el disco? Estoy principalmente interesado en ext4. Pero:
- ¿Se puede guardar un archivo no secuencialmente en el disco? Con eso, quiero decir que parte del archivo se encuentra en la dirección física X y la siguiente parte en la dirección física Y, que no está cerca de X + offset).
- ¿Puedo de alguna manera controlar la secuencialidad del archivo?
Quiero asignar un archivo de 10 GB. Quiero que sea secuencial en el disco y no dividido entre diferentes compensaciones. - ¿Actúa de manera diferente entre los diferentes tipos?
linux
filesystems
hard-disk
io
hudac
fuente
fuente
dmsetup
programa, una interfaz para el mapeador de dispositivos. Esta puede ser una buena opción si está planeando un almacenamiento similar a una base de datos.iso9660
yromfs
son incapaces de hacerlo y requieren almacenamiento continuo (de estos puedo enumerarlos fuera de la cabeza).Respuestas:
Sí; Esto se conoce como fragmentación de archivos y no es raro, especialmente con archivos más grandes. La mayoría de los sistemas de archivos asignan espacio según sea necesario, más o menos secuencialmente, pero no pueden adivinar el comportamiento futuro, por lo que si escribe 200MiB en un archivo y luego agrega otros 100MiB, existe una probabilidad distinta de cero de que ambos conjuntos de datos almacenarse en diferentes áreas del disco (básicamente, cualquier otra escritura que necesite más espacio en el disco, que ocurra después de la primera escritura y antes de la segunda, podría interponerse entre las dos). Si un sistema de archivos está casi lleno, la situación generalmente será peor: puede que no haya un área contigua de espacio libre lo suficientemente grande como para contener un nuevo archivo, por lo que tendrá que estar fragmentado.
Puede informar al sistema de archivos sobre el tamaño de destino de su archivo cuando se crea; esto ayudará al sistema de archivos a almacenarlo de manera óptima. Muchos sistemas de archivos modernos usan una técnica conocida como asignación diferida, donde el diseño en disco de un nuevo archivo se calcula lo más tarde posible, para maximizar la información disponible cuando se realiza el cálculo. Puede ayudar a este proceso utilizando la
posix_fallocate(3)
función para decirle al sistema de archivos cuánto espacio en disco debe asignarse en total. Los sistemas de archivos modernos intentarán realizar esta asignación secuencialmente.Los diferentes sistemas de archivos se comportan de manera diferente, sí. Los sistemas de archivos basados en registros como NILFS2 no asignan el almacenamiento de la misma manera que los sistemas de archivos basados en extensión como Ext4, y ese es solo un ejemplo de variación.
fuente
fallocate(3)
garantizará la secuencia de archivos? ¿O solo dará pistas sobre el sistema de archivos? No puedo entenderlo completamente de las páginas del manual.El comando
filefrag
le dirá cómo se almacena físicamente su archivo en su dispositivo:Si escribe su archivo de una sola vez, supongo que su archivo no estará fragmentado.
La página de manual de
fallocate
(1) es bastante clara:¿Es secuencial? El sistema primero intentará asignar los bloques secuencialmente. Si no puede, no te avisará.
fuente
ext4
.filefrag
está oculto en/usr/sbin
. Pero parece funcionar para usuarios comunes (en ext4, al menos). Puede ser instructivo parastrace
su funcionamiento ver cómo medir la fragmentación por sí mismo, si la falta de advertencia es un obstáculo para usted.Menciona archivos dispersos, y ninguna de las otras respuestas los ha mencionado.
La mayoría de los archivos no son escasos. La forma más común de crear un archivo es escribirlo todo de una vez, desde el principio hasta el final. No hay agujeros allí.
Sin embargo, puede decir "muévase a la posición 1,000,000,000,000 y escriba un byte allí". Esto creará un archivo que parece ser un etabyte grande, pero en realidad solo usa (probablemente) 4k en el disco. Este es un archivo escaso.
Puede hacer esto muchas veces para el mismo archivo, dejando pequeñas cantidades de datos dispersos en el vasto vacío.
Si bien esto puede ser útil, hay dos desventajas.
La primera es que el archivo estará fragmentado, que es lo que le preocupaba.
El segundo es que no todos los programas manejan bien estos archivos. Por ejemplo, algunos programas de respaldo intentarán respaldar el vacío y, por lo tanto, crear un respaldo que sea mucho más grande de lo necesario, posiblemente demasiado grande para el medio de respaldo.
fuente
Hay al menos un par de formas de lograr esto.
Use un sistema de archivos con mucho espacio libre y preasigne el espacio (por ejemplo, use un marcador de fin de datos específico de la aplicación y agregue datos aleatorios hasta que el tamaño del archivo alcance los 10 GB). No se garantiza que esto genere datos no fragmentados.
Use un sistema de archivos sin procesar (sin cocer) en lugar de ext4, etc. Los DBMS a veces lo hacen por razones de rendimiento. La desventaja es que tiene que hacer su propio almacenamiento en caché / diario / recuperación, etc.
Las instancias en las que gana mucho haciendo esto son relativamente raras: primero buscaría en otro lugar para optimizar el rendimiento.
Ver también
¿Es cierto que los sistemas de gestión de bases de datos suelen omitir los sistemas de archivos?
fuente
Si esto es solo una vez y no es importante cómo se almacena el archivo originalmente, solo importa el resultado, entonces simplemente puede guardar el archivo normalmente y luego ejecutar el desfragmentador de su sistema operativo. Luego puede verificar con esta respuesta si su archivo está en una sola pieza, si no, repita. Esta es la forma más fácil de hacerlo, sin usar comandos o programas externos, pero ciertamente no es el método más rápido, porque desfragmenta todo el disco.
fuente
aptitude search ~ddefrag
fueronddrescueview
y elnids
segmento TCP reensamblaje biblioteca. Su respuesta no es muy útil si no dice cómo se llama el programa o qué argumentos deben pasarse.