この記事はフィードフォースエンジニア Advent Calendar 2015 - Adventar5日目です
昨日、4日目は rubyのRPMを作るのをDockerとCircleCIにやらせたら便利だった - critical alertのブログ でした!
#自己紹介
ドーモ、社内ニンジャスレイヤー推進おじさんのかせいさんです
普段はアプリケーションエンジニアとして、Railsアプリの運用、改善を進めております
趣味では電子工作をしており、いろいろなメッセージをLEDで表示できるサイバーサングラスなどを作成しています
詳しくはこちら → サイバーサングラス製作記 | feedforce Engineers' blog
#今日は何話すの?
先日開催されたアドテック東京2015にて、弊社フィードフォースブースにて、サイバーサングラスを持って行きたいとマーケティングチームマネージャーから相談がありました
快諾したのですが、そのときにちょっとだけハマったファイルシステム絡みのことをお話ししたいと思います
#何があったの?
サイバーサングラスを使うにあたって、 「データフィード最適化 ソーシャルログイン」 というメッセージを表現したいと要望がありました
サイバーサングラスはRaspberry Piで制御しており、内部的にはテキストデータを読み込んでLEDに表示しているだけなので、SDカードを引っ張り出して、手持ちのMacでテキストデータを編集すればよいと思っていたのですが…
#MacOS Xが、Raspberry PiのOSが入ったSDカードをマウントしてくれない…
正確にはマウントしてくれるのですが、なんか数ファイルしか入ってない何かをマウントするだけで、Raspberry PiのOS(Raspbian)の中身を見ることができませんでした…
#ナンデ!?
実はRaspberry PiのOSが入っているSDカードは2つのパーテーションに分かれており、MacOS Xでマウントできていたのは、ブートローダーが入っている方のパーテーションだけでした
#ブートローダーってなんだっけ?
コンピュータの起動直後に動作して、OSをディスクから読み込んで起動するプログラム
ブートローダとは|boot loader - 意味/解説/説明/定義 : IT用語辞典
#なんでブートローダーはマウントされるけど、OSはマウントされないの?
ブートローダーとOSは異なるファイルシステムで構成されており、ブートローダーのファイルシステムだけがMacOS Xに対応している。という状況のためでした
- ブートローダーのファイルシステム : FAT32
- OS(Raspbian) : ext4
#ファイルシステムってなんだっけ?
ファイルシステムとは、記憶装置に記録されているデータを管理する方式。
記憶装置にファイルやフォルダ(ディレクトリ)を作成したり、移動や削除を行ったりする方法や、データを記録する方式、管理領域の場所や利用方法などが定められている。
ファイルシステムとは|FS|file system - 意味/解説/説明/定義 : IT用語辞典
ファイルシステムってどういうのがあるの?
いろいろあるので、代表的なものを列挙します
- FAT MS-DOSから始まるmicrosoft系のファイルシステム(windows meまではこれ)。最新はFAT32
- NTFS WindowsNT系のファイルシステム(現在のWindowsはこれ)
- ReFS WindowsServer2012から導入されたファイルシステム
- ext LinuxOS系のファイルシステム。最新はext4
- UFS UNIX系のファイルシステム。BSDで使われている。最新はUFS2
- HFS MacOS系のファイルシステム
- HFS+ MacOS 8.1からのファイルシステム。iPod等でも使用されている
- HFSX MacOS 10.3からのファイルシステム
OSごとに異なるものが開発されて、それがそのまま使われる続けている感じですね
もう一度問題をまとめます
- RaspberryPiのSDカードは、2つのパーテーションに分かれている
- ブートローダー(FAT32)
- OS(ext4)
- MacOS Xがext4に対応していないため、OSが入っているパーテーションをマウントできない
MacOS Xでext4をマウントできるようにする
アプリが色々あるので、それを使えば読み書きができるようになります
ただ、まだYosemiteに対応していないものもあるので、使用の際はYosemiteに対応しているかどうか確認をきちんとした方が良さそうです
今回は、以下のアプリの体験版を使用しました
ところでなんでブートローダーだけFAT32なの?
Raspbery Piは、BCM2835というスマホ用の安価なSystem-on-a-chipをコアに使用しています(System-on-a-chipとはCPUやGPUやメモリ、I/Oコントローラーなど、システムに必要な機能を1つのチップに詰め込んだもの)
そして、BCM2835内蔵のブートローダーはFAT32のSDカードを探してマウントしてくれるという機能がありました
Raspbery Piではそれをうまく利用して、以下のような流れで、2つのブートローダーを経由してRaspbianを起動しています
- BCM2835内蔵のブートローダー → SDカードのFAT32のパーテーションをブート
- FAT32のパーテーションのブートローダー → ext4のパーテーションをブート
- Raspbianが起動
めでたしめでたし
こうして、無事サイバーサングラスはアドテック東京2015に持ち込まれ、大活躍をしてくれました
参考
raspbian - Raspberry Pi の SD カードの準備がスッキリと納得できるようになるかもしれない話(少しだけコンピュータ・アーキテクチャっぽい話も) - Qiita
明日、5日目は cross_black777のオフィス移転話です!