
Como saben, si los problemas pueden suceder, entonces sucederán. Probablemente, todos tuvieron casos en los que un archivo importante nuevo se eliminó accidentalmente, o el texto en un editor de texto se seleccionó y eliminó accidentalmente.
Si usted es el proveedor de alojamiento o el propietario del sitio, entonces probablemente se enfrentó a la piratería de cuentas de usuario o de su sitio. En tales casos, es importante restaurar la cronología, encontrar una forma de penetración y la vulnerabilidad que utilizó el atacante.
Para resolver estos problemas, el sistema de archivos NILFS2 es perfecto.
Ha estado presente en el kernel de Linux desde la versión 2.6.30.
Una característica de este sistema de archivos es que es similar a un sistema de control de versiones: siempre puede retroceder el estado del sistema y ver lo que era hace algún tiempo.
Para proporcionar esta funcionalidad, no necesita configurar scripts de Cron, hacer instantáneas, etc. El sistema de archivos NILFS2 hace todo esto por sí mismo. Ella nunca sobrescribe datos antiguos y siempre escribe en nuevas áreas del disco si hay suficiente espacio libre en el disco. De acuerdo con el principio de Copia en escritura.
De hecho, cualquier cambio en el archivo implica la creación automática de una nueva instantánea del sistema de archivos, por lo que puede utilizar este sistema de archivos como una máquina del tiempo y rebobinar el estado de los archivos.
La historia

