Skip to content

Mount multiple directories (and archive files and more) as one directory.

License

Notifications You must be signed in to change notification settings

SegaraRai/MergeFS

Repository files navigation

MergeFS

This project is no longer actively developed.

How to use

  1. Install dokany version 2
  2. Download the latest release
  3. Pass .mfcfg file to MergeFSMC.exe (see Example directory in the downloaded archive)

How to build

You have to install Visual Studio 2022 with C++ Desktop Development and UWP Development.

  1. Clone this repository recursively (include submodules)
    git clone --recursive https://github.com/SegaraRai/MergeFS.git
  2. Open MergeFS.sln in the root directory with Visual Studio 2022
  3. Build the solution

License

This project is licensed under the MIT License.

これは

䞻に耇数のディレクトリを単䞀のディレクトリずしおマりントするWindows甚゜フトりェアです。
プラグむンにより、アヌカむブファむルやCUEシヌトのマりントにも察応しおいたす。

䟋えば、以䞋のようにディレクトリAずディレクトリBがあったずしお、

  • A
    • abc
    • def
      • ghi
  • B
    • def
      • jkl
    • mno
      • pqr

これをディレクトリCに以䞋の通りにマりントする゜フトりェアです。

  • C
    • abc
    • def
      • ghi
      • jkl
    • mno
      • pqr

おそらくLinuxでのUnionFSやOverlayFSに䌌たものだず思いたす䜿ったこずがないので分かりたせんが。

マりント自䜓にはDokanyラむブラリを䜿甚しおいたす。

甹途

  • 耇数のドラむブにたたがっお管理するこずになっおしたったものを、䞀぀に纏めたい
  • アヌカむブファむルを展開せずに䞭身のファむルを扱いたい
    • 曎に、アヌカむブファむルに倉曎を加えずにマりント先でファむル倉曎を䌎う䜜業をしたい
  • CUE+FLACで管理しおいる音楜ファむルをトラックごずに切り出すためだけにディスク容量を䜿甚したくない

ずいった甚途を想定しおいたす。

詳现な説明

マりントポむント

マりント先のこずをマりントポむントず呌びたす。
最初の䟋では、ディレクトリCのこずです。

マりントポむントにはドラむブか、NTFSファむルシステム䞊のディレクトリを指定できたす。 ドラむブを指定する堎合は䜿われおいないドラむブレタヌを、NTFSファむルシステム䞊のディレクトリを指定する堎合は既に存圚するディレクトリを指定する必芁があるようです。 他にもネットワヌクドラむブずしおマりントするこずも察応次第では可胜なはずですが、この蟺りの凊理は党おDokanyに委譲しおいるため、そちらをご芧ください。

マりント゜ヌス

マりント元のこずをマりント゜ヌスたたは単に゜ヌスず呌びたす。
最初の䟋では、ディレクトリAやディレクトリBのこずです。

マりント゜ヌスずしおはファむルシステム䞊のディレクトリの他、アヌカむブファむルやCUEシヌトを甚いるこずができたす。 これらのマりント゜ヌスの察応は、プラグむンが行いたす。

マりント゜ヌスには曞き蟌み可胜なものたずえばファむルシステム䞊のディレクトリず曞き蟌み䞍可胜なものたずえばアヌカむブファむルやCUEシヌトがあり、最初のマりント゜ヌスが曞き蟌み可胜である堎合は、マりント先も曞き蟌み可胜になりたす。 このずき、曞き蟌たれた倉曎は最初のマりント゜ヌスかメタデヌタに保存されたす。

メタデヌタ

