Fonctionnant sur une carte SD en lecture seule

20

J'ai configuré le Raspberry Pi pour exécuter XBMC, et je veux qu'il démarre pour toujours lire une liste de lecture et des fichiers sur la carte SD. J'ai désactivé la mise à jour automatique de Raspbmc. Il fonctionne toujours bien lorsque je mets la carte SD en position "verrouillage". Maintenant mes questions sont:

  1. Le système de carte SD "en lecture seule" fonctionnera-t-il tout le temps dans mon application?

  2. Étant donné que la carte SD est toujours en mode lecture seule, si je n'utilise pas la commande d'arrêt et que je coupe simplement l'interrupteur d'alimentation, cela endommagera-t-il mon système?

  3. Même si cela fonctionne de manière fiable, le message "Raaspbmc ne s'est pas arrêté correctement" s'affichera toujours. Existe-t-il un moyen de désactiver ce message lorsque le Pi s'allume?

hyiu00
la source
1
Si vous voulez que cela fonctionne de manière fiable, vous devrez vous assurer que les systèmes de fichiers appropriés sont également montés en lecture seule.
Jivings

Réponses:

14

J'ai eu une utilisation similaire. J'utilise le Pi pour diffuser des pages Web dans une entrée de bâtiment. Alimenter le Pi via le port USB du téléviseur.

Montage / lecture seule.

Pour le rendre résistant aux pertes de puissance, je l'ai monté / en lecture seule en changeant une ligne /etc/fstab

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

Assez simple. Mais certains processus sur une machine fonctionnelle doivent écrire.

Monter / tmp en mémoire.

Beaucoup de choses écrivent /tmpdonc j'ai monté ça en mémoire en ajoutant une ligne à/etc/fstab

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

J'avais un Pi 512 Mo disponible donc j'ai fait / tmp 30M gros.

Désactiver les services Je n'ai pas besoin de cette écriture.

J'ai désactivé rsyslogpour l'empêcher de se connecter et dphys-swapfilecomme il n'a pas vraiment de place pour écrire. Courir sans swap posera des problèmes si vous soulevez des charges lourdes qui nécessitent beaucoup de mémoire. Dans mon cas, exécuter un seul processus midori pendant une journée ne l'est pas. cat /etc/rc2.d/READMEsur votre Pi sur la façon de le faire. (raspbian démarre par défaut au niveau d'exécution 2, raspbmc peut différer)

Laissez services que je ne besoin de faux-écriture.

Vous pouvez fournir un accès en écriture à un système de fichiers en mémoire comme le fait un live-cd; avec une monture union . Mais je n'aimais pas la perspective de compiler de façon croisée mon propre noyau pour unionfs ou les derniers aufs . Heureusement, il unionfs-fuseest déjà disponible. Il ne peut pas monter en union /, mais en ai-je vraiment besoin?

Pour exécuter midori, j'ai besoin de X pour travailler. X veut écrire pendant /home/pique je me /varconnecte automatiquement en tant que pi et à quelques endroits dans j'ai décidé de les monter à des endroits en utilisant unionfs.

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

et ajouté 2 lignes à /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

C'est assez désagréable, car les écritures dans / var, / home et / tmp finissent toutes dans / tmp. Mais j'ai seulement besoin que ma machine fonctionne pendant 8 à 10 heures, puis la puissance est coupée. Donc ça va faire.

Remonter en lecture-écriture lors de l'ajustement de choses

Quand j'ai changé de réseau, ce /etc/resolv.confque dhclient a écrit ne fonctionnait plus.

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

N'oubliez pas d'arrêter proprement ou de remonter ro après avoir remonté rw.

PS

Si vous pouvez lire l'allemand, il existe un moyen plus propre (de archive.org). Deutsche Gründlichkeit ...

Chris Wesseling
la source
4

La broche de position de verrouillage de la carte SD n'est pas connectée du tout sur la carte, donc votre verrouillage est virtuel sauf si la carte a un mécanisme de verrouillage interne. Essayez d'écrire quoi que ce soit sur la carte SD lorsqu'elle est verrouillée et vérifiez-la vous-même.

avra
la source
4

Le commutateur en lecture seule de SD est, au mieux, une option logicielle. Presque tous les appareils dont je dispose l'ignoreront, et si le commentaire d'Avra est correct, le Raspberry Pi n'a peut-être aucun moyen de savoir s'il est allumé ou éteint. Donc, à vos questions:

  1. Oui, cela fonctionnera, car ce n'est pas en lecture seule.
  2. Oui, cela endommagera votre système. Vous aurez besoin de regarder le montage root en lecture seule et d'avoir un petit système de fichiers ram / tempfs pour les choses dont Linux a besoin pour garder une trace.
  3. Non, car il y a de fortes chances que vous ayez endommagé le système de fichiers.
scruss
la source
La réponse de @avra est correcte en ce que le commutateur physique qui a détecté la position du curseur de protection en écriture sur les cartes SD de taille standard utilisées dans les RPis précédents (je ne suis pas sûr des cartes de taille micro, la mienne ne semble pas avoir une telle chose) n'est pas câblé à quoi que ce soit (c'est-à-dire les contacts sur le côté du porte-carte), l'autre interrupteur (au bas du porte-carte) est l'interrupteur "insert de carte" et qui EST surveillé par le RPi.
SlySven
2
  1. Je n'ai pas utilisé XBMC, mais ce n'est pas une bonne idée WRT pour un système d'exploitation normal à moins que vous n'alliez trop loin pour le configurer à cet effet. Par implication, si XBMC n'est pas explicitement configuré ainsi, ce n'est pas une bonne idée non plus.

  2. Si la carte est vraiment en lecture seule , elle n'endommagera PAS votre système, mais si elle était vraiment en lecture seule, il est peu probable que vous arriviez au point où vous pourriez exécuter l'arrêt. Si vous l'avez fait (ce qui signifie encore une fois, vous êtes certain que la carte entière est vraiment en lecture seule!), Ne vous embêtez pas à exécuter l'arrêt. Il suffit de débrancher la fiche. Étant donné que rien sur la carte ne peut changer, peu importe ce que vous faites.

  3. Bien sûr, vous pouvez trouver les fichiers init responsables et les éditer (évidemment, le système de fichiers devra être accessible en écriture pour ce faire).

