2012-04-09 13 views
6

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

+2

¿Por qué? ¿Qué intentas lograr? – Hasturkun

Respuesta

7

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.

3

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).

+0

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'. –

3

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.

Cuestiones relacionadas