Executando no cartão SD somente leitura

20

Eu configurei o Raspberry Pi para executar o XBMC e quero que ele seja inicializado para sempre reproduzir uma lista de reprodução e arquivos no cartão SD. Desativei a atualização automática do Raspbmc. Ainda funciona bem quando troco o cartão SD para a posição "travada". Agora minhas perguntas são:

  1. O sistema de cartão SD "somente leitura" funciona o tempo todo no meu aplicativo?

  2. Como o cartão SD está sempre no modo somente leitura, se eu não usar o comando shutdown e desligar o interruptor, isso danificará o meu sistema?

  3. Mesmo que isso funcione de maneira confiável, sempre aparecerá a mensagem "O Raaspbmc não foi desligado corretamente". Existe alguma maneira de desativar essa mensagem quando o Pi é ligado?

hyiu00
fonte
11
Se você quiser que isso funcione de maneira confiável, precisará garantir que os sistemas de arquivos apropriados também sejam montados como somente leitura.
Jivings

Respostas:

14

Eu tive um uso semelhante. Estou usando o Pi para estreitar páginas da Web em uma entrada de prédio. Ligando o Pi através da porta USB da TV.

Montagem / somente leitura.

Para torná-lo à prova de perda de potência, montei / somente leitura alterando uma linha /etc/fstab

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

Bem simples. Mas alguns processos em uma máquina funcional precisam escrever.

Monte / tmp na memória.

Muitas coisas escrevem, /tmpentão montei isso na memória adicionando uma linha ao/etc/fstab

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

Eu tinha um Pi de 512 MB disponível, então fiz / tmp 30M grande.

Desabilitar serviços que não precisam dessa gravação.

Eu desabilitei rsyslogpara impedi-lo de registrar e dphys-swapfilecomo ele não tem um lugar real para escrever. A execução sem troca dará problemas se você fizer um trabalho pesado que consome muita memória. No meu caso, executar um único processo midori por um dia, não é. cat /etc/rc2.d/READMEno seu Pi sobre como fazer isso. (o raspbian inicia no nível de execução 2 por padrão, o raspbmc pode ser diferente)

Vamos serviços que eu não precisam de faux-write.

Você pode fornecer acesso de gravação a um sistema de arquivos na memória da maneira que um CD ao vivo faz; com um suporte de união . Mas eu não gostei da perspectiva de compilar meu próprio kernel para o unionfs ou os aufs posteriores . Felizmente unionfs-fuseé pré-construído disponível. Ele não pode ser montado em união /, mas eu realmente preciso disso?

Executando midori, preciso do X para trabalhar. X quer escrever /home/pienquanto eu autologo como pi e em alguns lugares em que /vareu decidi montá-los em lugares usando unionfs.

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

e anexou 2 linhas 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

Isso é bastante desagradável, pois grava em / var, / home e / tmp todas as finalizações em / tmp. Mas eu só preciso que minha máquina funcione por 8 a 10 horas e, em seguida, a energia fica cortada. Então isso serve.

Remontando a leitura e gravação ao ajustar coisas

Quando mudei de rede, o /etc/resolv.confque o dhclient escreveu não funcionava mais.

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

Não se esqueça de desligar corretamente ou remontar ro após remontar rw.

PS

Se você pode ler alemão, há uma maneira mais limpa (em archive.org). Deutsche Gründlichkeit ...

Chris Wesseling
fonte
4

O pino de posição de bloqueio do cartão SD não está conectado na placa de circuito impresso; portanto, seu bloqueio é virtual, a menos que o cartão tenha um mecanismo de bloqueio interno. Tente escrever qualquer coisa no cartão SD enquanto estiver bloqueado e verifique você mesmo.

avra
fonte
4

A opção somente leitura da SD é, na melhor das hipóteses, uma opção de software. Quase todos os dispositivos que eu tenho o ignoram e, se o comentário de avra estiver correto, o Raspberry Pi pode não ter como saber se está ativado ou desativado. Então, para suas perguntas:

  1. Sim, funcionará, porque não é somente leitura.
  2. Sim, isso danificará seu sistema. Você precisará examinar a montagem somente leitura da raiz e ter um pequeno sistema de arquivos ram / tempfs para o que o Linux precisa acompanhar.
  3. Não, porque há uma boa chance de você ter danificado o sistema de arquivos.
