プラグを抜くだけでも大丈夫ですか?


18

piをオフにするときはいつでもsudo poweroff、(私の理解では)すべてのプロセスを停止してシャットダウンする安全な方法であるを使用します。

常にPiにSSHで接続しているわけではない組み込みプロジェクトにPiを使用しているとき、電話やラップトップを取り出して電源を切るためにPiに接続するのに時間がかかるように感じることがよくあります。

私が話をした人の中には、シャットダウンしたいときに電源が切れるだけで、これに関する問題に気付いたことがないという人もいます。

それでは、Piのプラグを抜くだけで何が問題になるのでしょうか?単純にプラグを抜く必要がありますか?

注:この場合、データの損失についてはあまり心配していません。定期的にバックアップを保存しますが、このPiの重要なデータはGitHubにあります。


1
プラグをそのまま引き抜くことはお勧めしません。電源ケーブルを絶えず抜き差しすると、Piのコネクタの寿命が短くなります。次に、プラグを抜くときにSDカードが操作を実行している可能性があります-これにより破損する可能性があります。そして、それはあなたがあなたのデータをどれだけうまくバックアップしても、不便になるでしょう。
ダースベイダー

2
@DarthVader「コネクタの寿命を短くする」とはどういう意味ですか?頻繁にプラグを抜いてプラグインするのではなく、シャットダウンする前にプラグを抜くだけです。それ以外の問題は、SDカードの破損だけですか?SDカードをフォーマットすると、常にカードが再び使用可能になりますか?
ジェームズビッカーリー

1
Piを接続したままにして、壁で電源を切る方が良いと思います。選択したOSをフォーマットして再インストールすることにより、破損したSDカードを回復できますが、そもそもSDカードの破損を避けることをお勧めします。もう1つの問題は、Piの一部が何かを処理している可能性があり、実行中の処理を終了する機会が与えられずに電源が切れてしまうことです。
ダースベイダー

回答:


23

ヘッドレスpiでネットワークを失った場合を除き、適切にシャットダウンすることを避けるという意味で、piを抜く習慣はありません。

通常、私は常にその時点で緑色のACTライトが点灯していないことを確認します。最近のモデル(またはファームウェア?)では、SDカードがアクセスされていない場合、これはオフになります。それはあなたが確かめたいことです。絶えず書き込みをしているのでなければ、これは十分に簡単なはずです。空きRAM(コンテキストに応じて50〜100 MB以上)に十分なヘッドルームがある限り、頻繁に再利用される傾向があるが、特定の瞬間にプロセスによって実際にロードされないもの空きメモリキャッシュされ、実際の物理メディアではなく、OSによってそこからリロードされます。これが、現代のすべての汎用オペレーティングシステムの動作方法です。

piがSDカードを使用している場合、リスクは最小限です。カード上のファイルシステムがメモリ内の状態と同期していません。通常、これはおそらく大きな問題ではありません。まず第一に、ほとんどのpisでデフォルトで使用されるファイルシステムジャーナリングは、ファイルシステムがクリーンにアンマウントされなかった場合にブート時に自動的に適用されるfsckと同様に、それに対する防御になるかもしれません。私は、この文脈では、私はそれは多くの場合だと思うので、「かもしれない」とありませんが、まもなく「ある」と言うなぜ私が説明しようではないかもしれません

私の知る限り、プラグを抜くときにファイルシステムが破損したりデータが失われたりすることはありませんでした。しかし、繰り返しますが、私は習慣的にそれをしません。1日に数回それを行うと、最終的に統計的なリスクレベルが何であれ、実行される可能性があり、潜在的に厄介なキャッチが関係します。

問題は次のとおりです。

最近、OS /ファイルシステムメカニズムが無力になる可能性のあるSDカードに問題があり、一部の人々がfs破損、特にシステムに関係なくコードをヤンクする問題が続くように見える理由を説明していることがあります状態-例えば、最近ここで誰かが計算モジュールを実行していると主張し、破損によりシステムが約1/40の停電でシステムを起動できなくなった。

