Estoy tratando de crear un sistema de archivos encriptado que crezca según sea necesario con Linux. Estoy familiarizado con LUKS y cryptsetup.
Puedo crear un archivo vacío:
fallocate -l 512M /root/image
Puedo crear un contenedor LUKS en él:
cryptsetup -y luksFormat /root/image
Y luego "abrirlo":
cryptsetup luksOpen /root/image luksvolume
En este punto, solo puedo hacer un sistema de archivos en él:
mkfs.ext4 -j /dev/mapper/luksvolume
Todo está bien y elegante. Sin embargo, no aborda la parte de la pregunta "crecer bajo demanda".
La idea es que copiar un archivo de 2 Gb en el sistema de archivos cifrados "expandirá" la imagen para que sea lo suficientemente grande como para contener el archivo.
¿Es posible hacerlo?
mount
encryption
disk-volume
luks
Merc
fuente
fuente
Respuestas:
¡Si! Parece que es posible. Veamos cómo se puede lograr. Tenga en cuenta que esto no crea un verdadero sistema de archivos de crecimiento bajo demanda, ya que cuando el sistema de archivos alcanza el tamaño máximo del archivo disperso, informará errores de "falta de espacio" si aún se necesita escribir más datos.
Inicialmente, estaba investigando Thin Provisioning , una tecnología bien conocida para ahorrar espacio de almacenamiento en escenarios de virtualización. Desafortunadamente, en casos de uso comunes de Linux, parece estar disponible solo con LVM . Como esto parece un poco fuera del alcance de su pregunta, busqué algo más.
El segundo concepto que investigué es Sparse File . Esto se adapta exactamente a su pregunta y ... mi duda inicial fue: " OK. Puedo crear un archivo disperso. Pero, ¿qué sucede cuando lo inicializo como un contenedor LUKS? ¿Asignará tal inicialización todo el espacio disponible? Si no, ¿Qué sucederá cuando inicialice el sistema de archivos en dicho contenedor? ¿
mkfs.ext4
Asignará todo el espacio disponible? ". Como no tenía respuesta, decidí intentarlo. Entonces, veamos qué pasó.Comencemos desde mi sistema actual, donde solo tengo 3.3G de espacio libre dentro del
/repository
sistema de archivos:Creemos un archivo disperso 10G dentro de dicho sistema de archivos, con:
y verifiquemos que ... es realmente un archivo escaso:
OKAY. Entonces tenemos un archivo 10G , en un sistema de archivos que anteriormente tenía 3.3G de espacio libre. ¿Cuánto espacio libre aún tengo?
Todavía 3.3G. Agradable. Sparse-file son realmente ... sparse-file ;-) Vamos un paso adelante, creando un contenedor LUKS dentro de tal archivo 10G y ... veamos si nos quedamos sin espacio:
Así que ahora tengo un
secrets
contenedor abierto definido en la parte superior de mi archivo disperso 10G almacenado en un sistema de archivos que tiene solo 3.3G de espacio libre.¿Cuánto espacio libre aún tengo?
¡Maravilloso! Todavía 3.3GB. ¡Nuestro contenedor encriptado no requería mayormente espacio!
Verifiquemos si todo está bien o si hay algo extraño con nuestra configuración:
Todo parece estar bien, así que comencemos a usar ese contenedor para almacenar algo. Comencemos creando un sistema de archivos EXT4 dentro de él:
Parece que funcionó, ya que no había rastro de "fuera del espacio". Vamos a revisar:
Uhm ... así que sucedió algo. Hemos perdido algo así como 100 millones de espacio, pero .... es un comportamiento esperado: la creación del sistema de archivos EXT4 DO requiere la escritura de una gran cantidad de metadatos. Por lo tanto, es normal que el proceso de creación haya utilizado algo de espacio.
¿Es un sistema de archivos EXT4 "en funcionamiento"?
¡Si! Se ve bien.
Entonces, ahora tenemos un sistema de archivos EXT4 escrito dentro de un contenedor LUKS abierto definido en la parte superior de un archivo disperso 10G almacenado dentro de un sistema de archivos 3.3G.
Veamos si todo funciona correctamente, asignando espacio "a pedido".
Comencemos escribiendo 500 millones de datos ficticios en el FS cifrado
¿Hemos tenido éxito en la creación del archivo?
Se ve así.
¿Qué pasó con nuestro sistema de archivos real?
Uau! "Perdimos" un poco más de 500M. Eso es bueno, por cierto, ya que el espacio físico se asigna realmente a pedido.
Guardemos otro archivo de 2GB:
¿Que pasó?
Muy agradable. ¿Qué sucede si eliminamos un archivo?
Como era de esperar, con el archivo disperso el comportamiento es exactamente como el aprovisionamiento delgado: una vez asignado, el espacio de almacenamiento no se puede reclamar cuando se eliminan los archivos. Pero esto, en general, está bien. Tu no?
Entonces, en este punto, la respuesta a su pregunta debe estar completa. ¿Derecho?
Adición:
Veamos qué sucede cuando el almacenamiento de subrayado se llena:
¿Qué? parece que tuvo éxito! ¿Cómo ha sido esto posible? ¡Vamos a revisar!
Uhm ... se ve bien. ¿Estamos seguros?
nos hemos quedado sin espacio! Sin ningún error!
Incluso si sería bueno investigar lo que realmente sucedió ... Voy a dejar esto a su curiosidad y / o habilidades de solución de problemas de otros miembros de ServerFault ;-)
¡Que te diviertas!
Por cierto: he probado todo lo anterior, aquí:
fuente
rsync
tiene una--sparse
opción que debería crear archivos dispersos en el disco de destino.