AuFS は、Another Union File System の略です。
AuFS は、UnionFS Union File System の実装として開始されました。
ユニオンファイルシステムは、既存のファイルシステムを取り、それを新しいファイルシステムに透過的にオーバーレイします。これにより、個別のファイルシステムのファイルとディレクトリが 1 つの屋根の下に共存できます。 AuFS は、複数のディレクトリを結合し、単一の結合ビューを提供できます。
AuFS は、Slax、Knoppix、および他の多くのライブ CD およびライブ USB ディストリビューションなど、多くのオープンソース プロジェクトで使用されています。
Ubuntu などの Debian ベースのシステムでは、次の手順に従って aufs をインストールします。
# apt-get install aufs-tools
例 1 – AuFS の仕組みを理解する
この例は、同じファイルシステムの 2 つのディレクトリをマウントする方法を示しています。
# mkdir /tmp/dir1 # mkdir /tmp/aufs-root # mount -t aufs -o br=/tmp/dir1:/home/lakshmanan none /tmp/aufs-root/
最初の 2 つのコマンドは、2 つの新しいディレクトリを作成しました。 mount.aufs は、ファイルシステムを Union マウントとしてマウントするコマンドです。
マウント コマンドは、「/tmp/aufs-root」の下に「/tmp/dir1」と「/home/lakshmanan」をマウントすることを指定します。ディレクトリ「/tmp/aufs-root」には、「/tmp/dir1」と「/home/lakshmanan」の両方のコンテンツが含まれます。
上記のマウント コマンドの例では、次のオプションが使用されています。
- -o – ファイルシステムに渡すオプションを指定します
- br – ブランチを指定します。各ブランチはコロン (:) で区切られます。ブランチは、システム上のディレクトリにすぎません。
- none – 2 つのディレクトリをマウントするため、関連付けられたデバイスがないことを指定します
以下の ls -l コマンド出力からわかるように、aufs が 2 つの別個のディレクトリの内容をマージし、統一されたビューをもたらしていることがわかります。
# ls -l /tmp/dir1/ -rw-r--r-- 1 root root 23 Mar 25 14:21 file_in_tmp_dir1 # ls -l /home/lakshmanan -rw-r--r-- 1 root root 26 Mar 25 14:20 file_in_home_dir # ls -l /tmp/aufs-root/ -rw-r--r-- 1 root root 26 Mar 25 14:20 file_in_home_dir -rw-r--r-- 1 root root 23 Mar 25 14:21 file_in_tmp_dir1
デフォルトでは、権限が指定されていない場合、最初のブランチは書き込み可能としてマウントされ、残りのブランチは読み取り専用としてマウントされます。
したがって、「/tmp/aufs-root/」内にファイルを作成すると、書き込み可能な唯一のブランチであるため、物理的には「/tmp/dir1」の下に作成されます。
例 2 – ホーム ディレクトリの統合ビュー
システム管理者は、複数のユーザーのホーム ディレクトリを持つ複数のディスク パーティションを持つことになります。統一されたビューとして作成し、管理プロセスを簡素化する方法の例を見ていきます.
この例では:
- /home -> は、「lakshmanan」および「sysadmin」ユーザーを持つ /dev/sda2 のマウント ポイントです
- /home1 -> は、「test」ユーザーを持つ /dev/sdb2 のマウント ポイントです。
# mount -t aufs -o br=/home=rw:/home1=rw -o udba=reval none /common/ # ls -l /common/ drwxr-xr-x 39 lakshmanan lakshmanan 4096 Mar 25 15:52 lakshmanan drwxr-xr-x 26 sysadmin sysadmin 4096 Mar 25 15:51 sysadmin drwxr-xr-x 2 root root 4096 Mar 25 16:36 test
上記のマウント コマンドには、「udba」という追加のオプションがあり、これは「ユーザーの直接ブランチ アクセス」を指します。このオプションは、ユーザーがブランチに直接アクセスし、AuFS を経由せずにファイルを作成/更新する場合に何をすべきかを示します。
以下は udba の可能な値です:
- udba=none – このオプションを使用すると、AuFS は高速になりますが、ユーザーが AuFS を経由せずにファイルやディレクトリを作成した場合、誤ったデータが表示される可能性があります。
- udba=reval – このオプションを使用すると、AuFS はブランチを再検索して更新します。そのため、ブランチ内の任意のディレクトリで行われた変更は、「/common」に反映されます。
- udba=notify – このオプションを使用すると、AuFS はブランチ内のすべてのディレクトリの inotify に登録します。これは AuFS のパフォーマンスに影響します。
# touch /home/lakshmanan/TGS # ls -l /common/lakshmanan/ . . -rw-r--r-- 1 root root 0 Mar 25 17:17 TGS
touch コマンドは、AuFS を介さずに「lakshmanan」のホーム ディレクトリに「TGS」という名前のファイルを作成しました。 「udba=retval」を使用してマウントしたため、ls を実行すると、AuFS は再検索を行い、作成された新しいファイルを表示します。
また、前のマウント コマンドで、各ブランチの権限を読み取り書き込みとして指定したことにも注意してください。そのため、ファイルが /common/test/ の下に作成されると、実際の物理的な場所である「/home1/test/」に物理的に作成されます。他のディレクトリについても同様です。
# touch /common/test/Testing # ls -l /home1/test/ -rw-r--r-- 1 root root 0 Mar 25 18:26 Testing
例 3 – ブランチの読み取り専用パーミッションでマウントする
ブランチごとに権限を設定してマウントすることもできます。
# mount -t aufs -o br=/tmp/dir1=rw:/home/lakshmanan=ro -o udba=reval none /tmp/aufs-root/
上記のコマンドは、「/tmp/dir1」を書き込み可能として、「/home/lakshmanan」を読み取り専用として、/tmp/aufs-root をマウントします。 /tmp/aufs-root で行った変更は、「/tmp/dir1」の下にのみ保存されます。これは、書き込み可能な唯一のディレクトリであるためです。
次の一連のコマンドを使用して、上記を確認できます。
# cat > /home/lakshmanan/1.txt This is a new file # cat /tmp/aufs-root/1.txt This is a new file # cat >> /tmp/aufs-root/1.txt This is updated on AuFS space # cat /home/lakshmanan/1.txt This is a new file # cat /tmp/dir1/1.txt This is a new file This is updated on AuFS space
上記の一連のコマンドでは、次のことを行いました:
- 「/home/lakshmanan」の下に 1.txt というファイルを作成しています。
- 上記で説明した udba=retval オプションにより、このファイルはユニオン マウント ディレクトリに反映されます
- ユニオン マウント ディレクトリにあるファイルを更新します
- ファイルが /home/lakshmanan 内に存在する場合でも、読み取り専用としてマウントされるため、AuFS はファイルのコピーを取得して「/tmp/dir1」に配置します。
- そのコピーの上にコンテンツを追加し、ファイルを保存します
- /home/lakshmanan/1.txtに変更が反映されていない
- 「1.txt」という名前の新しいファイルが「/tmp/dir1」の下に作成され、内容が更新されます
例 4 – AuFS でファイルを作成するためのラウンド ロビン ポリシーを適用する
書き込み可能なブランチが 2 つ以上ある場合、定義済みのポリシーのいずれかを選択できるため、作成されたファイルは選択したポリシーに基づいて保存されます。
# mount -t aufs -o br=/tmp/dir1=rw:/home/lakshmanan=rw -o udba=reval -o create=rr none /tmp/aufs-root/
オプション「create=rr」は、このユニオン マウントにラウンド ロビン ポリシーを適用する必要があることを指定します。ラウンド ロビン ポリシーでは、4 つのファイルを作成すると、2 つのファイルが「/tmp/dir1」に、2 つのファイルが「/home/lakshmanan」に配置されます。
# touch /tmp/aufs/first-round-robin # touch /tmp/aufs/second-round-robin # ls -l /tmp/dir1/first-round-robin -rw-r--r-- 1 root root 0 Mar 25 21:53 /tmp/dir1/first-round-robin # ls -l /home/lakshmanan/second-round-robin -rw-r--r-- 1 root root 0 Mar 25 21:54 /home/lakshmanan/second-round-robin