Linuxのマウントの仕組みを教えてください。

根本的に勘違いしている可能性もあるので、おかしな点あればご指摘ください。

hda が 10GB
hdb が 120GB あるとします。
hdb はまだマウントしていません。

/var/log にあるログファイルが段々増えていき、3GB 使っているとします。
この状態で /var/log に hdb をマウントします。
そうすると内部的にはどうなるのでしょうか?
hda を使っていた /var/log の 3GB 分の全ファイルが、 hdb にコピー&移動されるのでしょうか?

例えばさらに1年後、/var/log の使用量が 20GB になったとします。
この状態で hdb をアンマウントするとどうなるのでしょうか?
hda は 10GB しかないので足りませんよね。アンマウントに失敗するのでしょうか?

マウントという行為は気軽にして良いものですか?アプリケーションが対象のディスクへ書き込み中にマウントするとどうなりますか?通常はOSのインストール時に行うものですか?マウントをしすぎるとHDDが壊れやすくなりますか?
よろしくお願いします。

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2011/05/27 16:00:05
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答6件)

id:Banias No.1

回答回数237ベストアンサー獲得回数19

ポイント19pt

/var/log にあるログファイルが段々増えていき、3GB 使っているとします。

この状態で /var/log に hdb をマウントします。

そうすると内部的にはどうなるのでしょうか?

いままでにhdaに記録されたログは引き継がれず、真っ新な "/var/log" が現れます。


例えばさらに1年後、/var/log の使用量が 20GB になったとします。

この状態で hdb をアンマウントするとどうなるのでしょうか?

"/var/log" にアクセスしている最中にアンマウントすることはできません。

もしできたとすると、"/var/log" は行方不明になり、システムエラーが起きます。


マウントという行為は気軽にして良いものですか?

ハードディスクのマウントは、OS起動時に行うものです(インストール時ではありません)。つまり、あらかじめ "/etc/fstab" に記述しておくべきです。

リムーバブルなハードディスクや光学ドライブなどのマウントにかぎって、mountコマンドで行います。


マウントをしすぎるとHDDが壊れやすくなりますか?

そういうことはありません。


参考 「ボリュームのチェックとマウント◇初心者のためのLinuxサーバー構築講座

id:gfs

なるほど。参照先が変わるということなのですね。

/etc/fstab に記述しておき、OS起動時に行わせるというのも勉強になりました。

2011/05/20 17:16:37
id:a-kuma3 No.2

回答回数4973ベストアンサー獲得回数2154

ポイント19pt

マウントというのは、論理的な名前 (パス) を、ディスクの領域と結び付ける行為です。

アウマウントは、その結びつきを解除するだけです。


/var/log にあるログファイルが段々増えていき、3GB 使っているとします。

この状態で /var/log に hdb をマウントします。

/var/log が hdb を指すだけです。

hdb の内容が複写されるわけではありません。

hda を指しているパスが無くなりますので、それまでに溜めていたログファイルを参照できません。


例えばさらに1年後、/var/log の使用量が 20GB になったとします。

この状態で hdb をアンマウントするとどうなるのでしょうか?

想像つくと思いますが、hdb を指しているパスが無くなるだけです。


普段は、Windows を使っている方なのでしょうか?

マウントの際に指定するパスは、Windows でいう「ドライブ」だと思ってください。

ひとつのドライブが二つの領域を指すことはありません。それと同じです。

id:gfs

2つの領域を指すと思ったのではなく、コピペしてすべて移動されるのかと思っていました。

2011/05/20 17:17:50
id:takaz No.3

回答回数9ベストアンサー獲得回数3

ポイント18pt

/var/log にあるログファイルが段々増えていき、3GB 使っているとします。

この状態で /var/log に hdb をマウントします。

この操作により、/var/log の下は、hdb の内容だけがアクセスでき、元々のhdaの/var/log/に入っていたファイル類はまったくアクセスできなくなります。

hdbに何も入れていなかった場合、このディレクトリには何もないように見えることになります。

例えばさらに1年後、/var/log の使用量が 20GB になったとします。

この状態で hdb をアンマウントするとどうなるのでしょうか?

hdbに作成したファイル類はアクセスできなくなり、元々のhda の/var/logに入っていたデータが、再び見えるようになります。

つまり、新たに追加した20GBはアクセスできなくなり、代わりに元の3GB分のファイルが見えることになります。

id:gfs

再び見えるようになるというのは本当でしょうか?

ファイルパスはいっしょでも、内部的なIDか何かが異なり、Baniasさんの仰るようにシステムエラーにならないのでしょうか?

2011/05/20 17:19:48
id:a-kuma3 No.4

回答回数4973ベストアンサー獲得回数2154

ポイント18pt

再び見えるようになるというのは本当でしょうか?

見えるようになりますよ。

マウントがやっているのは、勝手に決めたファイルパスと、ディスク領域の物理的なアドレス (実際には、デバイス名) の結び付けです。


例えば、↓のようなことができます。

  • /var/log にマウントしてた hda を、アンマウントして、/var/old/log にマウントする

  • ディスクを抜いて、別のところに刺し、再度 /var/log にマウントする (デバイス名が変わる)

