Não tenho o hábito de desconectar o pi no sentido de evitar desligá-lo corretamente, exceto quando perdi a conexão em rede em um pi sem cabeça; nesse caso, geralmente tenho preguiça de conectar um teclado etc.
Geralmente, sempre verifico se a luz verde do ACT não está acesa nesse momento; para modelos recentes (ou firmware?), isso será desativado quando o cartão SD não estiver sendo acessado. Qual é o que você quer ter certeza. A menos que você esteja escrevendo constantemente, isso deve ser bastante simples; contanto que haja uma quantidade razoável de espaço livre na RAM livre (digamos 50-100 + MB, dependendo do contexto), as coisas que tendem a ser reutilizadas com frequência, mas que na verdade não são carregadas por um processo a qualquer momento será armazenado em cache na memória livre e recarregado de lá pelo sistema operacional, não pelo meio físico real. É assim que todos os sistemas operacionais de uso geral contemporâneos operam.
Se o pi estiver usando o cartão SD, eis o risco mínimo : o sistema de arquivos no cartão está fora de sincronia com o estado da memória. Normalmente, isso provavelmente não é um grande problema; para iniciantes, o diário do sistema de arquivos usado por padrão na maioria dos pis pode ser uma defesa contra ele, como é o fsck que deve ser aplicado automaticamente na inicialização, se o sistema de arquivos não estiver desmontado corretamente. Vou explicar por que digo "pode" e não "é" em breve, porque, neste contexto, acho que muitas vezes não .
Até onde eu sei, nunca acabei com corrupção no sistema de arquivos ou perda de dados ao desligar o dispositivo, o que posso ter feito centenas de vezes ao longo dos anos. No entanto, novamente, eu não faço isso habitualmente. Se você fizer isso várias vezes ao dia, poderá encontrar o nível de risco estatístico, e há uma captura potencialmente desagradável.
Aqui está o problema:
Recentemente, ocorreu-me que há um problema com os cartões SD contra o qual os mecanismos do sistema operacional / sistema de arquivos podem ser impotentes, e que pode explicar por que algumas pessoas parecem ter problemas persistentes com a corrupção do fs, principalmente aqueles que tentam puxar o cabo independentemente do sistema state - por exemplo, recentemente alguém aqui afirmou estar executando módulos de computação em que a corrupção deixou os sistemas não inicializáveis em ~ 1/40 desses cortes de energia.
Em termos abstratos, sem levar em conta a natureza dos cartões SD , isso não deve acontecer, mesmo que o sistema esteja ocupado, porque o que provavelmente acabará corrompido são coisas não críticas que estão sendo gravadas, e não qualquer software do sistema que seja eficaz somente leitura e somente é alterado durante as atualizações.
Isso poderia acontecer se os bits estivessem sendo manipulados e, portanto, a meta-informação do sistema de arquivos que armazena onde estão os vários bits está corrompida. Novamente, no entanto, journalling e fsck devem ser capazes de lidar com isso, o que exige que o kernel inicialize, mas o kernel no pi está em uma partição de inicialização separada que também pode ser desmontada durante o uso (exceto durante a atualização) porque nada disso é usado após a inicialização do sistema. Significando que as informações sobre a partição devem ser efetivamente incorruptíveis, mesmo quando deixadas montadas.
Mas...
Os cartões SD são uma caixa preta para o sistema operacional. Não há como escapar disso. Embora existam drivers específicos para controladores de cartão SD que fazem parte do hardware do computador (no pi, isso faz parte do SoC), não existe um driver para diferentes marcas e modelos de cartão específicos.
E, no entanto, todos eles possuem microcontroladores que podem operar de maneiras muito diferentes. 1. É isso que torna o cartão uma caixa preta; ele interage com o sistema operacional por meio de um protocolo SD padronizado, e esse é o último ponto de controle do sistema operacional.
Uma das coisas que os cartões SD e outras mídias de estado sólido fazem diferente dos discos rotativos tradicionais é usar o endereçamento virtual opaco; eles não armazenam informações fisicamente nas seqüências que o sistema operacional percebe. Isso é principalmente uma coisa boa; caso contrário, podemos realmente precisar de drivers diferentes para diferentes marcas de cartões, etc., e permite que os cartões implementem (de maneira opaca) o nivelamento de desgaste , o que prolonga significativamente sua vida útil.
Outra coisa em que eles confiam é relativamente grande "apagar blocos"; quando os dados de um bloco precisam ser alterados, o bloco inteiro é apagado e reescrito. Os sistemas de arquivos também costumam fazer esse tipo de coisa, mas observe que está no nível do software do sistema, e os problemas resultantes disso são exatamente os tipos de problemas que ocorrem no diário e no fsck
tratamento.
O ponto crucial do problema mais intransponível é que os sistemas de arquivos de balança fazem isso geralmente são muito menores do que os cartões SD de balança. Caso contrário, você acabaria desperdiçando muito espaço de armazenamento, porque um bloco do sistema de arquivos pode conter apenas dados de um arquivo. Se o bloco tiver 2 MB e houver apenas alguns kB de dados, o restante será desperdiçado. Portanto, os blocos do sistema de arquivos tendem a variar de 1/2 KiB a 4 KiB.
É bastante óbvio que os cartões SD não fazem isso e, de fato, não podiam, porque o controlador em um cartão SD não reconhece limites como "arquivo", "sistema de arquivos" ou mesmo "partição de dispositivo". Ele lida apenas com os pedaços de dados que o sistema operacional deseja, através de uma camada opaca de dentro de uma caixa preta onde tudo pode estar acontecendo em nível físico.
Uma das razões pelas quais é óbvio (além dos cartões de premissa "não podia fazer isso em primeiro lugar") é que esses blocos costumam ser bastante grandes, mas os cartões parecem fazer um trabalho decente ao utilizar todo o espaço. Um bloco de apagamento pode ter vários megabytes de tamanho. Além disso, os detalhes são proprietários. Embora possa haver mecanismos pelos quais o sistema operacional possa solicitar o tamanho do bloco de exclusão do cartão, o cartão não precisa fornecer isso, ele pode mentir sobre isso e seria absurdo se o sistema operacional tentasse aproveitá-lo.
Daqui resulta que desde:
O controlador do cartão SD não tem noção de quais dados "legitimamente" pertencem a onde, no sentido de sistemas de arquivos e partições coerentes, e,
O cartão SD é uma caixa preta na qual o sistema operacional não pode realmente ver,
Então, o que está em um bloco de apagamento de 1 MB, em que um cartão contém várias partições usando 4 KiB ou blocos menores de sistema de arquivos, será arbitrário quando o cartão for usado o suficiente (e possivelmente mesmo se não tiver sido muito usado em todos). Provavelmente isso é verdade mesmo se você tentar forçar o sistema operacional a usar tamanhos de bloco maiores / correspondentes; eles acabarão desalinhados.
Então:
Se a energia for cortada enquanto o cartão SD estiver no meio de alterar um bloco, isso poderá resultar na perda de um volume bastante grande de dados arbitrários que podem ser qualquer coisa do cartão. Pode ser uma informação marcada como "somente leitura". Pode ser informações de uma partição que nem está montada e, obviamente, da partição de inicialização não utilizada.
Se isso acontecer e o cartão não tiver algum tipo de sistema de salvaguarda próprio (que alguns podem ter, mas tenho certeza que a maioria não possui), então você pode estar vendo uma situação da FUBAR. O diário não protege contra a corrupção aleatória do tamanho do MB, que nem reconhece os limites da partição. Ou fsck.
Ou, como o hardware da placa é geralmente proprietário, qualquer outra coisa, exceto o software produzido pelo fabricante da placa, presume que isso seja plausível. Eu nunca ouvi falar disso. Isso tornaria os cartões mais complicados, mais caros e mais complicados de usar. Qual não é o objetivo.
Em outras palavras, os cartões SD não devem ser usados dessa maneira com segurança . Eles são baratos e muito úteis, mas isso é o resultado de uma troca no protocolo: em geral, não há garantia de integridade dos dados para nada no cartão, se você matar arbitrariamente o poder.
O que pode dar errado ao desconectar o Pi? Devo começar simplesmente desconectando? Nota: Nesse caso, não estou muito preocupado com a perda de dados.
Não prejudicará fisicamente o pi; não, apenas tenha cuidado: a "perda de dados" pode se estender ao "cartão inútil", que precisa ser completamente reformatado. No entanto, eu diria que a chance disso, se você estiver fazendo isso com a luz verde ACT apagada, é muito baixa.
- Isso pode ser significativo quando se considera por que algumas marcas / modelos específicos de cartão são claramente piores do que outros para algumas pessoas. Infelizmente, embora dois cartões rotulados de forma idêntica possam ser idênticos em termos de recursos declarados (tamanho, velocidade, etc.), os fabricantes não são obrigados a torná-los realmente 100% idênticos em termos de partes constituintes.