読者です 読者をやめる 読者になる 読者になる

ソフトウェアとハードウェアの境界

ホビー開発に関する誰得情報満載☆

MINIBIAN 最小構成のRASPBIAN (Raspberry Pi) ③

全然覚えられないIT業界用語シリーズ

IT業界の専門用語が全然覚えられない。 「IT」からいきなり略称だ。 これはInformation Technorogyの略だけれども、このように頭文字を並べた略称や覚えにくい用語がIT業界には大量に存在する。 しかもかぶっているものもあったりする。 このIT業界の用語が僕は好きになれないというか覚えられないんですすみません。
とりあえず最近覚えた、覚えたい、難しいと感じる略称・用語を挙げてみたい。

  • ARP
    Address Resolution Protocol
    IPアドレスからEthernetMACアドレスの情報を得られるプロトコル
  • ARM
    ARMホールディングス(旧:Advanced RISC Machines社)で開発されているCPUのアーキテクチャの名称。
  • LDAP
    Lightweight Directory Access Protocol
    軽量ディレクトリアクセスプロトコル
  • DHCP
    Dynamic Host Configuration Protocol
    動的ホスト設定プロトコル
  • RAID
    Redundant Arrays of Inexpensive Disks または
    Redundant Arrays of Independent Disks
    複数台のハードディスクを組み合わせることで仮想的な1台のハードディスクとして運用し冗長性を向上させる技術(Wikipediaより抜粋)。
  • クエリ
    query。問い合わせ。
  • クーリエ
    courier。添乗員、案内人、ガイド。
  • SQL
    Structured English Query Languageが由来のデータベース言語。
  • リゾルバ
    resolver。解決者。ドメイン名を解決するもの。

パッと浮かんだものだけでもこれくらいある。 えらい偏ってる。 なんかややこしく聞こえるものがたくさんあるなぁ。 名称はあまり略さずに使用していただきたい。 イニシャル三文字シリーズがもう嫌で嫌で…。 VPNとかVPSとかVLANとかあああああぁぁぁぁ。

続 Raspberry Piで遊ぶ

RPiで引き続き遊んでみよう。

今回は以下の順番で、オリジナルのディスクイメージを作成してみたい。

  1. GPartedでSDカードにパーティションを作る。
    64MBのFAT32領域と960MBのext4領域の起動用SDカードを作成する。
  2. MINIBIANのディスクイメージをLinuxBean上にマウントし、中身だけをSDカードの各領域にコピーする。
  3. その状態で起動できるか試す。
  4. 起動することが確認できたら、SDカードのその起動イメージを書き出す。

こうすることによって、RPiのイメージをPC上でいじったり、丸ごとバックアップすることができる。

GPartedでSDカードの操作

LinuxBeanでは標準でインストールされている、パーティション操作ツールだ。

GPartedイメージ

f:id:tokixy56:20160131224528p:plain

GPartedでSDカードのすべての領域を削除

f:id:tokixy56:20160131224936p:plain
まずは一度すべての領域を削除する。
間違ってもPCのパーティションを削除しないように!!
マウント状態だと削除できないので、各パーティションをアンマウントした状態で削除。

GPartedでFAT32領域を作成

f:id:tokixy56:20160131225141p:plain
次はFAT32領域を作成。なぜかわからないが、前方に1MBの空き領域を作成しなければならないようなので、実際には63MBのFAT32領域となる。

GPartedでext4領域を作成

f:id:tokixy56:20160131225530p:plain
追加ボタンをクリックして完了。

GPartedでのパーティショニング完了

f:id:tokixy56:20160131230957p:plain
これで「↵」ボタンを押して適用すれば、パーティショニングが完了する。

MINIBIANディスクイメージをLinuxBean上にマウント

まずは下記のように、カレントディレクトリを整理しよう。

% ls -l
drwxrwxr-x 5 tokixy56 tokixy56       4096 Jan 31 17:10 .
drwxrwxr-x 6 tokixy56 tokixy56       4096 Jan 19 23:04 ..
...
-rwxrwxr-x 1 tokixy56 tokixy56  832569344 Jan 20 23:55 2015-11-12-jessie-minibian.img
drwxrwxr-x 2 tokixy56 tokixy56       4096 Jan 19 22:05 mnt

2015-11-12-jessie-minibian.imgがMINIBIANのディスクイメージである。 カレントディレクトリにmntディレクトリを作成しておき、ここにマウントするようにしたい。

MINIBIANディスクイメージのFAT領域をマウント

