世界線航跡蔵

Mad web programmerのYuguiが技術ネタや日々のあれこれをお送りします。

2013年11月09日

Ubuntu 12.04 preciseをaufs rootにした

表題のようにaufsをroot filesystemとしてマウントしてみたので、手順をメモする。

経緯

最近DNA940という面白い機器を手に入れた。なんでも本来は産業用機器のベースとして使用することを想定した機体で、中身はx86ベースの基板にGbE×4やらコンソールポートやらいろいろついている。 Debianが動いたという話も耳にする。

これにソフトウェアルーターを組み合わせて自宅ネットワークのルーターを好きなように組む、という野望を抱いたのがそもそもの動機である。

ところで、DNA940は2.5in HDDを組み込めるのでそれをメインディスクにしても良いのだけど、可動部品は可能な限りなくしたいのでCFのほうが嬉しい。しかしながら、普通にDebianやUbuntuのシステムをCFで動かすとすぐに書き込み上限に引っかかるのは目に見えている。 そこでaufsでext4の上にtmpfsをオーバーレイしたものをroot fsにしたい、というのが今回の話だ。

いきなり実機は怖いので、まずはVMWare Fusion上の仮想マシンでやってみる。

手順

同じような需要は各所に有ると見えて、手順はUbuntuのヘルプサイトにまとまっている。意外と簡単だった。

  1. 仮想マシンを作成する。メモリを1GB、ディスクを2GB割り振って、 ディスクは丸ごとext4のルートファイルシステムとした。Swap領域は作成しない。
  2. Ubuntu Precise (x86-64 Server Edition)をインストールする。 前述のヘルプページではLive CDからインストールするように書いてあるが、 これだとデスクトップ版がインストールされるような気がした。 そこで、普通にサーバー版のインストールディスクを用いた。
  3. 以下はヘルプページの手順に従った。

    % sudo aptitude install aufs-tools
    % sudo bash -c "echo aufs >> /etc/initramfs-tools/modules"
    

    ここでヘルプページに書いてあるrootaufs Scriptを/etc/initramfs-tools/scripts/init-bottom/__rootaufsに保存した上で、

    % sudo chown root:root /etc/initramfs-tools/scripts/init-bottom/__rootaufs
    % sudo chmod 0755 /etc/initramfs-tools/scripts/init-bottom/__rootaufs
    % sudo update-grub
    % sudo-initramfs -u
    

    とする。

    initrdまわりはあまり詳しくなかったのだけど、要はこのscriptsディレクトリ以下にあるスクリプト群はinitrd.imgの中にコピーされて、起動時にinitrdで動いている段階で実行されるということらしい。 スクリプトを見る感じ、実行時の${rootmnt}変数とかが見慣れないものの大体やってることは予想通りだ。tmpfsをマウントして、元のrootを他のマウントポイントにどかしてreadonlyでremountして、それからaufsで両者を重ねる。

  4. 再起動する。 さっきのスクリプトはカーネルの引数にaufs=tmpfsを渡したときのみ発動するように書かれているので、起動時に引数を手入力した。
  5. 起動後mountが期待通りであることを確認する。

    なお、ヘルプページにも書かれているように、rootaufsだとdhclient3がapparmorに引っかかって動かないようだ。おまけにDHCPを何度か再試行する間、起動を待たされる。私の用途ではDHCPは必要ないのでIPはstaticに割り振ることにした。 ログを見る限り、この問題って起動タイミングの関係上rootfsの移動によってdhclient3のリンクされるライブラリのパスがapparmorが思ってるやつとずれてしまうのが原因みたいね。dhclient3をprelinkとかすれば解決するんだろうか。まー今回は関係ない。

  6. 次は、常にaufs=tmpが渡るようにGrubを設定する。

    ヘルプページに書いてあるのはたぶんGrub1の設定だ。今回の環境の場合はGrub2なので少し手順が異なる。 といっても、やることは簡単で/boot/grub/menu.lstの代わりに/etc/default/grubGRUB_CMDLINE_LINUX_DEFAULTに"aufs-tmpfs"を設定するだけだ。 設定した後はsudo update-grub/boot/grub/grub.cfgを再生成する。

    以上により、起動時に自動的にaufs-tmpfsが引数に渡るように/boot/grub/grub.cfgが設定され、かつカーネルを入れ替えたりしてgrub.cfgが再生成されても設定が保たれるようになった。

トラックバック

http://yugui.jp/articles/877/ping

現在のところトラックバックはありません

コメント

blog comments powered by Disqus

ご案内

前の記事
次の記事

タグ一覧

過去ログ

  1. 2016年07月
  2. 2016年01月
  3. 2015年09月
  4. 2015年08月
  5. 過去ログ一覧

フィード

フィードとは

その他

Powered by "rhianolethe" the blog system