web-dev-qa-db-ja.com

AUFS:ディレクトリツリーの一部のみの読み取り/書き込みブランチを作成するにはどうすればよいですか?

AuFS(別のユニオンファイルシステム)を使用すると、2つのツリーが重複している場合でも、それらを1つにマージできます。次に、マージされたツリーへの書き込みをブランチの1つに向け、別のブランチに読み取ることができます。

これの古典的な使用法は、Linuxを壊さない読み取り専用のルートファイルシステムを作成するために、 this (ref 1)のようなフラッシュファイルシステムとRAMディスクを使用することです。すべてのファイル書き込みはRAMに送られます。再起動後、システムは出荷時の構成に復元します。

  • /dir1 =読み取り専用
  • /dir2 =読み取り/書き込み
  • /aufs = /dir1/dir2のマージ

次に、/aufs--moveで再マウントして、/(ルート)にします。

簡略化すると、(参照1)の例はこれを実行します

mount -t aufs br=/dir2:/dir1 /aufs
mount --move /aufs /

ただし、書き込み可能(/dir2)がRAMディスクではなく実際のディスク上にあるように使用したいと思います。そうすれば、再起動後、データが保持されます。

ただし、dir2内の特定のファイルが保持されず、(/dir1)デフォルトに復元されるようにする必要があります。これにより、将来のブートでは常に出荷時のファイルが使用されます。ユーザーとログデータを失うことなく。

例えば/etc/bin/boot/usrで変更されたファイルは、再起動後も存続しないはずです。

AUFS Webページ (参照2)には例がほとんどありません。

だから質問に:AuFSを使用してこれを行う正しい方法は何ですか?

私は次のことを考えることができます:

  1. 最初のマウントコマンドを何らかの方法で変更します
  2. 2番目のマウントの前にaufsadd/delを使用してマウントコマンドを追加します
  3. 起動時に/dir2から保存してはいけないツリーを削除するだけです
  4. tmpfsの部分ツリー(etc, bin, boot, lib, etc

参照1: https://help.ubuntu.com/community/aufsRootFileSystemOnUsbFlash
参照2: http://aufs.sourceforge.net/aufs.html

1
Jason Morgan

オプション#1auFS自体はそのようなマウントオプションをサポートしていないため、オプション#1は無効です。あなたはそれを回避しなければなりません。

オプション#:もちろん、起動するたびにこれらのディレクトリを削除するだけです。それは私がここで見る最も簡単な方法かもしれません。

オプション#2tmpfsで作業できます。したがって、最初にtmpfsを作成します。たとえば、サイズが500MBの場合を考えます。

mount -t tmpfs -o rw,size=500M tmpfs /tmpfs

私たちは今持っています:

  • /dir1:読み取り専用
  • /dir2:読み取り/書き込み
  • /tmpfs:RAMでの読み取り/書き込み
  • /aufs/dir1/dir2のオーバーレイ

/tmpfs内に、保存したいdirを作成します。

mkdir -p /tmpfs/{etc,usr,boot,bin}

すでに2つのdirをマージしているときにこれを行うことに注意してください。したがって、/aufsのディレクトリツリーがすでに存在する場合。ただし、ここでは、保存する必要があるディレクトリごとに1つのaufsマウントを実行します。

mount -t aufs -o dirs=/tmpfs/etc=rw:/dir2/etc=ro none /aufs/etc
mount -t aufs -o dirs=/tmpfs/usr=rw:/dir2/usr=ro none /aufs/usr
mount -t aufs -o dirs=/tmpfs/boot=rw:/dir2/boot=ro none /aufs/boot
mount -t aufs -o dirs=/tmpfs/bin=rw:/dir2/bin=ro none /aufs/bin

これで、/aufsにディレクトリツリーができました。どこにでもファイルを書き込むことができますが、たとえば/etcに書き込むと、RAMにある/tmpfs/etcに書き込まれるため、再起動後も存続しません。たとえば、/home内の他のファイルは/dir2/homeに書き込まれます。これは読み取り/書き込み可能なファイルシステムであるため、再起動後も存続します。

別の解決策:オーバーレイファイルシステムと保存されたユーザーデータを使用するクライアントシステムも使用しています。これが私がそれを解決した方法です:単に読み取り専用ファイルシステムとその上にマウントされたtmpfs。後でユーザーがログインすると、読み取り/書き込み可能なSambaサーバーからホームディレクトリをマウントします。したがって、彼のすべてのユーザーデータは/homeに保存および保存され、残りは再起動後も存続しません。あなたの場合、/homeを読み取り/書き込み可能な別の物理パーティションに配置し、後でそれを/aufs/homeにマウントすることができます。

2
chaos