要約すると、SDカードの性質を考慮せずに、システムがビジー状態であっても発生しないはずです。破損する可能性が最も高いのは、効果的なシステムソフトウェアではなく、書き込まれている重要ではないものです読み取り専用で、更新時にのみ変更されます。

ビットがジャグリングされている場合に発生する可能性があるため、さまざまなビットが格納されているファイルシステムのメタ情報が破損しています。ただし、ジャーナリングとfsckはこれに対処する必要がありますが、これにはカーネルの起動が必要ですが、piのカーネルは別のブートパーティション上にあり、使用中に(更新時を除き)マウント解除される可能性がありますシステムの起動後は使用されません。パーティションに関する情報は、マウントされたままであっても、事実上、破損しないようにする必要があります。

だが...

SDカードは、オペレーティングシステムにとってブラックボックスです。そこから抜け出す方法はありません。コンピューターのハードウェアの一部であるSDカードコントローラー用の特定のドライバーがありますが(piでは、これはSoCの一部です)、カードの異なる特定のメーカーやモデル用のドライバーなどはありません。

しかし、それらはすべて、内部に非常に異なる方法で動作する可能性のあるマイクロコントローラーを持っています。1. これが、カードをブラックボックスにするものです。標準化されたSDプロトコルを介してオペレーティングシステムとやり取りします。これがOSの最後の制御ポイントです。

従来の回転ディスクとは異なるSDカードやその他のソリッドステートメディアの機能の1つは、不透明な仮想アドレス指定を使用することです。オペレーティングシステムが認識する順序で物理的に情報を保存することはありません。これはほとんど良いことです。さもなければ、異なるブランドのカードなどに異なるドライバーが本当に必要になるかもしれません。また、カードがウェアレベリングを(不透明に)実装できるようにし、寿命を大幅に延ばします。

彼らが頼るもう一つのことは、比較的大きな「消去ブロック」です。ブロック内のデータを変更する必要がある場合、ブロック全体が消去され、再書き込みされます。もちろん、ファイルシステムもこの種のことを行いますが、それはシステムソフトウェアレベルであり、これに起因する問題はジャーナリングとfsck対処の問題とまったく同じです。

乗り越えられない問題の核心は、スケールファイルシステムがそれを行うことは、通常、スケールSDカードが行うよりもはるかに小さいことです。そうでない場合、ファイルシステムブロックには1つのファイルからのデータしか格納できないため、大量のストレージスペースを無駄にすることになります。ブロックが2 MBで、数kBのデータしかない場合、残りは無駄になります。そのため、ファイルシステムブロックは1/2 KiBから4 KiBの範囲にある傾向があります。

SDカードのコントローラーは「ファイル」、「ファイルシステム」、または「デバイスパーティション」などの境界を認識しないため、SDカードがこれを実行しないことは明らかです。実際、実行できません。OSが必要とするデータの塊を処理するだけで、物理レベルで何かが発生する可能性のあるブラックボックス内の不透明なレイヤーを介して処理します。

明らかである理由の1つは(前提カードを除いて「そもそもそれができなかった」)、これらのブロックは非常に大きいことが多いが、カードはすべてのスペースをうまく利用するように見えるためです。消去ブロックのサイズは数メガバイトです。さらに、詳細は独自のものです。OSがカードに消去ブロックサイズを要求できるメカニズムが存在する場合がありますが、カードはこれを提供する必要はなく、それについて嘘をつくことができ、OSがそれを利用しようとすると不合理になります。

このことから、次のことがわかります。

  1. SDカードコントローラーには、一貫性のあるファイルシステムとパーティションという意味で、「正当に」データがどこに属するかという概念がありません。

  2. SDカードは、OSが真に見ることができないブラックボックスです。

次に、カードに4 KiB以下のファイルシステムブロックを使用する複数のパーティションが含まれる1 MBの消去ブロックにあるものは、カードが十分に使用されると(そして場合によってはあまり使用されていない場合でも)すべて)。これはおそらく、OSがより大きな/対応するブロックサイズを使用するように強制する場合でも当てはまります。それらは最終的に不整合になります。

そう:

電源が切断された場合にSDカードがブロックを変更中であるが、それは可能性があり、任意のデータのかなり大きな体積の損失につながる可能性が何かカードから。「読み取り専用」とマークされた情報である可能性があります。 マウントされていないパーティションからの情報である可能性があり、明らかに十分なほど、ほとんど未使用のブートパーティションからの情報である可能性があります。

それが起こり、カードにそれ自体の何らかの種類の保護システムがない場合(一部のシステムにはあるかもしれませんが、ほとんどのシステムにはないでしょう)、FUBARの状況を見ることができます。ジャーナリングは、パーティションの境界さえ認識しないランダムなMBサイズの破損から保護しません。またはfsck。

または、カードのハードウェアは一般的にプロプライエタリであるため、カードの製造元が製造したソフトウェア以外のすべてのものが可能性があります。私はそのようなことを聞​​いたことがありません。これにより、カードがより複雑になり、より高価になり、使用するのが面倒になります。これは目標ではありません。

別の言い方をすれば、SDカードはこの方法で確実に使用することを意図したものではありません。それらは安価で非常に便利ですが、それはプロトコルのトレードオフの結果です。一般的に、カードの電源を勝手に殺した場合、カード上のデータの完全性は保証されません。

Piのプラグを抜くだけで何が問題になるのでしょうか?単純にプラグを抜く必要がありますか?注:この場合、データの損失についてはあまり心配していません。

物理的にpiに害を与えることはありません。いいえ、「データ損失」は完全に再フォーマットする必要がある「無駄なカード」にまで及ぶ可能性があることに注意してください。ただし、緑色のACTライトをオフにして実行している場合、その可能性は非常に低いと思います。


  1. これは、一部の人々にとって特定のカードの特定のメーカー/モデルが他の特定のメーカー/モデルより明らかに明らかに悪い理由を考えるときに重要です。残念ながら、同じラベルが付けられた2枚のカードは、記載されている機能(サイズ、速度など)の点では同じかもしれませんが、製造者は構成部品の点でそれらを真に100%にすることに拘束されません。

1

OSの動作スキームに大きく依存します。

  • 標準スキームを使用している場合、SDカードを実際のデータにr / wモードで使用している場合(スワップパーティションはここではカウントされません)-通常の「PCの電源プラグ」の場合のような問題です:それはすべてGoogleの周りにあるので、ケースについての情報が山ほどあります。それはまったく同じです。同じ問題、同じリスク、同じ影響です。
  • SDカードからデータ読み取るだけの場合、つまり、roオプションを使用してSDカードからすべてのデータを含むパーティションをマウントする場合、プラグを抜くだけで間違いなく問題はありません。サービスの作業は終了です。データを外部の書き込み可能なストレージ(NASやNFS / SMB / CIFS共有など)にバックアップし、サービスをシャットダウンした後-はい、プラグを抜くだけです:RAM / tmpfsディスクは不要です)これ以上、あなたは何も損傷しません

1
最初の点は間違っています。SDカードは、たとえば、ジャーナリングとチェックがほとんどの場合に有効な保護手段であるディスクの回転や、追加のハードウェアを搭載し、より厳格な標準、SDメディア。Qv 「SDカードの性質を考慮せずに抽象的な用語で...」
ゴールディロック

1
@goldilocksはもちろん、ストレージメディアの仕組みを徹底的に調べているのとは異なります。私はここでもっと一般的に言っています。つまり、「すべてのデータが安全かつ確実に保存されているという事実を確認していないのに、なぜプラグを抜くのが悪いのか」。
アレクセイ・ヴェズニン

@goldilocksすばらしい回答をありがとう。あなたは両方とも素晴らしい点を挙げましたが、質問に答えている間に多くの関連情報を提供するため、ゴールディロックスの答えを受け入れることにしました。しかし、私は両方の答えを支持しました。
ジェームズビッカリー

1

@goldilocksが答えたように、リスクはほとんどありませんが、私たちのほとんどはそれを行いません。

安全な電源オフスイッチを追加するのは非常に簡単です。これは、ヘッドレスPiで使用します。Raspberry Piを安全にオフにする方法をご覧くださいこれは、少しのRAMとシンプルなプッシュボタンを除いて、ほとんどリソースを使用しません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.