una tiene semana segundos segundo minutos minuto milesimas hora cuantos cuantas centesimas año file file-io filesystems data-persistence

file - semana - cuantos segundos tiene una hora



¿Después de cuántos segundos son lavados generalmente los búfers de escritura del sistema de archivos? (4)

La única forma de garantizar de forma confiable que los datos se hayan sincronizado es utilizar el mecanismo de sincronización específico del sistema operativo y los documentos de confiabilidad de PostgreSQL .

Cuando el sistema operativo envía una solicitud de escritura al hardware de almacenamiento, es poco lo que puede hacer para asegurarse de que los datos hayan llegado a un área de almacenamiento verdaderamente no volátil. Más bien, es responsabilidad del administrador asegurarse de que todos los componentes de almacenamiento garanticen la integridad de los datos.

Entonces, no, no hay soluciones realmente portátiles, pero es posible (pero difícil) escribir envoltorios portátiles e implementar una solución confiable.

Antes de sobreescribir datos en un archivo, me gustaría estar bastante seguro de que los datos antiguos están almacenados en el disco. Es potencialmente un archivo muy grande (varios GB), por lo que se necesitan actualizaciones en el lugar. Por lo general, las escrituras serán de 2 MB o más (mi plan es usar un tamaño de bloque de 4 KB).

En lugar de (o además de) llamar a fsync (), me gustaría retener (no sobrescribir) los datos antiguos en el disco hasta que el sistema de archivos haya escrito los datos nuevos. Las principales razones por las que no quiero confiar en fsync () es que la mayoría de los discos duros le mienten sobre hacer una sincronización fsync.

Entonces, lo que estoy buscando es cuál es la demora máxima típica para un sistema de archivos, sistema operativo (por ejemplo, Windows), disco duro hasta que los datos se escriben en el disco, sin usar fsync o métodos similares. Me gustaría tener números del mundo real si es posible. No estoy buscando consejos para usar fsync.

Sé que no hay una manera 100% confiable de hacerlo, pero me gustaría entender mejor cómo funcionan los sistemas operativos y los sistemas de archivos en este sentido.

Lo que encontré hasta ahora es: 30 segundos es / fue el valor predeterminado para / proc / sys / vm / dirty_expire_centiseconds . Luego, " las páginas sucias se vacían (se escriben) en el disco ... (cuando) ha transcurrido demasiado tiempo desde que una página permaneció sucia " (pero no pude encontrar la hora predeterminada). Entonces para Linux, 40 segundos parece estar en el lado seguro. ¿Pero esto es cierto para todos los sistemas de archivos / discos? ¿Qué hay de Windows, Android y demás? Me gustaría obtener una respuesta que se aplique a todos los sistemas operativos comunes / sistemas de archivos / tipos de discos, incluidos Windows, Android, discos duros normales, SSD, etc.


Permítanme exponer nuevamente este problema en términos poco caritativos: está tratando de controlar el comportamiento de un dispositivo físico que su controlador en el sistema operativo no puede controlar. Lo que intenta hacer parece imposible, si lo que quiere es una garantía real, en lugar de una buena conjetura. Si todo lo que quiere es una buena conjetura, bien, pero tenga cuidado con esto y documente en consecuencia.

Es posible que pueda resolver esto con el controlador de dispositivo correcto. El protocolo SCSI, por ejemplo, tiene un bit de Force Unit Access (FUA) en sus comandos READ y WRITE que ordena al dispositivo que omita cualquier caché interna. Incluso si los datos se escribieron originalmente en búfer, la lectura sin búfer debería poder verificar que realmente estaba allí.


Antes que nada, gracias por la información que mienten los discos duros sobre la descarga de datos, eso era nuevo para mí.

Ahora a su problema: desea asegurarse de que todos los datos que escribe se hayan escrito en el disco (nivel más bajo). Usted está diciendo que hay dos partes que deben controlarse: el momento en que el SO escribe en el disco duro y la hora en que el disco duro escribe en el disco.

Su única solución es usar un temporizador de lógica difusa para estimar cuándo se escribirán los datos.

En mi opinión, esta es la forma incorrecta. Usted tiene control sobre cuándo el sistema operativo está escribiendo en el disco duro, así que use la posibilidad y ¡controle! Entonces, solo el disco duro acostado es tu problema. Este problema no se puede resolver de manera confiable. Creo que debes decirle al usuario / administrador que debe tener cuidado al elegir el disco duro correcto. Por supuesto, podría ser una buena idea implementar el temporizador adicional que propuso.
Creo que depende de ti iniciar una serie de pruebas con diferentes discos duros y la herramienta de Brad Fitzgerald para obtener una buena estimación de cuándo los discos duros habrán escrito todos los datos. Pero, por supuesto, si el disco duro quiere mentir, nunca puede estar seguro de que los datos realmente se han escrito en el disco.


Hay muchas memorias caché involucradas en dar a los usuarios un sistema receptivo.

Hay memoria caché de la CPU, memoria caché de la memoria del kernel / sistema de archivos, caché de la memoria de la unidad de disco, etc. Lo que se pregunta es ¿cuánto tiempo tarda en vaciar todas las cachés?

O bien, otra forma de verlo es, ¿qué sucede si la unidad de disco se estropea? Todo el lavado no garantizará una operación exitosa de lectura o escritura.

Las unidades de disco se vuelven malas eventualmente. La solución que está buscando es cómo puede tener un sistema redundante de unidad de disco / unidad de disco de manera que el sistema sobreviva una falla de un componente y siga funcionando.

Podría mejorar la probabilidad de que el sistema siga funcionando con la ayuda de hardware como matrices RAID y otras configuraciones de alta disponibilidad.

En lo que respecta a la solución de software, creo que la respuesta es confiar en el sistema operativo para hacer lo óptimo. La mayoría de ellos limpia los buffers rutinariamente.