web-dev-qa-db-ja.com

差分、別名オーバーレイ、別名ユニオン、コミット機能を備えたファイルシステムの使用

私は2台のPCで作業しており、すべてのファイルをプライマリPCからUSBフラッシュメモリに同期しています。 2台目のPCでは、USBフラッシュメモリを同じパスにマウントして、プライマリPCと同じファイルで作業します。

パフォーマンスとフラッシュメモリの寿命のために、USBフラッシュディスクを読み取り専用および書き込みの変更として使用できるようにするには、任意のタイプの差分、別名オーバーレイ、別名ユニオン、ファイルシステム(unionfsやaufsなど)を使用する必要があります一時ディレクトリに移動し、最後に変更をUSBフラッシュに一度に書き戻すことができます。

何か助けはありますか?希望はありますか?

更新:

すべての回答とコメントをありがとう。 Linuxに興味があり、質問は次のとおりです。上記のファイルシステムのいずれかで、必要に応じて下位のファイルシステムへの書き込みをコミットできますか?はいの場合、どのように?

3
mmonem

「snapshot-merge」と呼ばれる新しいdmターゲットがあります。

USBフラッシュメモリをLVM物理ボリュームとしてフォーマットし、論理ボリューム内でその上に目的のファイルシステムを配置すると、次のことが可能になります。

  1. USBフラッシュメモリとローカルディスク上の別のLVM物理ボリュームを含むボリュームグループをアクティブ化します。
  2. ローカルディスク上に論理ボリュームのスナップショットを作成します。
  3. スナップショットをマウントし、必要な操作を行ってから、マウントを解除します。
  4. スナップショットを元の場所にマージします。

一時ディレクトリではなくスクラッチブロックデバイスが必要ですが、これはあなたが要求したものに近いものになるはずです。


必要に応じて、{中括弧}で囲まれた部分に置き換えます。

#USBドライブの初期設定。
 pvcreate/dev/{USB} 
 vgcreate {removable} /dev/{USB}
lvcreate -n {base } -l 100%PVS {removable} /dev/{USB}
mkfs -t {fs} {...} /dev/mapper/{removable}-{base}
#スクラッチデバイスの初期設定。
 pvcreate/dev/{SCRATCH} 
#デバイスのマウント。
 vgextend {removable}/dev/{SCRATCH} 
 lvcreate -s -n {snap} -l 100%Origin/dev/mapper/{removable }-{base} /dev/{SCRATCH}
mount -t {fs} -o {...}/dev/mapper/{removable}-{snap} {MOUNTPOINT} 
#デバイスをアンマウントします。
 umount {MOUNTPOINT} 
 lvconvert --merge /dev/mapper/{removable}-{snap}
vgreduce {removable}/dev/{SCRATCH} 
 vgchange -an {removable} 

テストされていませんが、すべてのLVMコマンドにはマンページがあるため、ここから物事を理解できるはずです。 USBドライブを接続したときにボリュームグループが自動的に検出されない場合は、どこかでvgscan呼び出しが必要になることがあります。

5
ephemient

これは dm-userspace + cowd のユースケースのようです:本質的には、COW(コピーオン)で構成されるDMターゲット(ブロックデバイス)を設定します-書き込み)ファイルとUSBスティックに対応するブロックデバイスを使用して、ファイルシステムをホストします。すべての更新はCOWファイルに送信され、COWファイルにない読み取りはUSBスティックから提供されます。マウントを解除した後ファイルシステムで、COWファイルからの変更をUSBスティックにマージします。

残念ながら、これはLinux固有であり、 開発は2007年に停止したようです。

2台(またはそれ以上)のPC間でファイルを同期する場合は、 自宅(または関連するフォルダー)をバージョン管理システムの下に置く 通常の作業サイクルは次のようになります。この:

  1. uSBスティックを差し込みます。
  2. uSBスティックから最新の変更をプルして、ホームディレクトリリポジトリを更新します。
  3. あなたのことをしなさい;
  4. バージョン管理システムに変更をコミットし、USBスティックのリポジトリを更新します。

USBスティックへの書き込みは1回だけです。 (私は他の人が言ったことに同意しますが、yoru USBスティックが使い果たされるまでに、おそらく別のより大きなものを購入しているでしょう。)

2
Riccardo Murri

おそらく、 btrfsのシード機能http://en.wikipedia.org/wiki/Btrfs#cite_ref-16 )-を利用できます。読み取り専用ベースで読み取り/書き込みfsをシードします。

次に、リムーバブルストレージに同期して戻すという問題に直面します。

lvconvert --mergeに似たbtrfsレベルの機能を知りません。したがって、いくつかのより高いレベルのツール(rsyncなど)を使用して変更をマージすることもできますが、これに対するfsレベルのサポートほど計算効率は高くありません。

または、 btrfs subvolume find-newコマンド もあり、コピーツールが変更されて返送する必要があるものを見つけるのを支援します。

(実際にはテストされていません。)

ファイル同期ツールの使用をお勧めします。問題に対するファイルシステムレベルの解決策は実行できない可能性があります。 nison および conduit を確認してください。私が理解しているように、あなたはすでにあなたのプライマリコンピュータにファイルのコピーを持っています。私が使用するワークフローは次のとおりです。

  1. PC_1でファイルを操作および変更します。完了したら、それらをUSBスティックに同期します。

  2. USBスティックをPC_2に接続し、コンテンツをPC_2に同期します。

  3. PC_2でファイルを操作および変更します。完了したら、それらをUSBスティックに同期します。

変更されたファイルのみが書き換えられるため、同期は非常に高速になります。また、自動的に同期を行うマウントおよびアンマウントトリガーを作成することもできます。

ファイルシステムソリューションの場合、コピーオンライト属性を持ついくつかのFS、たとえばbtrfsを探すことができます。スナップショットを取得して同期する方が高速で効果的かもしれません。しかし、実装はまだ見つかりませんでした。 。また、ファイルシステムレベルで作業しても、競合の解決が容易になるわけではありません。

1
memin

これはUnixフレーバーOS用だと思いますが、Windowsベースのソリューションに興味がある場合は、Microsoft Meshを使用しました。これは、一連のファイルやフォルダーを同期するための無料のツールです。コンピューター。もう1つの優れた機能は、Webインターフェイスを介してこの「クラウド」(私の用語ではなく、それらの用語)にアクセスする機能です。同期されていないリモートコンピューターを使用しているが、特定のファイルにアクセス/ダウンロードしたい場合に便利です。

0
Jmoney38