Quiero instalar un Pi en mi automóvil y usarlo para registrar datos de GPS. ¿Qué estrategias (en mi programa) puedo seguir para minimizar los problemas debido a que se interrumpe la alimentación al escribir en la tarjeta SD?
Hasta ahora puedo pensar en:
- Almacenar datos y solo escribir de forma intermitente
- Solo escribir cuando la velocidad del vehículo no está cerca de cero (es decir, a punto de apagar el encendido)
- Escriba en un archivo temporal que pueda permitirme corromper, luego insista en que de vez en cuando
Me pregunto si hay
- Modos del sistema de archivos en los que me puedo quedar la mayor parte del tiempo que sobrevivirían a un apagado repentino
- Formas de hacer que la recuperación de la alimentación baja mientras se escribe sea más confiable
Obviamente (creo) que alguna pérdida de datos es inevitable, pero ¿cómo podría minimizarla?
fuente
Todo depende de la cantidad de datos que esté dispuesto a perder. Si no puede permitirse perder nada, requerirá que encuentre una manera de conectar su PI directamente a la batería (con un fusible, por supuesto), para que no se apague cuando se apaga el encendido.
Por otra parte, una batería de automóvil típica tendría alrededor de 80 Ah y el PI consumirá entre 500-1200 mA (dependiendo de si es un modelo A o B), por lo que probablemente agote la batería de su automóvil entre 2 y 6 días, así que no creo que encuentres esto aceptable.
Si aún no puede permitirse perder datos, es posible que pueda diseñar algún tipo de hardware personalizado donde pueda controlar la fuente de alimentación desde el PI y también monitorear el estado del encendido. Si el encendido está apagado, vacia los datos a la tarjeta SD, apaga el sistema operativo y luego, como último paso, apaga la fuente de alimentación. La fuente de alimentación también debe encenderse cuando se enciende el encendido, para permitir que el PI se inicie nuevamente. Todo esto es factible, pero es un proyecto bastante grande.
Sin embargo, si considera aceptable perder algunos datos al apagar, diseñaría el daemon que guarda los datos del GPS periódicamente en un archivo de tal manera que ejecute una llamada fsync después de cada escritura (para vaciar los datos en la SD- tarjeta). Si hace esto cada pocos segundos (y también está usando el sistema de archivos ext4 de diario predeterminado), esto probablemente significaría que solo perderá los últimos segundos con cada pérdida de energía.
Tenga en cuenta que Raspbian (al menos mi instalación) no venía con un fsck del sistema de archivos raíz en el momento del arranque. Debe hacer lo siguiente para habilitarlo en cada montaje:
También debe cambiar la última línea del sistema de archivos raíz en / etc / fstab para que contenga un 1, como este:
Si no hace esto, es posible que su sistema de archivos raíz no se pueda iniciar de vez en cuando, por lo que si está ejecutando un sistema sin cabeza donde apaga la alimentación sin hacer un apagado controlado, esto es absolutamente necesario.
fuente
Esto parece ser una adición buena que muy bien sanear el sistema eléctrico del coche para el pi, y mango detectar la pérdida de contacto del coche, el suministro de la PI con el poder en el ínterin, y envían una señal al pin GPIO para indicarle que debe apagar el PI de forma segura .
Lamentablemente, parece estar agotado en este momento, pero puede realizar un pedido por adelantado.
fuente
Si debe lidiar con la pérdida de energía con frecuencia, la elección cuidadosa del sistema de archivos y los métodos de arranque (solo lectura, diario, fsck desatendido, recuperación rápida ...) podría ayudar a garantizar que el sistema se ejecute de manera confiable.
En el lado de la aplicación, el uso de ciertas bases de datos ( ¿ sqlite ?) Debería garantizar una escritura completa o ningún estado de escritura en los datos cuando se vuelve a abrir.
Mejor sería de hecho la de tratar de evitar tener que apagar excepto cuando sea necesario. Con un controlador más pequeño, a menudo observa la fuente de alimentación y, si se cae, tiene una pequeña ventana para apagar las cosas, guardar los datos no volátiles y posiblemente suspender o detener el procesador hasta que se restablezca la alimentación. Con un gran procesador de propósito general como el PI, eso podría requerir una brecha bastante larga.
Por lo tanto, tener una reserva de energía en línea y una advertencia cuando se corta el suministro principal podría ayudar. Si tiene fallas, es posible que deba diferenciar entre la pérdida de energía temporal (no escriba, contenga la respiración) y el apagado probable (guardar y limpiar).
En un automóvil tendrá +12/24 V y PI usa +5 V, por lo que hay potencial (heh) para algo dentro o antes del convertidor. Es posible que pueda dar diodo-O otra batería de 9-12 V de tamaño razonable antes del convertidor que se hará cargo cuando la tensión caiga, por ejemplo. Teniendo en cuenta el consumo de energía relativamente pesado, será necesario mantenerlo cargado de alguna manera. También es posible que pueda instalar un comparador o un monitor de voltaje especial para la línea de alimentación principal y recibir una alerta cuando se desconecte la alimentación principal. (No sé de antemano cuál sería una forma rápida de señalar un IP).
fuente