NILFS2 se desarrolló en las entrañas de
Nippon Telegraph and Telephone Corporation , de hecho, de propiedad estatal (tiene una participación de control) y la compañía de telecomunicaciones más grande de Japón. Más específicamente, los Laboratorios CyberSpace liderados por
Ryusuke Konishi .
Por qué se desarrolló específicamente: se desconoce, sin embargo, se puede suponer que tal FS, con su funcionalidad de "máquina del tiempo", es ideal para almacenar datos en los que es posible que desee profundizar en los servicios especiales para reproducir la imagen completa de SMS, correos electrónicos, etc.
NILFS2 también es, potencialmente, una herramienta muy valiosa para los servicios de seguridad interna, ya que le permite recuperar todas las cartas eliminadas en la base de datos de correo, abrir las jambas de los empleados que posteriormente pueden intentar disimularlos eliminando o cambiando sus archivos.
¿Cómo puedo rastrear toda la historia de la correspondencia?En Linux, en los servidores (y vale la pena poner NILFS2 allí para fines de seguridad interna), el método de almacenamiento de archivos de correos electrónicos a menudo se usa para almacenar mensajes de correo. El llamado formato
Maildir . Es suficiente instalar
Courier Mail Server y configurar el almacenamiento de cartas en Maildir. Otro formato de
mbox es un archivo de texto grande que se analiza fácilmente en mensajes individuales.
Si el servidor de correo usa la base de datos, entonces NILFS2 permitirá restaurar el momento exacto de los cambios de la base de datos y la capacidad de restaurar la base de datos en cualquiera de estos puntos. Y luego necesita usar las herramientas de la base de datos para ver lo que había en ese momento ...
Sin embargo, algo salió mal. O el gobierno japonés decidió no seguir a todos (a principio de Yarovaya), o el rendimiento de NILFS2 en los discos duros tradicionales resultó ser inferior a la placa base, y NILFS2 se lanzó bajo la licencia GPL y entró rápidamente en el kernel de Linux, ya que hubo quejas especiales sobre el código escrito japoneses altamente calificados, los desarrolladores del kernel de Linux no tenían.
¿Cómo se ve NILFS2?
Desde el punto de vista del uso: en el sistema de control de versiones
SVN . Cada punto de control de FS es una confirmación que se realiza automáticamente sin el conocimiento del usuario ante cualquier cambio: ya sea para eliminar, cambiar el contenido de un archivo o derechos de acceso. Cada confirmación tiene un número que aumenta linealmente.
Desde el punto de vista del programador: en un búfer circular. El sistema de archivos guarda los cambios y los escribe en una pieza de aproximadamente 8 MB (2048 * 4096, donde 2048 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 tales trozos. La grabación está en secuencia. Cuando se agota el espacio libre, se eliminan las imágenes más antiguas y se sobrescriben los fragmentos.
Bollos básicos NILFS2
- Versionado !!!
- El procedimiento para recuperar un sistema de archivos después de una falla es elemental: cuando se carga, busca el último fragmento que tiene la suma de verificación correcta e instala un superbloque en él. Esto es casi una operación instantánea.
- Debido al hecho de que la grabación siempre es lineal, entonces:
- puede mostrar buenos resultados cuando se trabaja en SSD, con grabación aleatoria lenta.
- NILFS2 ahorra recursos SSD ya que casi no hay multiplicador de registros.
Más precisamente, no es más de 2.El hecho es que durante la reescritura cíclica de todo el disco, NILFS2 transferirá datos inmutables a nuevas piezas (fragmentos).
Si tenemos un 10% de datos que no cambian en el disco, obtendremos un aumento del 10% en la grabación con 1 reescritura completa. Bueno, un aumento del 50% con un dispositivo lleno del 50% para 1 reescritura completa del disco.
La ganancia máxima de grabación es 2. Esto es muy pequeño considerando que todo está escrito secuencialmente. En general, la animación del registro será menor que la de un sistema de archivos fragmentado regular con un sector de 4096 bytes. (Comentó en los pensamientos).
- Posible facilidad de replicación a un NILFS2 FS remoto
NILFS2 para / hogar
En los sistemas operativos tipo Unix, por regla general, hay una carpeta / home en la que se almacenan los datos del usuario. Varios programas guardan sus configuraciones relacionadas con un usuario específico en esta carpeta.
¿Y quién, si no los usuarios, corta con mayor frecuencia? Por lo tanto, como dicen, Dios mismo ordenó usar NILFS2 en / home.
Además, con la distribución generalizada de SSD, ahora no podemos preocuparnos por la fuerte reducción al usar sistemas de archivos CoW.
Sí, podemos crear instantáneas FS con la frecuencia que queramos en ZFS y BTRFS, pero siempre existe el riesgo de que se produzca un cambio de archivo perdido entre las instantáneas. Y las imágenes aún deben administrarse: elimine las antiguas. En NILFS2, todo esto ocurre automáticamente, literalmente cada pocos segundos.
Creé un volumen lógico usando lvcreate (en el grupo de volumen nvme, grupo delgado y delgado). Recomiendo crearlo en el volumen lvm, ya que más tarde se puede expandir fácilmente. Recomiendo tener un 50% de espacio libre en disco con NILFS2 para una profundidad de versión decente.
lvcreate -V10G -T nvme/thin -n home
y formateado en NILFS2:
mkfs.nilfs2 -L nvme_home /dev/nvme/home mkfs.nilfs2 (nilfs-utils 2.1.5) Start writing file system initial data to the device Blocksize:4096 Device:/dev/nvme/home1 Device Size:10737418240 File system initialization succeeded !!
Después de eso, debe copiar todos los datos del actual / hogar.
Hice esto inmediatamente después de arrancar la computadora, antes de ingresar a mi cuenta, desde el usuario root. Si inicié sesión como mi usuario, algunos programas abrirían sockets y archivos en la carpeta / inicio / usuario de mi usuario, lo que dificultaría la copia. Como sabe, la carpeta de inicio para el usuario raíz generalmente se encuentra en la ruta / root, por lo que no se abrirán archivos en la sección / home.
mkdir /mnt/newhome mount -t nilfs2 /dev/nvme/home /mnt/newhome cp -a /home/. /mnt/newhome
Para la última línea, vea el artículo .
A continuación, edite / etc / fstab, que monta el sistema de archivos para / home, en
/dev/disk/by-label/nvme_home /home nilfs2 noatime 0 0
La opción
noatime
necesaria para mejorar el rendimiento para que atime no cambie con cada acceso a archivos. A continuación, reiniciamos.
Tipos de imágenes en NILFS2.
Una instantánea normal sin inmunidad de eliminación se denomina punto de control (punto de control o punto de recuperación).
Una instantánea con protección de eliminación automática se denomina instantánea, luego solo una instantánea.
La visualización de los puntos de control se realiza mediante el comando lscp
Ver instantáneas lscp -s
Podemos crear instantáneas y puntos de control nosotros mismos en cualquier momento usando:
mkcp [-s]
Recuperar datos.
NILFS nos permite montar tantas imágenes antiguas como necesitemos en paralelo con el trabajo con la rama FS principal. Pero solo en modo lectura.
Todo está organizado de esta manera. Los puntos de control habituales que hace NILFS2 se pueden eliminar automáticamente en cualquier momento (cuando se agota el espacio en disco o según las reglas de nilfs_cleanerd), por lo tanto, antes de montar, debemos traducir el punto de control en una instantánea o, en ruso, arreglar la imagen.
chcp ss _
Después de eso, podemos montar la instantánea, por ejemplo, así:
mount -t nilfs2 -r -o cp=_ /dev/nvme/home /mnt/nilfs/_
Luego copiamos los archivos recuperados de la instantánea a / home.
Y luego eliminamos la bandera de indistinguibilidad de la imagen, para que en el futuro el recolector automático de basura pueda eliminar datos obsoletos:
chcp cp _
Utilidades para NILFS2
Pero este es el problema. Sí, por supuesto, podemos crear un sistema de archivos, cambiar su tamaño en línea, ver una lista de puntos de cadena, crearlos y eliminarlos. El paquete nilfs2-utils proporciona un conjunto mínimo de caballeros.
Dado que NTT redujo la financiación, no hay utilidades rápidas de bajo nivel que puedan mostrar el historial de cambios de archivos y hacer diferencias entre las instantáneas.
Mi utilidad n2u
Para llenar este vacío, escribí
mi utilidad n2u , que puede mostrar el historial de cambios de un archivo / directorio específico:
n2u log filename
El resultado es algo como esto:
CHECKPOINT DATE TIME TYPE SIZE MODE 1787552 2019-11-24 22:08:00 first 7079 cp 1792659 2019-11-25 23:09:05 changed 7081 cp
Funciona bastante rápido para el método de implementación elegido: busca diferencias entre archivos utilizando el método de bisección, montando y comparando rápidamente el archivo / directorio en diferentes imágenes.
Puede establecer el rango de puntos de control con la tecla
-cp CP1:CP2
o
-cp {YEAR-MM-DD}:{YEAR-MM-DD}
.
También puede ver la diferencia entre los puntos de control para un archivo o directorio específico:
n2u diff -r cp1:cp2 filename
Puede mostrar toda la cronología de los cambios: todas las diferencias entre los puntos de control de un archivo / directorio específico:
n2u blame [-r cp1:cp2] filename
El rango de fechas en este comando también es compatible.
Llorar a los desarrolladores
Hay muchos especialistas en Habré. Por favor, termine NILFS2. ¡Haga la replicación, diferencia rápida de bajo nivel entre revisiones, reflink y otras cosas!
Referencias
Sitio web oficial de NILFS .
Repositorios:
NILFS2 .
NILFS2 Utilidades y módulos .
Boletines informativos:
Correo electrónico del desarrollador NILFS2 . El identificador para la suscripción de linux-nilfs.
Archivo de boletines .
Guía de configuración de Nilfs_cleanerd .
Pruebas comparativas de rendimiento de EXT4, Btrfs, XFS y NILFS2 .
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.
- Amblin Entertainment y Universal Pictures por su maravillosa serie de películas "Regreso al futuro" . La primera foto de la publicación fue tomada de la película "Regreso al futuro - 3".
- Empresas de RUVDS por su apoyo y la oportunidad de publicar en su blog en Habré.
PS Errores directos que notas en PM. Aumento el karma para esto.
Puede experimentar con NILFS2 ordenando una máquina virtual de
RUVDS para el cupón a continuación. Para todos los nuevos clientes, un período de prueba gratuito de 3 días.
