
Como se sabe, si algo malo puede suceder, sucederá. Probablemente, todos hemos tenido momentos en los que se borró accidentalmente un archivo importante o se eliminó texto en un editor de texto.
Si usted es un proveedor de hosting o propietario de un sitio web, probablemente se haya enfrentado a hackeos de cuentas de usuario o de su propio sitio. En tales casos, es crucial restaurar la cronología, encontrar el método de infiltración y la vulnerabilidad utilizada por el atacante.
Para resolver tales problemas, el sistema de archivos NILFS2 es una excelente opción.
Está presente en el núcleo de Linux desde la versión 2.6.30.
La característica especial de este sistema de archivos es que es similar a un sistema de control de versiones: siempre puede revertir el estado del sistema y ver cómo era hace un tiempo.
Para garantizar esta funcionalidad, no necesita configurar scripts de Cron, hacer instantáneas, etc. El sistema de archivos NILFS2 lo hace todo por sí mismo. Nunca reescribe datos antiguos y siempre escribe en nuevas áreas del disco, siempre que haya suficiente espacio de disco libre. Todo en estricta conformidad con el principio de Copy-on-Write.
De hecho, cualquier cambio en un archivo provoca automáticamente la creación de una nueva instantánea del sistema de archivos, por lo que puede usar este sistema de archivos como una máquina del tiempo y retroceder el estado de los archivos.
Historia
NILFS2 fue desarrollado en el seno de , de hecho, una empresa estatal (tiene el paquete de control) y la mayor empresa de telecomunicaciones de Japón. Más concretamente, en el laboratorio CyberSpace Laboratories bajo la dirección de .
No se sabe exactamente para qué fue desarrollado, sin embargo, se puede suponer que un sistema de archivos como este, con su funcionalidad de 'máquina del tiempo', es ideal para almacenar datos en los que los servicios de inteligencia pueden querer hurgar, para reproducir toda la imagen de mensajes de texto, correos electrónicos, etc.
NILFS2 también es, potencialmente, una herramienta muy valiosa para los servicios de seguridad interna, ya que permite recuperar todos los correos eliminados de la base de datos de correos y descubrir errores cometidos por empleados que posteriormente podrían intentar ocultar, borrando o modificando sus archivos.
¿Cómo se puede rastrear toda la historia de la correspondencia?En Linux, en servidores (y es allí donde se debe instalar NILFS2 para propósitos de seguridad interna), el método de almacenamiento de correos electrónicos se realiza muy a menudo mediante un sistema de archivos. El llamado formato . Solo es necesario instalar y configurar el almacenamiento de correos en Maildir. Otro formato es un gran archivo de texto que se puede analizar fácilmente en mensajes individuales.
Si el servidor de correo utiliza una base de datos, NILFS2 permitirá restaurar el historial exacto de cambios en la base y la posibilidad de restaurar la base en cualquiera de esos momentos. Luego, se deben utilizar las herramientas de la base de datos para ver qué había en ese momento...
Sin embargo, algo salió mal. O el gobierno japonés decidió no seguir con la vigilancia (al estilo del principio Yárova), o el rendimiento de NILFS2 en los HDD tradicionales resultó ser inferior al mínimo, y NILFS2 fue lanzada bajo la licencia GPL y rápidamente fue incorporada al núcleo de Linux, ya que los desarrolladores del núcleo no tenían objeciones al código escrito por altamente calificados japoneses.
¿A qué se asemeja NILFS2?
Desde el punto de vista de uso: a un sistema de control de versiones. Cada punto de control del sistema de archivos es un commit que se realiza automáticamente sin que el usuario lo sepa en cualquier cambio: ya sea eliminación, modificación del contenido de un archivo o cambio de permisos. Cada commit tiene un número que aumenta linealmente.
Desde la perspectiva del programador: a un buffer cíclico. El sistema de archivos acumula cambios y los graba en un bloque de aproximadamente 8 MB (2000 * 4096, donde 2000 es el número de elementos en el bloque y 4096 es el tamaño de la página de memoria). Todo el disco está dividido en esos chunks. La escritura se realiza de manera secuencial. Cuando se acaba el espacio libre, las instantáneas más antiguas se eliminan y los chunks se sobrescriben.
Las principales ventajas de NILFS2
- ¡Versionado!!!
- El procedimiento de recuperación del sistema de archivos tras un fallo es elemental: al arrancar, se busca el último chunk que tenga una suma de verificación válida y se establece el superbloque sobre él. Esta es prácticamente una operación instantánea.
- Debido a que la escritura siempre es lineal,
- puede mostrar buenos resultados al trabajar en SSD, con escrituras aleatorias lentas.
- NILFS2 ahorra recursos de SSD, ya que casi no existe el factor de multiplicación de escritura.
Más bien, no es más de 2.La cuestión es que al sobrescribir cíclicamente todo el disco, NILFS2 trasladará los datos inmutables a nuevos fragmentos (chunks).Si tenemos un 10% de datos inalterables en el disco, obtendremos un 10% de incremento en la escritura al realizar 1 sobrescritura completa. Y un 50% de incremento si el dispositivo está al 50% de su capacidad durante 1 sobrescritura completa del disco.
El máximo coeficiente de amplificación de escritura es 2. Esto es muy bajo considerando que todo se escribe de manera secuencial. En general, la multiplicación de la escritura será menor que la de un sistema de archivos convencional fragmentado con un sector de 4096 bytes. (Este pensamiento fue inspirado por ).
- La potencial simplicidad en la implementación de replicación en un sistema de archivos NILFS2 remoto
NILFS2 para /home
En sistemas operativos similares a Unix, generalmente hay una carpeta /home que almacena los datos de los usuarios. Diferentes programas guardan en esta carpeta su configuración correspondiente a cada usuario.
¿Y quién, si no los usuarios, es el que más suele cometer errores? Por lo tanto, como se dice, Dios mismo recomienda utilizar NILFS2 en /home.
Además, dado que ahora los SSD se han generalizado, no tenemos que preocuparnos por caídas significativas al usar sistemas de archivos CoW.
Sí, podemos crear instantáneas del sistema de archivos (snapshots) con la frecuencia que queramos tanto en ZFS como en BTRFS, pero siempre existe el riesgo de que un cambio de archivo perdido se encuentre entre las instantáneas. Y las instantáneas también requieren administración: deben eliminarse las antiguas. En NILFS2, todo esto ocurre automáticamente, prácticamente cada pocos segundos.
Creé un volumen lógico usando lvcreate (en el grupo de volúmenes nvme, un pool delgado). Recomiendo crearlos precisamente en el volumen lvm, ya que posteriormente puede ser fácilmente ampliado. Se recomienda tener un 50% de espacio libre en el disco con NILFS2 para una profundidad de versiones adecuada.
lvcreate -V10G -T nvme/thin -n homey lo formateé en NILFS2:
mkfs.nilfs2 -L nvme_home /dev/nvme/home
mkfs.nilfs2 (nilfs-utils 2.1.5)
Iniciando la escritura de los datos iniciales del sistema de archivos en el dispositivo
Blocksize:4096 Dispositivo:/dev/nvme/home1 Tamaño del dispositivo:10737418240
¡Inicialización del sistema de archivos exitosa!
Después de esto, es necesario copiar todos los datos del actual /home.
Lo hice inmediatamente después de encender la computadora, antes de ingresar a mi cuenta, desde el usuario root. Si hubiera iniciado sesión como mi usuario, algunos programas habrían abierto sockets y archivos en la carpeta de mi usuario /home/user, lo que habría dificultado la copia limpia. Como se sabe, la carpeta de inicio para el usuario root generalmente se encuentra en /root, por lo que no se abrirán archivos en la partición /home.
mkdir /mnt/newhome
mount -t nilfs2 /dev/nvme/home /mnt/newhome
cp -a /home/. /mnt/newhome En relación con la última línea, véase. .
A continuación, modificamos /etc/fstab, donde se monta el sistema de archivos para /home, en
/dev/disk/by-label/nvme_home /home nilfs2 noatime 0 0
La opción noatime esto es necesario para mejorar el rendimiento, de modo que al acceder a los archivos no se cambie el atime. Luego reiniciamos.
Tipos de instantáneas en NILFS2.
Una instantánea normal sin protección contra eliminación se llama punto de control (checkpoint o punto de restauración).
Una instantánea con protección contra eliminación automática se llama snapshot, y a partir de ahora se le llama simplemente instantánea.
La visualización de los puntos de control se realiza con el comando lscp.
Visualización de instantáneas (snapshots) lscp -s.
También podemos crear instantáneas y puntos de control en cualquier momento usando:
mkcp [-s] dispositivoRestaurando datos.
NILFS nos permite montar tantas instantáneas antiguas como queramos simultáneamente con el trabajo en la rama principal del sistema de archivos. Pero solo en modo de solo lectura.
Todo está estructurado de esta manera. Los puntos de control normales que crea NILFS2 pueden ser eliminados automáticamente en cualquier momento (cuando se agote el espacio en disco o según las reglas de nilfs_cleanerd), por lo que antes de montar debemos convertir el punto de control en una instantánea o, en ruso, fijar la instantánea.
chcp ss número_del_punto_de_controlDespués de esto, podemos montar la instantánea, por ejemplo, así:
mount -t nilfs2 -r -o cp=número_del_punto_de_control /dev/nvme/home /mnt/nilfs/número_del_punto_de_control Después de lo cual copiamos los archivos que estamos recuperando desde la instantánea a /home.
Y posteriormente levantamos la bandera de no eliminabilidad de la instantánea, para que en el futuro el recolector de basura automático pueda eliminar datos obsoletos:
chcp cp número_del_punto_de_controlUtilidades para NILFS2
Aquí es donde hay un problema. Sí, por supuesto, podemos crear sistemas de archivos, cambiar su tamaño en línea, ver la lista de puntos de control, crearlos y eliminarlos. El paquete nilfs2-utils proporciona un conjunto mínimo de herramientas.
Dado que NTT ha cancelado su financiación, no hay utilidades de bajo nivel rápidas que permitan extraer el historial de cambios de archivos o hacer diffs entre instantáneas.
Mi utilidad n2u
Para llenar este vacío, escribí , que puede extraer el historial de cambios de un archivo/directorio específico:
n2u log filenameLa salida es aproximadamente así:
CHECKPOINT FECHA HORA TIPO TAMAÑO MODO
1787552 2019-11-24 22:08:00 primero 7079 cp
1792659 2019-11-25 23:09:05 cambiado 7081 cpFunciona bastante rápido para el método de implementación elegido: busca diferencias entre archivos mediante el método de bisección, montando y comparando rápidamente archivo/directorio en diferentes instantáneas.
Se puede establecer un rango de puntos de control usando la clave -cp CP1:CP2 o -cp {AÑO-MES-DÍA}:{AÑO-MES-DÍA}.
También se puede ver la diferencia entre puntos de control para un archivo o directorio específico:
n2u diff -r cp1:cp2 filenameSe puede extraer toda la cronología de cambios: todas las diferencias entre los puntos de control de un archivo/directorio específico:
n2u blame [-r cp1:cp2] filenameEl intervalo de fechas en este comando también es compatible.
Llamado a los desarrolladores
Hay muchos expertos en Habr. Por favor, mejoren NILFS2. ¡Implementen replicación, diffs rápidos de bajo nivel entre revisiones, reflink y otras mejoras!
Enlaces
.
Repositorios:
.
.
Boletines:
. Identificador para suscripción linux-nilfs.
.
.
.
Agradecimientos:
- Desarrolladores de NILFS2: Ryusuke Konishi, Koji Sato, Naruhiko Kamimura, Seiji Kihara, Yoshiji Amagai, Hisashi Hifumi y Satoshi Moriai. Otros contribuyentes importantes son: Andreas Rohner, Dan McGee, David Arendt, David Smid, dexen deVries, Dmitry Smirnov, Eric Sandeen, Jiro SEKIBA, Matteo Frigo, Hitoshi Mitake, Takashi Iwai, Vyacheslav Dubeyko.
- A las compañías Amblin Entertainment y Universal Pictures por la maravillosa serie de películas . La primera imagen de la publicación se toma de la película «Regreso al futuro — 3».
- A la empresa por el apoyo y la oportunidad de publicar en su blog en Habr.
P.D. Envía errores reportados por mensaje privado. Aumentaré tu karma por esto.
Puedes experimentar con NILFS2, pidiendo una máquina virtual en con el cupón a continuación. Para todos los nuevos clientes, un período de prueba gratuito de 3 días.
Fuente: habr.com