De manière réaliste, si vous montez le système de fichiers racine en lecture seule (ce qui peut être plus difficile que d'utiliser simplement la bascule de verrouillage), vous n'obtiendrez probablement pas un démarrage réussi, car le système d'exploitation doit écrire sur le disque. CEPENDANT, si vous le faites, alors n'hésitez pas à faire ce que vous voulez (et pouvez vous en tirer). Si la carte est en lecture seule, elle ne peut pas être changée, vous ne pouvez donc pas faire de mal.

Boucles d'or
la source
2

Si tu fais juste

1.

/ dev / mmcblk0p2 / ext4 par défaut, noatime, ro 0 1
/ dev / mmcblk0p1 / vfat par défaut, noatime, ro 0 1
vous disposez d'un système complet en lecture seule.

2.

Vous pouvez démarrer Xorg avec: -logfile /tmp/Xorg.log, et trouver un autre service qui nécessite un accès en écriture, les rediriger vers / tmp

3.

Comme déjà mentionné, désactivez le service dont vous n'avez pas besoin avec

insserv -r dphys-
swapfile insserv -r rsyslog
insserv -r samba (si installé) etc

alors il ne devrait y avoir aucun problème. La bonne question est de savoir s'il n'y aura vraiment aucun dommage à la carte SD du tout si RO uniquement et une alimentation plugin / out tout le temps ...

Enfin, un magnifique écran de démarrage et voilà, vous avez un appareil autonome bon marché personnalisé. :) Et j'adore l'idée d'alimenter le port PI sur USB à partir du téléviseur. Mais n'est-ce pas limité à 500mA? Pas sûr, mais PI a besoin d'environ 1A ou non?

ok
la source
dhcpclient doit écrire le fichier /etc/resolv.conf et probablement d'autres emplacements dans / var. C'est bien que vous ayez mentionné les commandes insserv, j'en avais besoin; Je reconstruis nos appareils pour obtenir de nouveaux certificats CA.
Chris Wesseling
1

Un rapide coup d'œil sur cette ligne suggère que personne n'a posté de solution à cela pour la dernière version de XBMC.

Le problème principal, comme l'a souligné Goldilocks, est que XBMC n'a pas été conçu avec l'intention de le rendre en lecture seule. Ce point est approfondi si vous jetez un œil à ce fil sur le forum OpenELEC Media Center. Le consensus général est qu'il n'est pas possible de faire lire Kodi en lecture seule.

La raison selon l'utilisateur klojum était:

Faire fonctionner OpenELEC sur un périphérique en lecture seule ne se produira pas. Kodi doit stocker / mettre à jour ses bases de données avec des informations vidéo. La partition système est configurée en lecture seule pour une raison. Tous les paramètres passent par la 2ème partition / storage. Donc, supprimer cela, via la ligne de commande ou autrement, n'est pas une option. La restauration du système après chaque redémarrage est folle. Installez OE, faites-le fonctionner selon vos souhaits et faites une sauvegarde / image complète. Restaurer cela en cas de problème

Il pourrait y avoir un moyen de contourner cela car les gens ont trouvé des solutions de contournement pour les anciennes versions, mais en général, je ne pense pas que cela soit nécessaire.