id:online_p No.5

回答回数1153ベストアンサー獲得回数59

ポイント18pt

とにかく、/var/logをメンテすることが先決です。

id:saijyoh_739 No.6

回答回数113ベストアンサー獲得回数10

ポイント18pt

机の上に画用紙を置き、絵を書き始めたとします。

絵を書いている途中で白紙の画用紙を上に重ねておきまた絵を書き始めたとします。

その後、2段重ねになっている上にある画用紙を持ち上げ外すと下に書きかけの画用紙がでてくるはずです。

画用紙を置く事がマウントで上に乗っている画用紙を取り去る事がアンマウントです。

2枚重ねて、2枚目を取り外せば1枚目の画用紙に書いた書きかけの絵がでてきます。

さて、ログの移動はどの様に行うと良いでしょうか。

例えば、

/ が /dev/hda にマウントされてました。

/var が3GB使われています。

/var が大きく増えてきたので別のディスク(/dev/hdb)に移そうと思います。

という場合には次の手順で作業を行います。

まず、/var(/var/logなど)に書き込んでいるかも知れないプロセスを止めます。

※シングルユーザモードに移行すればサービスなどは止まります。

次に新しく/var の内容を置きたいデバイスをマウントします。

mkdir /mnt/work

mount /dev/hdb /mnt/work

※ 作業用なので新しい場所に作れば良いです。

旧/varの内容を作業用ディレクトリに移動します。

mv -rf /var /mnt/work

sync

データの移動が終われば新しい配置でマウントし直します。

umount /mnt/work

mount /dev/hdb /var

作業が終わればマルチユーザモードへ戻ります。

^D

/dev/hdbが更に足りなくなった場合にも同様に作業すれば良いです。

mount /dev/hdc /mnt/work

mv -rf /var /mnt/work

sync

umount /mnt/work

umount /var

mount /dev/hdc /var

^D


> この状態で /var/log に hdb をマウントします。

> そうすると内部的にはどうなるのでしょうか?

> hda を使っていた /var/log の 3GB 分の全ファイルが、 hdb にコピー&移動されるのでしょうか?

最初の例えで上に画用紙が置かれて下になった画用紙が隠された状態となります。

つまり、/dev/hdb が何も入ってない状態でこのファイルシステムが現れますが、元々あった/var/logは見えなくなるだけでそのままの内容で下に隠れている状態となります。

勝手にコピーされたり移動したりはしません。


> 例えばさらに1年後、/var/log の使用量が 20GB になったとします。

> この状態で hdb をアンマウントするとどうなるのでしょうか?

> hda は 10GB しかないので足りませんよね。アンマウントに失敗するのでしょうか?

hdbには/var/logの内容が存在し続けますが、アンマウントされた事により見えなくなります。

※見えなくなっただけでデータはありますので、別の場所にマウントすればそのデータを見る事はできます。

/var/logには3GB程度書かれていた以前の状態が現れます。

回答に幾つか気になった部分がありますので書きます。

まず、回答1ですが

/var/logに書いているプロセスが動いている状態でマウントすれば書いていたソフトが新しい記録を書き込もうとした時に書き込みエラーが起こります。要するに以降のログが失われます。それと、隠されたデータも最後の部分(マウント前に書かれていたはずの部分)が一部失われている可能性もあります。


> "/var/log" にアクセスしている最中にアンマウントすることはできません。

多分アンマウントできます。userのカレントディレクトリが/var/logにある(userがそこにcdで移動していたり、何らかのソフトが/var/log以下から動いていた場合にはアンマウントできない場合があります)

> もしできたとすると、"/var/log" は行方不明になり、システムエラーが起きます。

多分システムエラー(カーネルでのエラー)は起こりません。但し、/var/logに書いているソフト(メールサーバやウェブサーバなどかな)は以後のログの書き込みなどでエラーが発生し、以降のログが記録されない可能性があります。(ソフトの実装依存です)


> ハードディスクのマウントは、OS起動時に行うものです(インストール時ではありません)。つまり、あらかじめ "/etc/fstab" に記述しておくべきです。

> リムーバブルなハードディスクや光学ドライブなどのマウントにかぎって、mountコマンドで行います。

マウントはいつ行っても良いです。ただし、安全に行えるよう条件を整えて行います。例えば/var/logを変更するような場合には手動でのマウント操作が必要になる事もあります。

そして、/etc/fstabに記述しておくのは起動時にマウントするデバイスだけではありません。(noautoオプション付きでリムーバブルメディアや光学ドライブなどを記述したりもします)

※/etc/fstabの説明ページの説明も間違っているあるいは誤解を与えるものでした。

/etc/fstabに書くpathは

/ 1

/usr/log 3

/usr 2

/var/log 3

/var 2

値の少ないパスから順番に行うものです。

上記の例だとまず 1である /をマウントします。

次に 2である /usr と /var をマウントします。

その後、3である /usr/log と /var/logをマウントします。

/usr/log をマウントする前に /usrのマウントを済ませておく必要がある(依存する)時には使う必要があります。( / の真下に平行に配置しないといけないなんて制約はありません)

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません