Quiero almacenar algunos datos en el disco en Linux. Quiero que estos datos se almacenen en un bloque de disco continuo en el disco físico. Si en orden escribo estos datos en un archivo normal, tal vez el bloque que ocupa el archivo no sea continuo en el disco físico. ¿Hay alguna forma de hacer este trabajo?cómo almacenar un archivo en un bloque de disco continuo en Linux
Respuesta
Las particiones de disco son regiones continuas de un disco.
Así que una manera de hacer lo que quiere hacer es cambiar el tamaño de las particiones del disco y crear una nueva con gparted (GNOME) o PartitionManager (KDE) o similar - de un tamaño apropiado para su archivo.
A continuación, puede escribir directamente a su nueva partición (sin utilizar y sin pasar por un sistema de archivos) utilizando el archivo:
/dev/sdxn
Dónde sdxn = {sda1, sda2, ..., sdb1, ... ...} etc. es la letra/número de la partición.
Alternativamente, usted puede dejar de lado todo un disco escribiendo directamente a la misma (sin pasar por la tabla de particiones alltogether) utilizando el archivo:
/dev/sdx
Dónde SDX = {sda, sdb, sdc, etc ...} es la letra del disco.
Advertencia: No haga un error tipográfico y escriba el incorrecto (que tiene un sistema de archivos) o lo corromperá. Lo mejor es crear un enlace simbólico en -s/dev/sdxn/home/fred/mydata, y luego escribir siempre en el archivo mydata.
El código del sistema de archivos (dentro del kernel, por ejemplo, en linux-3.1.6/fs/ext4/
para sistemas de archivos ext4 dentro de la fuente del kernel linux-3.1.6) está administrando los bloques de disco utilizados para un archivo determinado. Entonces usted no puede organizar los bloques de disco de algunos de sus archivos usted mismo. Sin embargo, puede darle algunos consejos al kernel usando algunas llamadas extrañas al sistema.
Si no te gusta, puedes evitar el sistema de archivos al escribir directamente en una partición desmontada, por ej. al hacer llamadas de sistema write(2) a un descriptor de archivo obtenido por open(2) -por ejemplo /dev/sda2
; pero a menos que realmente sepas lo que estás haciendo (y la formulación de tu pregunta me hace sentir que no entiendes el papel exacto de los sistemas de archivos), no recomendaré hacer eso.
El código del sistema de archivos del kernel es bastante bueno, y la memoria caché del sistema de archivos kernel es muy eficiente.
Si desea acelerar sus lecturas, considere utilizar quizás las llamadas al sistema readahead(2) o fadvise(2) o madvise(2).
También podría, al crear su sistema de archivos, ajustarlo para sus fines particulares. Por ejemplo, si sabe que en su mayoría tendrá archivos bastante grandes, podría usar un tamaño de bloque más grande que el estándar (por ejemplo, mke2fs -b 8192
), etc.
Pero no crea que los trucos de software acelerarían significativamente su aplicación; si realiza una gran cantidad de IO de disco, el cuello de botella real es el hardware (por lo que puede ser más fácil usar SSD en lugar de discos duros).
Resulta que EXT4 tiene un tamaño máximo de extensión de 128MiB, por lo que los archivos más grandes que este no pueden ser contiguos en EXT4. Estas sugerencias que mencionas: ¿hay alguna llamada al sistema "extraña" para insinuar al núcleo sobre escritura? O tal vez para asignar un archivo contiguo de ceros que luego pueden escribirse. Estoy [buscando hacer esto] (http://unix.stackexchange.com/questions/80072/contiguous-copy-how-do-i-copy-files-contiguously) en FAT32 para archivos de LiveCD ISO (por lo general ~ 700MiB), y preferiblemente también en un sistema de archivos '* nix'. –
No puede solicitarlo a un sistema de archivos normal.
Si por alguna razón, realmente desea almacenar datos contiguos en el disco, debe usar un dispositivo sin procesar (gratuito) y administrar el diseño de los datos en él. Esto es lo que están haciendo algunas bases de datos. Tenga en cuenta que incluso en ese caso, no hay garantía de que los bloques sean contiguos. El dispositivo puede ser provisto por una capa RAID de hardware o software o ser un zvol de un grupo de ZFS.
- 1. cómo CORTAR un bloque en un disco SSD?
- 2. Emular un disco duro en Linux
- 3. Cómo almacenar una matriz de bytes como un archivo de imagen en el disco?
- 4. ¿Cómo guardar un archivo XML en un disco con python?
- 5. ¿Cómo almaceno datos JSON en un disco?
- 6. Escribir un archivo descargado binario en un disco en Java
- 7. Extensión de Chrome: cómo guardar un archivo en el disco
- 8. Clang bloque en Linux?
- 9. ¿Cómo puedo crear un archivo numpy .npy en el disco?
- 10. ¿Cómo elimino un archivo del disco en IntelliJ IDEA?
- 11. ¿Es posible almacenar un bloque dentro de un NSManagedObject?
- 12. Almacenar archivos en disco o MongoDB
- 13. Almacenar contenido web en un archivo JAR
- 14. ¿Cómo crear un archivo con un tamaño dado en Linux?
- 15. guardar un archivo (de corriente) en el disco usando C#
- 16. guardando Btrees en un archivo de disco y léelo
- 17. Cómo almacenar barra de navegación en un archivo?
- 18. ¿Cómo obtengo de manera programática el espacio libre en disco para un directorio en Linux?
- 19. ¿Cómo averiguar el espacio libre en disco para una ruta determinada en un shell de Linux?
- 20. Manipular un archivo en la memoria con PHP (sin crear un archivo temporal en el disco)
- 21. Crear un archivo en Linux utilizando C
- 22. Cómo hacer un reinicio continuo de un grupo de mongres
- 23. Detectar tamaño de bloque para cuota en Linux
- 24. ¿Cómo obtener el tamaño de archivo en el disco en Linux?
- 25. Nombre de archivo personalizado en un archivo de registro Log4Net continuo?
- 26. Cómo depurar cachés de E/S de disco en Linux
- 27. ¿Cómo puedo guardar un bloque de texto en modo visual en un archivo en Vim?
- 28. Cómo almacenar el resultado de diff en Linux
- 29. ¿Estructura en disco para almacenar un conjunto grande de enteros de 128 bits?
- 30. ¿Cómo grabo video en un disco local en AIR?
¿Por qué? ¿Qué intentas lograr? – Hasturkun