Se ejecuta en una tarjeta SD de solo lectura

20

He configurado Raspberry Pi para ejecutar XBMC, y quiero que se inicie para reproducir siempre una lista de reproducción y archivos en la tarjeta SD. He desactivado la actualización automática de Raspbmc. Todavía funciona bien cuando cambio la tarjeta SD a la posición de "bloqueo". Ahora mis dudas son:

  1. ¿El sistema de tarjeta SD de "solo lectura" funciona todo el tiempo en mi aplicación?

  2. Dado que la tarjeta SD siempre está en modo de solo lectura, si no uso el comando de apagado y apago el interruptor de encendido, ¿dañará mi sistema?

  3. Incluso si esto funciona de manera confiable, siempre aparecerá el mensaje "Raaspbmc no se cerró correctamente". ¿Hay alguna forma de deshabilitar este mensaje cuando se enciende el Pi?

hyiu00
fuente
1
Si desea que esto funcione de manera confiable, deberá asegurarse de que los sistemas de archivos apropiados también estén montados como de solo lectura.
Jivings

Respuestas:

14

Tuve un uso similar. Estoy usando el Pi para la difusión de páginas web en la entrada de un edificio. Encendido de la Pi a través del puerto USB del televisor.

Montaje / solo lectura.

Para que sea a prueba de pérdida de potencia, monté / solo lectura cambiando una línea en /etc/fstab

/dev/mmcblk0p2  /               ext4    defaults,noatime,ro  0       1

Bastante simple. Pero algunos procesos en una máquina funcional necesitan escribir.

Mount / tmp en la memoria.

Muchas cosas escriben, /tmpasí que lo monté en la memoria agregando una línea a/etc/fstab

tmpfs           /tmp            tmpfs   defaults,size=30M    0       0

Tenía un Pi de 512 MB disponible, así que hice / tmp 30M de gran tamaño.

Deshabilitar servicios No necesito que escriba.

Lo deshabilité rsyslogpara evitar que inicie sesión y dphys-swapfileya que no tiene un lugar real para escribir. Ejecutar sin intercambio generará problemas si realiza trabajo pesado que requiere mucha memoria. En mi caso, ejecutar un solo proceso midori durante un día, no lo es. cat /etc/rc2.d/READMEen tu Pi sobre cómo hacer eso. (Raspbian comienza en el nivel de ejecución 2 por defecto, raspbmc puede diferir)

Dejar que los servicios que no necesito de imitación de escritura.

Puede proporcionar acceso de escritura a un sistema de archivos en la memoria como lo hace un live-cd; Con una unión de montaje . Pero no me gustó la posibilidad de compilar mi propio kernel para unionfs o los aufs posteriores . Por suerte unionfs-fuseestá preconstruido disponible. No se puede montar en unión /, pero ¿realmente necesito eso?

Ejecutando midori necesito X para trabajar. X quiere escribir /home/pimientras inicio sesión automáticamente como pi y en un par de lugares en /vardecidí montarlos en lugares usando unionfs.

# move original /var and /home aside
mkdir /ro
mv /var /ro
mv /home /ro
# create mount points
mkdir /var /home

y añadió 2 líneas a /etc/fstab

unionfs-fuse#/tmp=rw:/ro/var=ro  /var  fuse   cow,allow_other,nonempty
unionfs-fuse#/tmp=rw:/ro/home=ro  /home  fuse   cow,allow_other

Esto es bastante desagradable, ya que escribe en / var, / home y / tmp todos terminan en / tmp. Pero solo necesito que mi máquina funcione durante 8 a 10 horas, y luego se corta la energía. Entonces esto servirá.

Montaje de lectura y escritura al ajustar cosas

Cuando cambié de red, el /etc/resolv.confque escribió dhclient ya no funcionaba.

$ sudo mount / -o remount,rw
$ ifdown eth0; ifup eth0
$ sudo reboot

No olvide apagar limpiamente o volver a montar ro después de volver a montar rw.

PD

Si puedes leer alemán, hay una forma más limpia (de archive.org). Deutsche Gründlichkeit ...

Chris Wesseling
fuente
4

El pin de posición de bloqueo de la tarjeta SD no está conectado en absoluto en la PCB, por lo que su bloqueo es virtual a menos que la tarjeta tenga un mecanismo de bloqueo interno. Intente escribir cualquier cosa en la tarjeta SD mientras está bloqueada y compruébelo usted mismo.

avra
fuente
4

El interruptor de solo lectura de SD es, en el mejor de los casos, una opción de software. Casi todos los dispositivos que tengo lo ignorarán, y si el comentario de avra es correcto, es posible que Raspberry Pi no tenga forma de saber si está encendido o apagado. Entonces, a sus preguntas:

  1. Sí, funcionará, porque no es de solo lectura.
  2. Sí, dañará su sistema. Tendrá que ver el montaje de root de solo lectura y tener un pequeño sistema de archivos ram / tempfs para las cosas que Linux necesita rastrear.
  3. No, porque hay una buena posibilidad de que haya dañado el sistema de archivos.