メタデヌタはマりント゜ヌスのみでは衚せない情報倉曎を衚すために甚いるデヌタです。
䟋えば、先のディレクトリA、Bの䟋で、A、Bの順でCにマりントしたずし、マりント先のCでC/mnoを削陀するこずを考えたす。 C/mnoの実䜓はBにありたすが、Bは最初のマりント゜ヌスではないので倉曎を加えるこずができたせん。 ここで、C/mnoが削陀枈みであるずいうこずを蚘すためにメタデヌタが必芁ずなりたす。 この他にも、䟋えばファむルの属性を倉曎したり、ファむルを移動する堎合にIOを抑えるためにメタデヌタが䜿甚されたす。
珟圚メタデヌタは独自のバむナリ圢匏で保存されおいたすが、今埌SQLite3に移す予定です。

マりント゜ヌスの優先順䜍

マりント゜ヌスの優先順䜍は、競合するファむルやディレクトリが存圚するずきに必芁になりたす。 ぀たり、同じ名前を持぀ファむルやディレクトリが耇数のマりント゜ヌスに存圚した堎合、マりント先でどれを参照すれば良いかを刀断するのに䜿われるのがマりント゜ヌスの優先順䜍です。
マりント゜ヌスの優先順䜍の芏則は単玔で、先に指定されたものがより優先されたす。
䟋えば同じexampleずいう名前を持぀ファむルがマりント゜ヌスXずマりント゜ヌスYの双方に存圚し、それらをあわせおZにマりントした堎合、X、Yの順でマりントしおいればZ/exampleはX/exampleを指し、反察にY、Xの順でマりントしおいればZ/exampleはY/exampleを指したす。

マりント先での倉曎

最初のマりント゜ヌスが曞き蟌み可胜である堎合は、マりント先も曞き蟌み可胜になりたす。 その際、加わった倉曎は最初のマりント゜ヌスに反映されたす。
䟋えば、最初のディレクトリA、B、Cの䟋でA、Bの順にマりントしおいるずしお、新たにC/stuを䜜成した堎合、ディレクトリAにA/stuずしお新たなファむルが䜜成されたす。他に、C/mno/vwuを䜜成した堎合、最初にA/mnoディレクトリがAに䜜成され、その埌にA/mno/vwuが䜜成されたす。

Case sensitivity

Case sensitivityずは、アルファベットの倧文字小文字の区別のこずです。
䟋えばWindowsでは、通垞NTFSボリュヌムにおいおexample.txtずいうファむルにExample.txtずしおアクセスできたす。たたexample.datずExample.datが同じディレクトリに存圚できたせん。 䞀方Linuxなどでは、通垞example.txtずいうファむルにExample.txtずしおアクセスできない代わりに、example.datずExample.datが同じディレクトリに存圚できたす。

MergeFSにおいお、ファむル名の倧文字小文字を区別するかはマりント時のオプションで指定されたす。
ここで指定されたものは、LibMergeFSが管蜄するメタデヌタ等の管理においおは適甚されたすが、LibMergeFSの管蜄倖である゜ヌスプラグむンでは、その゜ヌスプラグむンの実装により適甚されないこずがありたす。
今のずころ、MFPSFileSystem以倖は倧文字小文字の区別の指定が効くようになっおいたす。MFPSFileSystemでは、WindowsのAPIであるCreateFileを呌び出したずきの結果に䟝存したす。基本的には、指定によらず倧文字小文字が区別されたせん。

゜ヌスプラグむンに枡すファむル名の倧文字小文字の調敎をLibMergeFS偎で行い、゜ヌスプラグむンでの察応を䞍芁にするこずも怜蚎䞭です。

Case preservation

Case preservationずは、ファむルを保存する際に倧文字小文字を維持するかどうかです。
䟋えばNTFSではExample.txtずいう名前で保存するず、そのたたExample.txtになりたす。䞀方でFAT16では、8.3圢匏のファむル名にしか察応しおいない堎合、ファむル名はすべお倧文字に倉換されお保存されたす。぀たり、Example.txtずしお保存しようずするず、EXAMPLE.TXTに倉換されお保存されたす。

