UnionFSなお話
最近,Unix系の話を書けていないので,ちょっと書いてみようと思います.Unix系の話,なかなか面白いものも多いんですけど,如何せんユーザ数もそう多くないので,書いてもあんまり興味持ってくれないんじゃないかなとかいう気持ちもあります.
実際,OPAPIさんが先日,アメブロのユーザさんへアンケート取った時の,使っているOSは何かという項目の結果はほとんどの方がWindowsのみの環境という結果も出てますし,なかなかMacOS,Unix,Linux関係の記事書くのは勇気がいったりします.
でも「Unixだったらこんな事もできるんだ.おもしろそうだな」と思ってもらえるような内容を出来るだけ伝えられるような内容で書いて,少しでもUnix系ユーザが増えてほしいなと思っています.
それで今回紹介するのはUnionFSについてです.これは,二つのディレクトリ(Windowsで言えばフォルダの事と考えてください)を重ね合わせて利用できるというものです.
このシステムは正確にはBSD系という言われるUnix系OSでしか利用出来ないので注意が必要です.FreeBSDとかOpenBSDとかNetBSDと言われるようなOSです.これらのOSは売ってもいますが,基本的にはタダです.CDイメージをダウンロードして自分でCDを作るか,もしくは雑誌のおまけでなどで手に入れるとよいかと思います.エミュレータなどにインストールしたり,古いコンピュータに遊びで入れたりするとよいかもしれません.
(エミュレータなどの話はまた後日やることにします)
では具体的にどんな感じになるか見てみますか.仮にディレクトリAとディレクトリBがあって,ディレクトリAの中にaというファイルとcというファイル,ディレクトリBの中にbというファイルとcというファイルがあるとします.ディレクトリ構造とファイルの中身を以下のようにしました.一緒に上の図を見てゆくとわかりやすいと思います.
Directory A
File a --> 「aa」
File c --> 「ac」
Directory B
File b --> 「bb」
File c --> 「bc」
この状態にして,この二つのディレクトリを結合します.上の図のようにAを上にしてBを下にしてみます.
# mount -t unionfs ./A ./B (環境によってやや異なります)
こうすると,先ほどのディレクトリは次のように変更されます.
Directory A
File a --> 「aa」
File c --> 「ac」
Directory B
File a --> 「aa」
File b --> 「bb」
File c --> 「ac」
こんな感じでBにAのディレクトリのファイルが来ている事がわかります.こうすると,Bの中身にあるAのファイルを変更した場合,Aのファイルが変更されることになります.また,AとBのディレクトリにはどちらもcというファイルがありますが,これはAのファイルが優先されてしまいます.cのファイルを編集した場合,Aのcが変更されることになります.こんな感じ.
Directory A
File a --> 「aabb」
File c --> 「acb」
Directory B
File a --> 「aabb」
File b --> 「bb」
File c --> 「acb」
という事で下のディレクトリであるBのファイルが保護されている事がわかるかと思います.要するにディレクトリAは透かされたディレクトリでそれを通してディレクトリBを見ている感じになるわけです.もし,ディレクトリBでbのファイルを編集するとこんな感じになります.
Directory A
File a --> 「aabb」
File b --> 「bbaa」
File c --> 「acb」
Directory B
File a --> 「aabb」
File b --> 「bbaa」
File c --> 「acb」
この状態でマウントを解除します.
# umount -A (このコマンドじゃなくてもOK)
Directory A
File a --> 「aabb」
File b --> 「bbaa」
File c --> 「acb」
Directory B
File b --> 「bb」
File c --> 「bc」
といった感じでBのbが変更されていない事がわかります.こういった感じで作業が出来るので,Aのディレクトリにはなにもファイルを入れず,Bのディレクトリに編集したいファイルを入れておき,Bのディレクトリの編集したいファイルを壊さず,編集されたファイルはAに溜めておく事が出来ます.
他にも,こんな使い方も.
# mount -t unionfs -o -b /usr/ports /opt/chroot/usr/ports
こんな感じにすると,ファイルのコピーをすることなく,他の場所に同じファイルを見せる事ができるようになり,HDDの容量を減らす事がありません.Unixの中にもう一つUnixが入っている環境などでは便利です.
Windowsでもこんな便利な事できるといいんですけどね.リンクを張るのはまた違った利用価値があるますね.
実際,OPAPIさんが先日,アメブロのユーザさんへアンケート取った時の,使っているOSは何かという項目の結果はほとんどの方がWindowsのみの環境という結果も出てますし,なかなかMacOS,Unix,Linux関係の記事書くのは勇気がいったりします.
でも「Unixだったらこんな事もできるんだ.おもしろそうだな」と思ってもらえるような内容を出来るだけ伝えられるような内容で書いて,少しでもUnix系ユーザが増えてほしいなと思っています.
それで今回紹介するのはUnionFSについてです.これは,二つのディレクトリ(Windowsで言えばフォルダの事と考えてください)を重ね合わせて利用できるというものです.
このシステムは正確にはBSD系という言われるUnix系OSでしか利用出来ないので注意が必要です.FreeBSDとかOpenBSDとかNetBSDと言われるようなOSです.これらのOSは売ってもいますが,基本的にはタダです.CDイメージをダウンロードして自分でCDを作るか,もしくは雑誌のおまけでなどで手に入れるとよいかと思います.エミュレータなどにインストールしたり,古いコンピュータに遊びで入れたりするとよいかもしれません.
(エミュレータなどの話はまた後日やることにします)
では具体的にどんな感じになるか見てみますか.仮にディレクトリAとディレクトリBがあって,ディレクトリAの中にaというファイルとcというファイル,ディレクトリBの中にbというファイルとcというファイルがあるとします.ディレクトリ構造とファイルの中身を以下のようにしました.一緒に上の図を見てゆくとわかりやすいと思います.
Directory A
File a --> 「aa」
File c --> 「ac」
Directory B
File b --> 「bb」
File c --> 「bc」
この状態にして,この二つのディレクトリを結合します.上の図のようにAを上にしてBを下にしてみます.
# mount -t unionfs ./A ./B (環境によってやや異なります)
こうすると,先ほどのディレクトリは次のように変更されます.
Directory A
File a --> 「aa」
File c --> 「ac」
Directory B
File a --> 「aa」
File b --> 「bb」
File c --> 「ac」
こんな感じでBにAのディレクトリのファイルが来ている事がわかります.こうすると,Bの中身にあるAのファイルを変更した場合,Aのファイルが変更されることになります.また,AとBのディレクトリにはどちらもcというファイルがありますが,これはAのファイルが優先されてしまいます.cのファイルを編集した場合,Aのcが変更されることになります.こんな感じ.
Directory A
File a --> 「aabb」
File c --> 「acb」
Directory B
File a --> 「aabb」
File b --> 「bb」
File c --> 「acb」
という事で下のディレクトリであるBのファイルが保護されている事がわかるかと思います.要するにディレクトリAは透かされたディレクトリでそれを通してディレクトリBを見ている感じになるわけです.もし,ディレクトリBでbのファイルを編集するとこんな感じになります.
Directory A
File a --> 「aabb」
File b --> 「bbaa」
File c --> 「acb」
Directory B
File a --> 「aabb」
File b --> 「bbaa」
File c --> 「acb」
この状態でマウントを解除します.
# umount -A (このコマンドじゃなくてもOK)
Directory A
File a --> 「aabb」
File b --> 「bbaa」
File c --> 「acb」
Directory B
File b --> 「bb」
File c --> 「bc」
といった感じでBのbが変更されていない事がわかります.こういった感じで作業が出来るので,Aのディレクトリにはなにもファイルを入れず,Bのディレクトリに編集したいファイルを入れておき,Bのディレクトリの編集したいファイルを壊さず,編集されたファイルはAに溜めておく事が出来ます.
他にも,こんな使い方も.
# mount -t unionfs -o -b /usr/ports /opt/chroot/usr/ports
こんな感じにすると,ファイルのコピーをすることなく,他の場所に同じファイルを見せる事ができるようになり,HDDの容量を減らす事がありません.Unixの中にもう一つUnixが入っている環境などでは便利です.
Windowsでもこんな便利な事できるといいんですけどね.リンクを張るのはまた違った利用価値があるますね.