scruss
fuente
La respuesta de @avra es correcta porque el interruptor físico que detectó la posición del control deslizante de Protección contra escritura en las tarjetas SD de tamaño estándar utilizadas en RPis anteriores (no estoy seguro de las tarjetas de tamaño micro, las mías no parecen tener tal cosa) no está conectado a nada (es decir, los contactos en el lateral del soporte de la tarjeta) el otro interruptor (en la parte inferior del soporte de la tarjeta) es el interruptor de "inserción de la tarjeta" y eso es monitoreado por el RPi.
SlySven
2
  1. No he usado XBMC, pero esta no es una buena idea WRT para un sistema operativo normal a menos que haga todo lo posible para configurarlo para ese propósito. Por implicación, si XBMC no está configurado explícitamente, entonces tampoco es una buena idea.

  2. Si la tarjeta realmente es de solo lectura , en realidad NO dañará su sistema, sin embargo, si realmente fuera de solo lectura, es poco probable que llegue al punto en el que podría ejecutar el 'apagado'. Si lo hizo (es decir, de nuevo, ¡está seguro de que toda la tarjeta realmente es de solo lectura!), No se moleste en ejecutar el apagado. Solo tire del enchufe. Como nada en la tarjeta puede cambiar, no importa lo que haga.

  3. Claro, puede encontrar los archivos init responsables y editarlos (obviamente, el sistema de archivos tendrá que poder escribirse para hacerlo).

Siendo realistas, si montas el sistema de archivos raíz de solo lectura (que puede ser más difícil que simplemente usar la palanca de bloqueo), probablemente no obtendrás un arranque exitoso, porque el sistema operativo necesita escribir en el disco. SIN EMBARGO, si lo hace, entonces siéntase libre de hacer lo que quiera (y puede salirse con la suya). Si la tarjeta es de solo lectura, no se puede cambiar, por lo que no puede hacer ningún daño.

Ricitos de oro
fuente
2

Si solo haces

1)

/ dev / mmcblk0p2 / ext4 valores predeterminados, noatime, ro 0 1
/ dev / mmcblk0p1 / vfat valores predeterminados, noatime, ro 0 1
tiene un sistema completo de solo lectura.

2)

Puede iniciar Xorg con: -logfile /tmp/Xorg.log, y encontrar otro servicio que necesite acceso de escritura, redirigirlos a / tmp

3)

Como ya se mencionó, desactive el servicio que no necesita con

insserv -r dphys-swapfile
insserv -r rsyslog
insserv -r samba (si está instalado), etc.

entonces no debería haber ningún problema en absoluto. La buena pregunta es si realmente no habrá daños en la tarjeta SD si solo RO y la alimentación del complemento / salida todo el tiempo ...

Finalmente, una hermosa pantalla de bienvenida y listo, tiene un dispositivo independiente barato y personalizado. :) Y me encanta la idea de alimentar el PI a través del puerto USB desde la TV. ¿Pero eso no se limita a 500 mA? ¿No está seguro, pero PI necesita aproximadamente 1 A o no?

oktay
fuente
dhcpclient necesita escribir /etc/resolv.conf y probablemente otras ubicaciones en / var. Es bueno que hayas mencionado los comandos insserv, los necesitaba; Estoy reconstruyendo nuestros dispositivos para obtener nuevos certificados ca.
Chris Wesseling
1

Un vistazo rápido a este en línea sugiere que nadie ha publicado ninguna solución para esto para la última versión de XBMC.

El problema principal como Goldilocks señaló es que XBMC no fue diseñado con la intención de hacerlo de solo lectura. Este punto se amplía si le echas un vistazo a este hilo en el foro de OpenELEC Media Center. El consenso general es que no es posible hacer que Kodi solo lea.

El motivo según el usuario klojum fue:

Hacer que OpenELEC funcione en un dispositivo de solo lectura no sucederá. Kodi necesita almacenar / actualizar sus bases de datos con información de video. La partición del sistema se configuró como de solo lectura por un motivo. Todos los ajustes van a través de la 2da, / partición de almacenamiento. Entonces, eliminar eso, a través de cmdline o de otra manera, no es una opción. Restaurar el sistema después de cada reinicio es una locura. Instale OE, hágalo a su gusto y realice una copia de seguridad / imagen completa. Restaurar eso en caso de problemas

Puede haber una forma de evitar esto, ya que la gente ha encontrado soluciones para versiones anteriores, pero en general no creo que sea necesario.