MergeFSにおいお、倧文字小文字が維持されるかは各マりント゜ヌスによりたす。
珟圚存圚する唯䞀の曞き蟌み可胜なマりント゜ヌスを持぀MFPSFileSystemでは、Case sensitivityの堎合同様WindowsのAPIであるCreateFileを呌び出したずきの結果に䟝存したす。基本的には、そのマりント゜ヌスのもずずなるディレクトリが存圚するボリュヌムのファむルシステムによりたす。 䟋えばNTFSの堎合、倧文字小文字が維持されたす。

プロゞェクト構成

本プロゞェクトは、コアであるLibMergeFSず、クラむアント、そしおプラグむンの3皮類からなりたす。

コア

DLLの圢匏で、コア機胜を担いたす。

  • LibMergeFS
    各マりント゜ヌスを束ね、䞀぀のマりント゜ヌスずしおDokanyに提䟛する圹割を持ちたす。
    C++で曞かれおいたす。

クラむアントフロント゚ンド

実行可胜ファむルの圢で、ナヌザヌにコアであるLibMergeFSの機胜を提䟛したす。

  • MergeFS
    GUIを備え、最終的にメむンのフロント゚ンドにする予定のものです。
    C#で曞く予定ですが、ただほずんど未完成です。C#曞けない。誰か助けお。

  • MergeFSCC
    CLIのフロント゚ンドです。 もずもずコア機胜のテスト甚に䜜成したしたが、これはこれでたた別のフロント゚ンドずしお完成させる予定です。
    C++で曞かれおいたす。

  • MergeFSMC
    タスクトレむ垞駐型のフロント゚ンドです。
    YAMLで蚘述した蚭定ファむルを読み蟌んでマりントできたす。
    おそらく最も実甚的なクラむアントです。
    C++で曞かれおいたす。

プラグむン

DLLの圢匏で、コア機胜に様々な機胜を远加したす。

゜ヌスプラグむン

珟圚提䟛する唯䞀のプラグむン圢匏です。 様々なものアヌカむブファむルや実際のファむルシステム䞊のディレクトリをマりントできるようにしたす。

  • MFPSFileSystem
    実際のファむルシステム䞊のディレクトリをマりントしたす。
    C++で曞かれおいたす。

  • MFPSArchive
    アヌカむブファむルをマりントしたす。 アヌカむブファむル内に存圚するアヌカむブファむルも再垰的にディレクトリずしお読み蟌みたす。 非圧瞮ファむルtarボヌル等など可胜ならばメモリ䞊に展開せず盎接デヌタを読み取りたすが、通垞の圧瞮ファむルの堎合は最初にメモリ䞊に展開を行いたす。コンパむル時オプションで倉曎も可胜です。
    アヌカむブファむルの読み取りに7-Zipを䜿甚しおいたす。
    C++で曞かれおいたす。

  • MFPSCue
    CUE+BIN、CUE+FLAC、CUE+WAVで保存された音楜ファむルをマりントしたす。 CD-DAずしおではなく、各トラックごずに分割されたWAVファむル矀ずしおマりントしたす。 こちらもMFPSArchive同様党おをメモリ䞊に展開せず必芁に応じおデコヌドするようにしおいたす。コンパむル時オプションで倉曎も可胜です。
    FLACのデコヌドにlibFLAC及びlibFLAC++を䜿甚しおいたす。
    C++で曞かれおいたす。

  • MFPSNull
    䜕も䞭身を持たない読み取り専甚゜ヌスです。
    先頭にこれを配眮するこずで、読み取り専甚マりントにできたす。
    C++で曞かれおいたす。

  • MFPSMemory 予定
    メモリ䞊に曞き蟌み可胜な゜ヌスをマりントするものずしお䜜成予定です。
    C++で曞く予定です。

未察応・未完成なもの

  • 党機胜を䜿甚できるCLIフロント゚ンド
  • GUIフロント゚ンド
  • セキュリティ属性
  • プラグむンぞのオプション

About

Mount multiple directories (and archive files and more) as one directory.

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published