サイバーサングラスの調整でハマったファイルシステムのお話


この記事は[フィードフォースエンジニア Advent Calendar 2015 - Adventar](http://www.adventar.org/calendars/906)5日目です

昨日、4日目は [rubyのRPMを作るのをDockerとCircleCIにやらせたら便利だった - critical alertのブログ](http://critical-alert.hatenablog.com/entry/2015/12/04/095601) でした!

#自己紹介

ドーモ、社内ニンジャスレイヤー推進おじさんのかせいさんです
普段はアプリケーションエンジニアとして、Railsアプリの運用、改善を進めております
趣味では電子工作をしており、いろいろなメッセージをLEDで表示できるサイバーサングラスなどを作成しています


<iframe width="560" height="315" src="https://www.youtube.com/embed/vJQ2zjitVgY" frameborder="0" allowfullscreen></iframe>


詳しくはこちら → [サイバーサングラス製作記 | feedforce Engineers' blog](http://tech.feedforce.jp/cyber-sunglasses.html)

#今日は何話すの？

先日開催されたアドテック東京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用語辞典](http://e-words.jp/w/%E3%83%96%E3%83%BC%E3%83%88%E3%83%AD%E3%83%BC%E3%83%80.html)

#なんでブートローダーはマウントされるけど、OSはマウントされないの？

ブートローダーとOSは異なるファイルシステムで構成されており、ブートローダーのファイルシステムだけがMacOS Xに対応している。という状況のためでした

- ブートローダーのファイルシステム : FAT32
- OS(Raspbian) : ext4

#ファイルシステムってなんだっけ？

```
ファイルシステムとは、記憶装置に記録されているデータを管理する方式。
```

```
記憶装置にファイルやフォルダ（ディレクトリ）を作成したり、移動や削除を行ったりする方法や、データを記録する方式、管理領域の場所や利用方法などが定められている。
```
[ファイルシステムとは｜FS｜file system - 意味/解説/説明/定義 ： IT用語辞典](http://e-words.jp/w/%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0.html)


# ファイルシステムってどういうのがあるの？

いろいろあるので、代表的なものを列挙します

- **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に対応しているかどうか確認をきちんとした方が良さそうです

今回は、以下のアプリの体験版を使用しました

- [Paragon ExtFS for Mac OS X](https://www.paragon-software.com/jp/home/extfs-mac/)

# ところでなんでブートローダーだけFAT32なの?

Raspbery Piは、BCM2835というスマホ用の安価なSystem-on-a-chipをコアに使用しています(System-on-a-chipとはCPUやGPUやメモリ、I/Oコントローラーなど、システムに必要な機能を1つのチップに詰め込んだもの)
そして、BCM2835内蔵のブートローダーはFAT32のSDカードを探してマウントしてくれるという機能がありました
Raspbery Piではそれをうまく利用して、以下のような流れで、2つのブートローダーを経由してRaspbianを起動しています

1. BCM2835内蔵のブートローダー → SDカードのFAT32のパーテーションをブート
1. FAT32のパーテーションのブートローダー → ext4のパーテーションをブート
1. Raspbianが起動

# めでたしめでたし

こうして、無事サイバーサングラスはアドテック東京2015に持ち込まれ、大活躍をしてくれました

![株式会社フィードフォース／feedforce_-_Vimperator.png](https://qiita-image-store.s3.amazonaws.com/0/5329/cc8b9083-fe73-d906-112c-3ed73cdbb37c.png "株式会社フィードフォース／feedforce_-_Vimperator.png")


# 参考

[raspbian - Raspberry Pi の SD カードの準備がスッキリと納得できるようになるかもしれない話(少しだけコンピュータ・アーキテクチャっぽい話も) - Qiita](http://qiita.com/UedaTakeyuki/items/4f97240b5fd7fc8a4d0b)


明日、5日目は [cross_black777](http://www.adventar.org/users/7199)のオフィス移転話です!