OverlayFSについて勉強し、ラズパイZeroでOverlayFSの設定をする

2022/06/19

ラズパイ 設定

 前回おそらく電源遮断(通称 電プチ)が原因でラズパイZeroが死んでしまいました。。。

↓前回の記事

ラズパイの電プチ対策として定番なのがファイルシステムをOverlayFSにすることみたいなので、今回はそもそもOverlayFSとはどんなものなのか、ラズパイでどうやって設定するか調べたのでまとめます。

結論から言いますとラズパイZeroでOverlayFSを使用すると動作が重くなり、まともに動作しなくなるため設定をするのはあまりお勧めできません。。。
(環境はRasbian 11 bullseyesを使用しています。)

そもそもOverlayFSとは

初めて知った概念のため、いろいろ調べてみたところ複数のディレクトリを重ね合わせて1つのディレクトリとして扱うものみたいです。

よくある概念の説明図として次のようなものがあります。
OverlayFSの概念図([1]より引用)
簡単に説明すると読み取り専用のLowerディレクトリと読み書きが可能なUpperディレクトリがあり、その2つのディレクトリを重ね合わせたものがOverlayディレクトリとして扱われるというものです。

Lowerディレクトリは読み込み専用なので、もしファイルに変更が加えられた場合はUpperディレクトリにのみ更新内容が反映されます。

仮にupperディレクトリとlowerディレクトリで同じファイルがあった場合は下記図の赤枠箇所のようにupperディレクトリの内容が反映されます。(下記図のLowerディレクトリの内容が赤で、Upperディレクトリの内容が緑ですが、緑の内容がoverlaylayに反映されることが分かると思います。)
upperとlowerで同じファイルがあった場合のイメージ([2]より引用)

これは上記ディレクトリ構造をOverlay側から見た場合を想像すると分かりやすく、UpperとLowerに同じファイルがある場合に、Overlay側からフォルダを見てみるとLowerディレクトリの内容は隠れてみることができません。

前置きが長くなってしまいましたが、OverlayFSの設定をしてラズパイのファイルシステムをlowerディレクトリに配置し、読み込み専用とすることでファイルシステムへの書き込みを防止し、ファイルシステムへ書き込み中に電源遮断が起きてシステムが破損し起動できなくなるということを防ぎます。

実際にOverlayFSの設定をしてみる。

OverlayFSの設定をする前にまず現在の状況を確認します。df -hで確認したところ下記のようなマウント状況になってます。


次にOverlayFSの設定をします。設定は簡単でGUIからできます。
まずはRaspberyPiの設定を開きます。


次にパフォーマンス→オーバーレイファイルシステムをクリックします。

補足になりますが、設定にマウスオンすると下記のような説明が出てきます。

設定画面を開いたら「オーバーレイ」と「起動パーティション」を有効にします。(画像は起動パーティションが有効になってませんが、有効にしてください。)

ちなみに起動パーティションが何物かよくわからなかったですが、おそらくBootパーティションをReadonlyにするということだと思います。

補足になりますが、パーティションについてはこちらの記事[3]が分かりやすかったです。

再起動をするとoverlayの設定が完了です。再度マウント状況を確認すると下記のようになります。新しくoverlayというのが出来ていることが確認できます。

findmntコマンドを使ってOverlayFSのフォルダ構成を詳しく見る

ここでコマンドプロンプトにfindmntと入力してより詳しくフォルダの状態を確認します。

下記赤枠の箇所がoverlayFSのフォルダのOPTIONを見てみると次のことが分かります。
(OPTIONの見方はこちらのサイト[4]を参考にしました。
)
  1. rw:読み書き可能なファイルシステム
  2. noatime:inodeのアクセス時間を更新しない。(ファイルを読み込んだ時刻を保存しないというもの[5])
  3. lowwerdir,upperdir,workdirの3つのディレクトリのマウント場所

先ほど勉強した感じではOverlayFSはupperとlowerの2種類のディレクトリで構成されると思いましたが、実際はそれに追加してupperdirと同じ場所にworkdirも作成されているみたいです。

workdirの役割がよくわからなかったため、調べたところ下記のような意見がありました。


また、こちらのサイト[6]にも説明がありました。

この3つの情報をまとめるとworkdirの役割はupperdir/lowerdirの変更をアトミックにするために、一度workdirに保存をして保存が終わったらまとめてupperdirに移動するという動作をすると推定します。
(workdirがupperdirと同一ディレクトリにあるため、個人的にはlowerdirの変更ではなく、upperdirの変更する際に使われているのではと思ってます。。。詳しい方正しい情報を教えていただきたいです。)

ちなみにアトミックという言葉を初めて聞いたため、調べたところ下記のような記述がありました。ディレクトリを排他制御したいけど、ReadOnlyにはしたくないからworkdirに一旦保存して最後にまとめてupperdirに移動させることで排他制御のようなものを実現しているイメージですかね?
アトミック操作は、途中に割り込まれない操作です。
銀行口座の入金や出金の処理は、排他制御が必要なクリティカルセクションがあります。排他制御を行いアトミック性を確保します。

([7]より引用)

ファイルを作成してOverlayFSの動作を確認する

それでは設定が終わったので、OverlayFSの動作を確認していきます。
まずは適当にファイルを作ってみます。今回はtestというファイルを作成してみました。

次にラズパイを再起動してみて、このtestというファイルがどうなるかを確認します。
再起動した結果、デスクトップから消えたことが確認できました。


本当はもう少しフォルダの動作を見ていきたかったのですが、ラズパイZeroでOverlayFSの設定をしてしまうと動作が重たくなってしまい、まともに動かすことができなくたってしまったため今回は断念しました。。。(このスクショを取るだけでも3時間くらいかかってます。。。)

ぱっと見た感じですが、upperdirとかlowerdirにアクセスできるかと思いましたが、実際にアクセスはできなさそうでした。

OverlayFSの設定をしたら動作が重くなった?

OverlayFSが原因なのか、別の所に原因があるのかわからないですが、OverlayFSの設定をしてからラズパイの動作がめちゃくちゃ重たくなりました。。。

正直ストレスを抱えるレベルで、リモートでもなかなか接続できず実機を直接触ってみても固まっている状態です。。。

もしかしたらラズパイZeroにはOverlayFSの設定は厳しいのかもしれないです。。。

まとめ

今回はOverlayFSについて勉強し、ラズパイZeroで設定をしてみました。
結論から言うとラズパイZeroでOverlayFSの設定をすると動作が重たくなってしまうため、あまりお勧めできません。。。

ちなみに私の場合は設定を戻すこともできなくなってしまったため、再度イメージファイルを焼き直すことにしました。。。

参考文献

[2]Le système Overlayfs de Linux 3.18(フランス語サイト)
→絵だけ借用中身は理解できません。。。

引用しなかったが参考にしたサイト

DISKのマウント状態確認 | Cent 0S(マウントしているディスクのオプション確認)
Read-Only Raspberry Pi(英語サイト)
実践! OverlayFS(OverlayFSの参考)



自己紹介

はじめまして 社会人になってからバイクやプログラミングなどを始めました。 プログラミングや整備の記事を書いていますが、独学なので間違った情報が多いかもしれません。 間違っている情報や改善点がありましたらコメントしていただけると幸いです。

X(旧Twitter)

フォローお願いします!

ラベル

QooQ