scruss
fonte
A resposta da @avra está correta, pois o interruptor físico que detectou a posição do controle deslizante de proteção contra gravação nos cartões SD de tamanho padrão usados ​​nos RPis anteriores (não tenho certeza dos cartões de tamanho micro, os meus parecem não funcionar) tal coisa) não está conectado a nada (ou seja, os contatos na lateral do suporte do cartão), o outro interruptor (na parte inferior do suporte do cartão) é o interruptor "inserção do cartão" e que é monitorado pelo RPi.
SlySven
2
  1. Eu não usei o XBMC, mas isso não é uma boa ideia para o WRT em um sistema operacional normal, a menos que você faça alguns comprimentos para configurá-lo para esse fim. Por implicação, se o XBMC não estiver configurado explicitamente, não será uma boa ideia para ele.

  2. Se o cartão for realmente somente de leitura , na verdade, NÃO danificará o sistema; no entanto, se realmente for de leitura, é improvável que você chegue ao ponto em que poderá executar o 'shutdown'. Se você o fez (ou seja, novamente, você tem certeza de que todo o cartão é realmente somente leitura!), Não se preocupe em executar o desligamento. Basta puxar o plugue. Como nada no cartão pode mudar, não importa o que você faça.

  3. Claro, você pode encontrar os arquivos init responsáveis ​​e editá-los (obviamente, o sistema de arquivos precisará ser gravável para fazer isso).

Realisticamente, se você montar o sistema de arquivos raiz como somente leitura (que pode ser mais difícil do que usar a alternância de travas), provavelmente não terá uma inicialização bem-sucedida, porque o sistema operacional precisa gravar no disco. No entanto, se você fizer isso, sinta-se à vontade para fazer o que quiser (e pode se safar). Se o cartão for somente leitura, ele não poderá ser alterado, portanto você não poderá causar nenhum dano.

Cachinhos Dourados
fonte
2

Se você apenas fizer

1

/ dev / mmcblk0p2 / ext4 padrões, noatime, ro 0 1
/ dev / mmcblk0p1 / vfat padrões, noatime, ro 0 1
você possui um sistema completo de somente leitura.

2)

Você pode iniciar o Xorg com: -logfile /tmp/Xorg.log e encontrar outro serviço que precise de acesso de gravação, redirecione-o para / tmp

3)

Como já mencionado, desative o serviço desnecessário com

insserv -r dphys-swapfile
insserv -r rsyslog
insserv -r samba (se instalado) etc

então não deve haver nenhum problema. A boa pergunta é se realmente não haverá danos ao cartão SD, se apenas RO e plug / out power o tempo todo ...

Por fim, uma bela tela inicial e pronto, você tem um aparelho independente personalizado e barato. :) E adoro a idéia de alimentar a porta PI sobre USB da TV. Mas isso não está limitado a 500mA? Não tenho certeza, mas o PI precisa de aproximadamente 1A ou não?

oktay
fonte
O dhcpclient precisa escrever o /etc/resolv.conf e provavelmente outros locais em / var. Bom que você mencionou os comandos insserv, eu precisava deles; Estou reconstruindo nossos equipamentos para obter novos certificados CA.
21430 Chris Hasseling
1

Uma rápida olhada neste online sugere que ninguém postou nenhuma solução para a versão mais recente do XBMC.

A questão principal, como o Goldilocks apontou, é que o XBMC não foi projetado com a intenção de torná-lo somente leitura. Este ponto é aprofundado se você der uma olhada neste tópico no Fórum do OpenELEC Media Center. O consenso geral de que não é possível fazer Kodi somente para leitura.

O motivo de acordo com o usuário klojum foi:

Para que o OpenELEC funcione em um dispositivo somente leitura, isso não acontecerá. A Kodi precisa armazenar / atualizar seus bancos de dados com informações de vídeo. A partição do sistema foi configurada como somente leitura por um motivo. Todas as configurações passam pela 2ª partição / storage. Portanto, remover isso, por meio do cmdline ou não, não é uma opção. Restaurar o sistema após cada reinicialização é insano. Instale o OE, faça com que ele funcione conforme seus desejos e faça um backup / imagem completo. Restaure isso em caso de problemas

Pode haver uma maneira de contornar isso, pois as pessoas encontraram soluções alternativas para versões mais antigas, mas, em geral, acho que não há necessidade.