まずは、fdiskコマンドでディスクイメージの情報を確認する。

% fdisk -l 2015-11-12-jessie-minibian.img

Disk 2015-11-12-jessie-minibian.img: 832 MB, 832569344 bytes
255 heads, 63 sectors/track, 101 cylinders, total 1626112 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000

                         Device Boot      Start         End      Blocks   Id  System
2015-11-12-jessie-minibian.img1              16      125055       62520    b  W95 FAT32
2015-11-12-jessie-minibian.img2          125056     1626112      750528+  83  Linux

次に、ディスクイメージの情報をみて、オフセットを調べる。 上記の情報ではStart位置は16、これはブロックサイズ、つまりセクタサイズだ。 コマンドの下に表示されている「Units = sectors...」にあるように、1セクタは512バイト。 よって、512byte×16=8192バイトずらしたところがマウントする先頭位置となる。

% sudo mount -t vfat -o loop,offset=8192 2015-11-12-jessie-minibian.img mnt

これでmntディレクトリにFAT領域がマウントされる。
f:id:tokixy56:20160131230718p:plain
この中身をすべてSDカードのFAT32領域にコピーする。 GUIのファイルマネージャ(PCManFM)ではコピーできなかったので、僕はこのコマンドを使用した。

% sudo cp -r mnt/* /media/tokixy56/[FAT32のディレクトリ]

コピーが完了したら、アンマウントを忘れないように。

% sudo umount mnt
MINIBIANディスクイメージのext4領域をマウント

次はext4領域をマウントする。

sudo mount -t ext4 -o loop,offset=64028672 2015-11-12-jessie-minibian.img mnt

これもFAT32の時と同じように512byte×先頭位置で計算した値をoffset値としてセットする。 RPiのrootディレクトリがmntにマウントされていることがわかる。
f:id:tokixy56:20160131233212p:plain
これもSDカードのext4領域にコピーする。

% sudo cp -r mnt/* /media/tokixy56/[ext4のディレクトリ]

コピーが完了したら忘れずにumount。

ここで一度起動確認

何事もなければ起動するはず。
起動しない場合はもう一度手順を確認してみよう。

SDカードからディスクイメージを書き出す

ddコマンドを利用して、先ほど作成したSDカードのディスクイメージをPCへ書き出す。

ddコマンドでSDカードから書き出し

sudo dd if=/dev/sd[SDカード] of=minibian.img bs=512 count=2097152

僕の場合は/dev/sdgがSDカードデバイスだった。
出来上がったファイルをfdisk -lコマンドでみてみる。

% fdisk -l minibian.img
...
       Device Boot      Start         End      Blocks   Id  System
minibian.img1            2048      131071       64512    b  W95 FAT32
minibian.img2          131072     2097151      983040   83  Linux

% fdisk -l 2015-11-12-jessie-minibian.img
...
                         Device Boot      Start         End      Blocks   Id  System
2015-11-12-jessie-minibian.img1              16      125055       62520    b  W95 FAT32
2015-11-12-jessie-minibian.img2          125056     1626112      750528+  83  Linux

元々のMINIBIANのディスクイメージとは、Startセクタやブロックサイズが異なることがわかる。 このようにすれば、自分が作成したSDカードの状態をそのままバックアップとして保存できるため便利だ。
また、前述のマウントの手順を踏めば、自分が作成したディスクイメージも同じようにマウントできる。 自分が作成したプログラムを、マウントしたディスクイメージにコピーし、SDカードにddで書き込むということも可能になるわけだ。
ddによるSDへの書き込みは下記のコマンドを実行。

ddコマンドでSDカードへ書き込み

sudo dd if=minibian.img of=/dev/sd[SDカード] bs=512 count=2097152

書き出しコマンドのifofの値を入れ替えただけ。 これでネットワーク越しやUSBメモリをさしてファイルをコピーする必要もなくなるわけだ。
SDカードをPCに挿せば普通にマウントしてくれるからここまでする必要はないのだけども…。 まぁ遊びの一貫ということで。

今後

この状態だと、SDカードの一部だけが使用されることになり、局所的に寿命を早めてしまう。 仕方ないことではあるのだが、ちょっとでも寿命を伸ばすために、/tmpディレクトリや/var及び/var/logをRAM上に配置するようにしたい。
この設定をすると、電源を落とすたびにログファイルなどが消滅してしまうが、遊びで使っているので全く必要ない。 デバッグなどで残す必要がある場合にはその都度ROM領域にコピーするようにすればいいだろう。