MathLibre (16G flash memory版)のコピーの作成法

はじめに

ファイルは 1 byte(16進数2桁, 2進数でみれば8桁) の数の列(byte列)とみなせる. unix では各種 device もファイルと同様なbyte列と見なす方法が用意されている. /dev の下のファイルは device をbyte列と見なすための特殊なファイルである. たとえば flash memory や hard disk も /dev/sda, /dev/sdb, /dev/sdc 等 を用いることでbyte列とみなせる. したがって flash memory の丸ごとのコピーはコピー元のdevice からbyte列を読み出し コピー先のdevice へ byte 列を書き出せば可能である. /dev/sdb から /dev/sdc へのコピーを自作のプログラムで書けば次のようになる.
#include < stdio.h >
int main() {
  int c;
  while ((c=getchar()) != EOF) { putchar(c); }
}
をコンパイルして a.out を生成して,
./a.out < /dev/sdb > /dev/sdc


以下では, 上の自作プログラムは簡単すぎて少々不安なので, dd を使う. MathLibre flash memory 版をコピーするには, 原理的には次で OK.
1. オリジナルで起動する.
2. ターミナルから  
     sudo su -  
   で root になる.
3. コピー先を挿入.  
      umount /dev/sdc1  
   でコピー先の自動マウントを解除.
4. dd if=/dev/sdb  of=/dev/sdc
  でbyte列としてコピー
コピー元を消してしまうのを回避するため実際は下記のようにもうすこし慎重に おこなう. df は現在 mount してるファイルシステムを表示するコマンド. これで flash memory 達のデバイス名を確認しながら作業を行う.

flash mathlibre は左側, 起動して, ターミナル(端末)を起動

1701-view-pdf.png



右側にコピー先の flash memory (16G) を入れる

下の図のようなダイアログがでたら, cancel.

1702-view-pdf.png



umount /dev/sdc2 コマンドで, 挿入した flash memory (/dev/sdc) をシステムから切り離す (umount する)

下図のように df コマンドでシステムのファイルシステムに接続された デバイスがわかる. /dev/sdc がきりはなされてることを確認.

1703-view-pdf.png



dd コマンドで コピー

unix ではファイルのみならず, デバイス(flash memory, hard disk , ...) も, 1byte (16進数2桁, 2進数8桁) の数の列と扱われる. dd コマンドは if (input file) から 1 byte づつ読み込み, of (output file) へ 1 byte づつ書き込むコマンド.
if, of の名前 /dev/sdb, /dev/sdc の順番を間違えると オリジナルの flash memory を消してしまうので, よく確認!!

1704-view-pdf.png



2時間ほど待てば完了

16G コピーされていれば, 下記のようなエラーがあっても大丈夫なはず. sync (buffering されてるデータがあるときデバイスに強制的に書き込む) して, コピー先の flash memory を抜いて, うまく動くか試す.
動作中の flash mathlibre をコピーしているので, 最初の起動では, 少々ファイルの修復等が あるかもしれないが, 二度目からは大丈夫のはず. 起動中何か聞かれたら y (yes).

1706-view-pdf.png