前回の記事で、Nano Pi R4S(Friendly Core)のみcontainerd snapshotterをnativeに変更する必要があると書いた。
原因としては /var/snap
を含むrootfsがoverlay fsになっていて、containerd snapshotterがさらにonverlayを作るからだった。
解決方法: /var/snapを別パーティションにする
overlayが作れないなら別パーティションにすればいいじゃない!というどこぞの人もびっくりな解決策。 手順としては以下のような感じ。
- MicroSDカードにFriendlyCoreのイメージを書き出す
- パーティション9がrootfsになるので必要なサイズにリサイズする
- パーティション10を作成する
- Friendly Coreを起動したらパーティション10をext4でフォーマットして
/var/snap
にマウントする/etc/fstab
に追記を忘れない
これだけで完了する。 シンプルだがsnapで展開されたデフォルトの設定を変えなくていいので構成管理はとても楽になる。 なお、この変更にどのくらいパフォーマンスが影響がでるかだが…正直計測していないし体感差がわからない。 そもそものIOパフォーマンスが悪いので差がない感じがする。
おまけ: Windowsでパーティションを変更するのが大変だったのでUbuntuのLive CDイメージを使って変更した
手順としてはシンプルなのだが、手順2,3のパーティション変更がWindowsでは大変だというのがポイント。 Windows標準のパーティション変更ツールであるdiskpartを使う方法が一番最初に思いつくのだが、このツールは作成したパーティションをWindowsで使うことを想定しているために、パーティションだけではなくシンプルボリュームを作成してしまう。 これはLinuxでは都合が悪いので、やむなく別の方法を探すことにした。
次に検討したのはMicroSDカードをWSLにマウントして、WSL上のfdiskなどを使う案である。 結論からいうとこれもダメだった。 「WSL MicroSDカード マウント」で検索すると以下のようなページがでてくる。 * WSL 2 で Linux ディスクのマウントを開始する * USB デバイスを接続する
最初のリンク先に書いてあるマウントとは、すでにWindowsのドライブにマウントされていてドライブレターがついている(C:やD:など)ドライブをWSLにマウントする方法だった。 FrindlyCoreのイメージを書き出したMicroSDカードは、もちろんWindowsではドライブマウントできないので、結果としてWSLにもマウントできないのであった。 2つ目のUSBデバイスを接続する方法でいけるかな?っと思ったのだがこれもだめだった。 私の使ったMicroSDカードリーダはノートPCに搭載されているもので、なんとこれはPCIe接続であるためUSBデバイスではないのでWSLに接続できないということだった…悲しい。 WSLのホストデバイス周りの対応はまだまだだなぁ…っと思ったのだった。
結局どうしたかというと、USBメモリが手元にあったのでUbuntuのLive CDイメージを書き込んでUbuntuを起動してMicroSDカードのパーティションを変更した。 便利な世の中だなぁ。