起動時にループデバイスをセットアップする方法


14

起動時にループデバイスをセットアップしたい。これを行う最善の方法は何だろうか。

Googleで検索しました。udevルールを追加すると言う人もいれば、スクリプトを入れると言う人もいれば/etc/init.d、initramfsを変更する人もいます。

それで、これを行うための最良または正しい方法は何ですか?いくつかの詳細(方法について)を教えていただけますか?

ありがとうございました。


私は/etc/init.d/something、または/etc/rc.localを使用しますが、どの方法でも機能することをお勧めします。
enzotib

6
何のために?ブート時にファイルをマウントする場合は、ループオプションを使用して/ etc / fstabに追加するだけで、マウントがループバックデバイスの構成を処理します。
-psusi

@psusi:アドバイスありがとうございます。しかし、私の目的では、マウントだけでは不十分です。実際、ファイルを単純にマウントすることはできません。これは、パーティションイメージではなくディスクイメージです。また、ループボックスを使用してVirtualBoxで仮想ディスクを作成するには、ループデバイスの正確な名前を知る必要があります。(この種の仮想ディスクは、仮想マシンとホストマシン間でファイルを共有する方が簡単だと考えています。組み込みの共有フォルダーは一部のアプリケーションでは機能しません。)
Roun

4
ループバックデバイスではなく、ファイルに仮想マシンを向けることができます。また、仮想マシンを決して実行しない(またはサスペンドさせない)と同時にファイルシステムをホストにマウントしないように注意する必要があります。そうしないと、fsが破損します。そのため、ネットワークを使用して、ホストがnfsまたはsambaまたはsshfsを介して共有しているゲストアクセスファイルを持つようにすることをお勧めします。
-psusi

@Roun:ファイル内のパーティションは引き続きマウントできますが、ファイルの先頭からパーティションのセクターオフセットを指定する必要があります(mount /disk.img /mnt -o loop,offset=2048最初のパーティションなど)。ループデバイスがセットアップされると、partedまたはfdiskを使用してオフセットを見つけることができます(これについては、以下の回答を参照してください)。
zanfur

回答:


7

Ubuntuで起動を行うには、少なくとも3つの「適切な」方法があります(単にマウントするだけではないことを前提としています)。

  1. /etc/init/*.conf (スタートアップ)
  2. /etc/init.d/* (sysvinit)
  3. /etc/rc.local (ランレベル変更スクリプト)

udevルールを使用する可能性もありますが、複雑になります。それに反対することをお勧めします。sysvinitスクリプトは、このような小さなことには過剰すぎるため、他の2つのオプションに焦点を当てます。ランレベル変更スクリプトは最も単純ですが(あまり好ましくありません)、ここから始めます。

この/etc/rc.localファイルは、/etc/init.d/rc.localsysvinitスクリプトによって実行されます。これは、通常の「オン」ランレベルに切り替えたときに(デフォルトで)最後に実行されます(たとえば、通常の起動時、シャットダウンまたは復旧モードではありません)。ブートデバイスのセットアップを実装するには/etc/rc.local、ファイルが呼び出され、ループデバイスとして/srv/diskimage使用することを想定して、の最後にこれを追加します/dev/loop0

losetup /dev/loop0 /srv/diskimage

これで本当にすべてです。もちろん、ファイル名をセットアップに最適なものに置き換えてください。

それについてもう少し具体的になりたい場合は、それを保持するファイルシステムがマウントされると、それをセットアップするUpstartジョブを作成できます。例は/srvdiskimageファイルを含むマウントポイントであると仮定すると、次のようになります。

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/losetup.confの呼び出し方法??? それは私のために働いていません...
イムラン

1

@psusiが指摘したように、最も簡単な方法は次の行を/etc/fstabファイルに追加することです

/path/to/loop/device       /path/to/mount/point       auto       loop       0 0

次に、再起動するかmount -a、rootとして実行します。次に、デバイスをマウントする必要があります。これはで確認できlsblkます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.