Eu entendo como alguém que usa o Kodi há alguns anos o aborrecimento de um cartão SD se corrompendo. Mas existem outras maneiras mais simples de atenuar o problema que não incluíam ajustes de código de baixo nível.

A principal razão pela qual um cartão SD será corrompido é se houver uma queda repentina de energia. Existem algumas razões pelas quais isso pode acontecer. Alguém desconecta a energia do Pi no meio de uma gravação no cartão SD. Ou o sistema congela e você precisa desconectar a energia. Embora eu ache que a segunda razão tem menos probabilidade de causar corrupção. Ou sugere que há outra falha em jogo.

Nos primeiros dias do Pi, o circuito de fornecimento de energia na placa certamente deixava algo a desejar. Lembro-me dos dias em que causou uma falha no sistema simplesmente conectando um dongle USB ao Pi enquanto ele estava ligado. Se você não acredita em mim, há problemas ao executar o XBMC no Raspberry Pi 2011 . A outra questão é que o software nos primeiros dias não estava totalmente maduro. O Pi era uma visão diferente do que poderia ser um computador de mesa, e resolver problemas de software leva tempo. Portanto, muitas versões mais recentes do Kodi têm menos probabilidade de sofrer congelamentos aleatórios do sistema.

Para resolver o problema repentino de perda de energia, ligue seu Pi através de algum tipo de fonte de alimentação ininterrupta (UPS). Um no-break normal funcionaria, mas na verdade existem no-breaks especificamente projetados para Pi. Como esta fonte de alimentação ininterrupta para Raspberry Pi . Se ocorrer um congelamento do sistema, você deve estar preparado para isso. Isso significa configurar o sistema operacional com todas as configurações, aplicativos e preferências do seu gosto e criar uma imagem do cartão SD. Então, se algo der errado, você pode apenas re-imagem do cartão SD.

A outra razão pela qual um cartão SD falhará é devido ao desgaste. No entanto, este não é um problema que já experimentei. Se você usa um cartão SD de alta qualidade de uma marca respeitável, acho que provavelmente está no meio do caminho para resolver esse problema. Minimizar o desgaste do cartão SD significa garantir que o cartão SD esteja fazendo o mínimo absoluto. Não deve ser usado como espaço de armazenamento para sua vasta coleção de filmes, etc.

Uma opção que funcionará com o OpenELEC é executá-lo em uma unidade USB. É claro que todos os arquivos de inicialização terão que permanecer no cartão SD. Existem vários tutoriais sobre como fazer isso. Há uma que parece bastante fácil de seguir aqui , mas, para ser completo, darei uma visão geral:

O primeiro passo é configurar o cartão SD e a unidade USB. Usando um programa como o MiniTool Partition Wizard, formate o cartão SD como FAT32 com uma partição ativa primária de 150 MB ou mais; na verdade, todo o cartão SD pode ser formatado como FAT32. Apenas verifique se a partição está definida como principal ativa. Também pode ser útil rotular o cartão SD como algo como SYSTEM, para que você se lembre do que isso significa no futuro. Em seguida, formate a unidade USB inteira como uma partição ativa primária com o tipo de sistema de arquivos como EXT4, novamente valendo a pena rotulá-la como algo como ARMAZENAMENTO.

Depois de baixar e extrair o OpenELEC, vá para a pasta raiz. E selecione estes arquivos:

openelec.ico
README.md

E copie-os para a raiz do cartão SD.

Em seguida, na targetpasta, copie os arquivos:

KERNEL
SYSTEM

E cole-os novamente no diretório raiz do cartão SD.

A partir da 3rdparty/bootloaderpasta, copie os arquivos:

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

E cole-os no diretório raiz do cartão SD.

O passo final é alterar o nome do arquivo do arquivo KERNELno cartão SD para kernel.img.

Para criar os arquivos de inicialização, no diretório raiz do cartão SD, crie um arquivo chamado cmdline.txte adicione a seguinte linha:

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

Certifique-se de fechar o arquivo ao salvá-lo. E a partir daí você está pronto para ir. A fonte das informações sugeridas para executar o XBMC em uma unidade USB aumentou a capacidade de resposta. Não tenho tanta certeza dessa afirmação, mas você não verá nenhuma degradação no desempenho como resultado do uso desse método.

Quanto à sua coleção de mídia, sugiro armazená-la em uma segunda unidade, seja USB ou um local de rede.

Darth Vader
fonte