質問

どのように私はLinuxのファイルシステムでループを作成するのですか?私は、Linuxのファイルシステムの非循環有向グラフ(DAG)プロパティを壊したいです。これは可能ですか?私は私のUbuntuでscratchboxクロスコンパイラをインストールしたとき、私は一度、この状態を見てきています。

私は今、それを再現する方法がわからない。

役に立ちましたか?

解決

他のいくつかのレスポンダが既にループバックデバイスを使用してマウントを設定する方法を答えていますが、あなたは特に少し異なっているbindマウント、について尋ねました。あなたがマウントバインドを使用する場合は、あなただけのmountコマンドで--bindを指定します。たとえばます:

mount --bind /original/path /new/path

これは、ファイルシステムの場所が/original/pathでアクセス/new/pathを通じてアクセス可能な<私>ものようになります。この意志ないに、次のマウントポイントことに注意してください!例えば、私は、次のマウントポイントがあるとします:

/something
/something/underneath/that

今、私はbind/somethingのためにマウントさせると仮定します:

mount --bind /something /new_something

私はパス/something/myfile経由/new_something/myfileのようなファイルにアクセスすることができます。しかし、私ははありませんはパス/something/underneath/that/otherfile経由/new_something/underneath/that/otherfileのようにファイルにアクセスすることができます。あなたは、各ファイルシステムのマウント別のbindを設定する必要があります。あなたが比較的新しいカーネルを持っている場合は、あなたは、はマウントポイントに従わないこれ、rbindマウントを使用することができます:

mount --rbind /something /new_something

rbindマウントについての1つの警告:彼らはrbindがセットアップされた後、ファイルシステムがマウントされているケースを処理しません。それは、私はこのようなマウントがあるとされます:

/something

それから私は、上記のように、私のrbindを設定し、<私>そしては私が/something/underneath/thatマウント:rbindは魔法のように新しいがrbind場所を通して見えるマウントすることはありません。また、明らかにカーネルのバグが原因で、あなたはrbindマウントアンマウントできないことに注意してください。

また、念のためにあなたが意味「私は(2)システムコールのマウントを使用してバインドマウントを設定する方法を教えてください」:マウントあなたが定期的にMS_BINDためmount.hを呼び出すときに(mount(2)で定義された)bindフラグを指定する必要があります。 rbindマウントのために、あなたはMS_BINDと(MS_RECで定義された)undocument linux/fs.hフラグを指定する必要があります。

希望のに役立ちます、

エリックMelski

他のヒント

すべての答えは、これまでのループバックデバイスへの搭載、およびを使用してループを作成しない程度であるように

に見えますバインドはにマウントします。

あなたはおそらく発見してきたように、

$ mkdir -p test/test
$ mount --bind test test/test

あなただけがtest/test/testにアクセスすることができず、それ以上。さえ

$ mount --rbind test test/test
再帰バインドマウント効果的には、ソース上の既存のマウントを見つけ、ターゲットでそれらを結合を経由するため、

は、働きます。

バインドマウントはマウントポイントを横断していないので、何を求めてきましたが、できません。あなたが本当にファイルシステムのループをシミュレートしたい場合は、 localfs 。私は自分自身が提供するファイルシステムを読み取ろうとするとき、それがロックアップして、自分自身を試していません。ちょうど今、私はcrossmntでNFSツリーをエクスポートし、自身の下でそれをマウントしようとしたが、同様の理由で失敗します。

mount /path/to/device /path/to/mount/location -o loop

/パス/に/デバイスおよび/パス/ /マウントする/場所、マウントしたいパーティション、またはディスクイメージへのパスのいずれかへのパスでマウントしたいフォルダへのパスです

下デバイス/画像

あなたも(FAT16 / FAT32を使用しています)ので、のようなファイルシステムの種類を含める必要があります:

mount /path/to/device /path/to/mount/location -o loop -t vfat

また一から作成することもできます:

最初のイメージファイルを作成し、それを初期化します。

dd if=/dev/zero of=/tmp/loop.img bs=1024k count=$IMG_SIZE

次に、お好みのFSタイプを使用して有効なパーティションにする

mkfs.ext3 -F /tmp/loop.img

あなたの新しいイメージをマウントします。

mkdir -p /mnt/image
mount /tmp/loop.img /mnt/image -o loop

これで、ファイルやディレクトリがあなたの新しいイメージにコピー/作成することができます。

楽しみを持って、

Jeach!

scroll top