Puedo entender como alguien que ha usado Kodi durante un par de años la molestia de que una tarjeta SD se corrompa. Pero hay otras formas más simples de mitigar el problema que no incluyen ajustes de código de bajo nivel.

La razón número uno por la que una tarjeta SD se corrompe es si hay un apagón repentino. Hay un par de razones por las cuales esto puede suceder. Cualquiera de los dos desconecta la alimentación del Pi a mitad de camino a través de una escritura en la tarjeta SD. O el sistema se congela y hay que desconectar la alimentación. Aunque, creo que la segunda razón es menos probable que cause corrupción. O sugiere que hay otra falla en juego.

En los primeros días del Pi, el circuito de suministro de energía en el tablero ciertamente dejaba algo que desear. Puedo recordar los días en que se produjo un bloqueo del sistema simplemente conectando una llave USB al Pi mientras estaba encendido. Si no me cree, vea problemas al ejecutar XBMC en 2011 Raspberry Pi . El otro problema es que el software en los primeros días no estaba completamente maduro. El Pi fue una versión diferente de lo que podría ser una computadora de escritorio y resolver problemas de software lleva tiempo. Por lo tanto, muchas versiones más nuevas de Kodi tienen menos probabilidades de sufrir congelamientos aleatorios del sistema.

Para resolver el problema de pérdida repentina de energía, alimente su Pi a través de algún tipo de fuente de alimentación ininterrumpida (UPS). Un UPS normal funcionaría, pero en realidad hay UPS diseñados específicamente para Pi. Como esta fuente de alimentación ininterrumpida para Raspberry Pi . Si ocurre un congelamiento del sistema, debe ser algo para lo que esté preparado. Esto significa configurar el sistema operativo con todas las configuraciones y aplicaciones y preferencias a su gusto y luego crear una imagen de la tarjeta SD. Entonces, si algo sale mal, puede volver a crear una imagen de la tarjeta SD.

La otra razón por la que una tarjeta SD fallará es porque se está desgastando. Sin embargo, este no es un problema que yo haya experimentado. Si utiliza una tarjeta SD de alta calidad de una marca reconocida, creo que probablemente esté a medio camino para resolver ese problema. Minimizar el desgaste de la tarjeta SD significa garantizar que la tarjeta SD esté haciendo el mínimo absoluto. No debe usarse como espacio de almacenamiento para su gran colección de películas, etc.

Una opción que funcionará con OpenELEC es ejecutarlo desde una unidad USB. Por supuesto, todos los archivos de arranque deberán permanecer en la tarjeta SD. Hay una serie de tutoriales sobre cómo hacer esto. Hay uno que parece bastante fácil de seguir aquí , pero para completarlo, le daré una descripción general:

El primer paso es configurar la tarjeta SD y la unidad USB. Usando un programa como MiniTool Partition Wizard, formatee la tarjeta SD como FAT32 con una partición activa primaria de 150 MB o más, de hecho, toda la tarjeta SD podría formatearse como FAT32. Solo asegúrese de que la partición esté configurada como activa primaria. También podría ser útil etiquetar la tarjeta SD como algo así como SYSTEM para que recuerde para qué sirve en el futuro. Luego formatee toda la unidad USB como una partición activa primaria con el tipo de sistema de archivos como EXT4, nuevamente vale la pena etiquetarlo como algo así como ALMACENAMIENTO.

Una vez que haya descargado y extraído OpenELEC, vaya a la carpeta raíz. Y seleccione estos archivos:

openelec.ico
README.md

Y cópielos a la raíz de la tarjeta SD.

A continuación de la targetcarpeta, copie los archivos:

KERNEL
SYSTEM

Y nuevamente péguelos en el directorio raíz de la tarjeta SD.

Luego, desde la 3rdparty/bootloadercarpeta, copie los archivos:

bootcode.bin
config.txt
fixup.dat
LICENCE.broadcom
start.elf

Y péguelos en el directorio raíz de la tarjeta SD.

El último paso es cambiar el nombre de archivo del archivo KERNELen la tarjeta SD a kernel.img.

Para crear los archivos de inicio, en el directorio raíz de la tarjeta SD cree un archivo llamado cmdline.txty agregue la siguiente línea:

boot=/dev/mmcblk0p1 disk=/dev/sda1 console=ttyAMA0,115200 kgdboc=ttyAMA0,115200 console=tty1 ssh

Asegúrese de cerrar el archivo guardándolo. Y a partir de ahí eres bueno para ir. La fuente de la información sugiere que ejecutar XBMC desde una unidad USB aumenta la capacidad de respuesta. No estoy tan seguro sobre esta afirmación, pero no verá ninguna degradación del rendimiento como resultado del uso de este método.

En cuanto a su colección de medios, sugiero almacenar eso en una segunda unidad, ya sea USB o una ubicación de red.

Darth Vader
fuente