Je peux comprendre en tant que personne qui utilise Kodi depuis quelques années la gêne d'une carte SD corrompue. Mais il existe d'autres moyens plus simples d'atténuer le problème qui n'incluaient pas le bricolage de code de bas niveau.

La principale raison pour laquelle une carte SD sera corrompue est en cas de panne de courant soudaine. Il y a deux raisons pour lesquelles cela peut se produire. Soit quelqu'un déconnecte l'alimentation du Pi à mi-chemin via une écriture sur la carte SD. Ou le système se bloque et vous devez couper l'alimentation. Cependant, je pense que la deuxième raison est moins susceptible de provoquer la corruption. Ou cela suggère qu'il y a un autre défaut en jeu.

Au début du Pi, le circuit de distribution de puissance de la carte laissait certainement à désirer. Je me souviens de l'époque où un système s'est bloqué simplement en branchant un dongle USB sur le Pi alors qu'il était sous tension. Si vous ne me croyez pas, je vois des problèmes lors de l'exécution de XBMC sur le Raspberry Pi 2011 . L'autre problème est que le logiciel n'était pas totalement mature au début. Le Pi était une approche différente de ce que pouvait être un ordinateur de bureau et résoudre les problèmes logiciels prend du temps. Ainsi, les versions beaucoup plus récentes de Kodi sont moins susceptibles de souffrir de gels aléatoires du système.

Pour résoudre le problème de perte de puissance soudaine, alimentez votre Pi via une sorte d'alimentation sans coupure (UPS). Un onduleur ordinaire fonctionnerait, mais il existe en fait des onduleurs spécialement conçus pour Pi. Comme cette alimentation sans interruption pour Raspberry Pi . Si un gel du système se produit, cela devrait être quelque chose pour lequel vous êtes prêt. Cela signifie configurer le système d'exploitation avec tous les paramètres et applications et préférences à votre goût, puis créer une image de la carte SD. Donc, si quelque chose ne va pas, vous pouvez simplement recréer l'image de la carte SD.

L'autre raison pour laquelle une carte SD échoue est due à son usure. Cependant, ce n'est pas un problème que j'ai vécu moi-même. Si vous utilisez une carte SD de haute qualité d'une marque réputée, je pense que vous êtes probablement à mi-chemin pour résoudre ce problème. Pour minimiser l'usure de la carte SD, il faut s'assurer que la carte SD fait le minimum absolu. Il ne doit pas être utilisé comme espace de stockage pour votre vaste collection de films etc.

Une option qui fonctionnera avec OpenELEC est de l'exécuter sur un lecteur USB. Bien sûr, tous les fichiers de démarrage devront rester sur la carte SD. Il existe un certain nombre de didacticiels sur la façon de procéder. Il y en a un qui semble assez facile à suivre ici , mais pour être complet, je vais vous donner un aperçu:

La première étape consiste à configurer la carte SD et la clé USB. En utilisant un programme comme MiniTool Partition Wizard, formatez la carte SD en FAT32 avec une partition active principale de 150 Mo ou plus, en fait, la carte SD entière peut être formatée en FAT32. Assurez-vous simplement que la partition est définie sur principale active. Il pourrait également être utile d'étiqueter la carte SD comme quelque chose comme SYSTEM afin de vous rappeler à quoi elle sert à l'avenir. Ensuite, formatez la clé USB entière en une seule partition active principale avec le type de système de fichiers comme EXT4, encore une fois, cela vaut la peine de l'étiqueter comme quelque chose comme STORAGE.

Une fois que vous avez téléchargé et extrait OpenELEC, allez dans le dossier racine. Et sélectionnez ces fichiers:

openelec.ico
README.md

Et copiez-les à la racine de la carte SD.

Ensuite, à partir du targetdossier, copiez les fichiers:

KERNEL
SYSTEM

Et encore collez-les dans le répertoire racine de la carte SD.

Puis à partir du 3rdparty/bootloaderdossier copiez les fichiers:

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

Et collez-les dans le répertoire racine de la carte SD.

La dernière étape consiste à changer le nom de fichier du fichier KERNELsur la carte SD en kernel.img.

Pour créer les fichiers de démarrage, dans le répertoire racine de la carte SD, créez un fichier appelé cmdline.txtet ajoutez-y la ligne suivante:

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

Assurez-vous de fermer le fichier en l'enregistrant. Et à partir de là, vous êtes prêt à partir. La source des informations a suggéré d'exécuter XBMC sur une clé USB pour une réactivité accrue. Je ne suis pas sûr de cette affirmation, mais vous ne verrez aucune dégradation des performances résultant de l'utilisation de cette méthode.

Quant à votre collection de médias, je suggère de la stocker sur un deuxième lecteur, que ce soit un port USB ou un emplacement réseau.

Dark Vador
la source