Ubuntuで起動を行うには、少なくとも3つの「適切な」方法があります(単にマウントするだけではないことを前提としています)。
/etc/init/*.conf
(スタートアップ)
/etc/init.d/*
(sysvinit)
/etc/rc.local
(ランレベル変更スクリプト)
udevルールを使用する可能性もありますが、複雑になります。それに反対することをお勧めします。sysvinitスクリプトは、このような小さなことには過剰すぎるため、他の2つのオプションに焦点を当てます。ランレベル変更スクリプトは最も単純ですが(あまり好ましくありません)、ここから始めます。
この/etc/rc.local
ファイルは、/etc/init.d/rc.local
sysvinitスクリプトによって実行されます。これは、通常の「オン」ランレベルに切り替えたときに(デフォルトで)最後に実行されます(たとえば、通常の起動時、シャットダウンまたは復旧モードではありません)。ブートデバイスのセットアップを実装するには/etc/rc.local
、ファイルが呼び出され、ループデバイスとして/srv/diskimage
使用することを想定して、の最後にこれを追加します/dev/loop0
。
losetup /dev/loop0 /srv/diskimage
これで本当にすべてです。もちろん、ファイル名をセットアップに最適なものに置き換えてください。
それについてもう少し具体的になりたい場合は、それを保持するファイルシステムがマウントされると、それをセットアップするUpstartジョブを作成できます。例は/srv
、diskimage
ファイルを含むマウントポイントであると仮定すると、次のようになります。
description "Setup loop devices after filesystems are mounted"
start on mounted MOUNTPOINT=/srv
task
exec losetup /dev/loop0 /srv/diskimage
これは概念的に従うのに十分単純でなければなりません:最初の行は人間の読者に対する単なるコメントであり、/srv
ファイルシステムがマウントされるまで待機し、losetupプロセスを実行し、プロセスが正常に終了したときに自分自身が終了したと考えるUpstartへの指示です(「永続的なサービスとは対照的に)。それらの内容を一致するファイルに入れるだけです/etc/init/*.conf
。私が選ぶだろう/etc/init/losetup.conf
自分で。
この/etc/rc.local
ような単純なことに対するUpstartジョブの利点は小さいですが、重要です。最初に、ループデバイスをセットアップしてみてください。ただし、解決してマウントしたら、ループデバイスをセットアップします。第三に、Upstartは非常に柔軟です。たとえば、未使用のループデバイスを見つけて、そのループデバイスを他のupstartジョブで使用するために「エミット」することができます。上記のこの例では。/etc/rc.local
は非推奨であり、「物事を成し遂げるための厄介なサンドボックス」としての使用は、最近ではほとんどの人に嫌われています。その使用を渋る他の理由の中でも、そのファイルを使用するプログラムは単に内容を上書きするだけであり、同じファイルに入れる必要のある異なるスクリプトを調整することは困難です。第二に、成り上がりは、実際にファイルシステムをマウントする問題がある場合はそれは、(必ずファイルシステムが最初に搭載されて作る)あなたのための依存性チェックを処理しません
/etc/init.d/something
、または/etc/rc.local
を使用しますが、どの方法でも機能することをお勧めします。