====== CentOS7へのaufs3のインストール ======
ふと思い立ったのでやってみた。\\
===== 最低限のやること =====
* CentOS7のインストール
* 最小構成インストールでOK
* ネットワーク通信の確立
* DHCPで良い。/etc/sysconfig/network-scripts/ifcfg-*をいじいじ。
* 必要なパッケージのインストール
* 必要なデータのダウンロード、展開
* カーネルソースへのAUFSパッチの適用
* カーネルのビルド
* 再起動と動作確認
===== 作業 =====
==== CentOS7のインストール ====
普通にインストール。\\
最小構成インストールで良い。\\
作業は面倒なので、rootで
$ su -
Password:
=== ネットワーク接続を有効に ===
**/etc/sysconfig/network-scripts/ifcfg-enp0s3**を編集しておく。
=== 作業領域を作成 ===
# cd /
# mkdir work
# cd /work
==== 必要なパッケージを導入 ====
必要なパッケージを導入しておく。\\
yumを実行
# yum -y install net-tools wget ncurses-devel git bc
# yum -y groupinstall "Development Tools"
==== 必要なデータのダウンロード・展開 ====
必要なデータをダウンロード、展開しておく。\\
もちろんaufsのデータも。\\
kernelはCentOS7が3.10.xなので、現状での3.10系の最新を使用。\\
それに合わせてaufsのパッチも適合するバージョンを使用。
# wget https://www.kernel.org/pub/linux/kernel/v3.x/linux-3.10.49.tar.xz
# tar -Jxvf linux-3.10.49.tar.xz
# git clone git://git.code.sf.net/p/aufs/aufs3-standalone
# cd aufs3-standalone
# git checkout aufs3.10.x
# cd ..
==== カーネルソースへのパッチ適用 ====
aufsはカーネルにパッチを適用する必要があるので。
# cd linux-3.10.49
# patch -p1 < ../aufs3-standalone/aufs3-kbuild.patch
# patch -p1 < ../aufs3-standalone/aufs3-base.patch
# patch -p1 < ../aufs3-standalone/aufs3-mmap.patch
# cp -R ../aufs3-standalone/Documentation/* Documentation/
# cp -R ../aufs3-standalone/fs/* fs/
# cp -R ../aufs3-standalone/include/uapi/linux/aufs_type.h include/uapi/linux/
==== カーネルのビルド ====
カーネルをビルドする。\\
configファイルを/bootにあるものをコピーしてベースとして流用。
# make mrproper
# cp /boot/config-3.10.0-123.el7.x86_64 ./.config
# make menuconfig
menuconfigではAUFSの設定を有効にしておく。
File System
-> Miscellaneous filesystems
<*> Aufs (Advanced multi layered unification filesystem) support
Maximum number of branches (127) --->
[*] Detect direct branch access (bypassing aufs)
method (fsnotify) --->
[*] NFS-exportable aufs
[*] Readdir in userspace
[*] Show whiteouts
[*] Ramfs (initramfs/rootfs) as an aufs branch
[*] Fuse fs as an aufs branch
[ ] Debug aufs (NEW)
カーネルのビルドを実行
make clean
make bzImage
make modules
make modules_install
make install
==== 再起動と動作確認 ====
カーネルのビルドが完了したら、再起動する。\\
場合によってはgrubの設定をいじって、ビルドしたカーネルで自動起動するように設定しても良い。
=== テストデータ準備 ===
$ su -
Password:
# cd /work
# mkdir ro rw mnt
# touch ro/sample1.txt
# touch ro/sample2.txt
# touch ro/sample3.txt
# touch rw/sample4.txt
=== マウントする ===
mount -t tmpfs -o size=200M tmpfs /tmp
mount -t aufs -o br:/work/rw:/work/ro=ro aufs /work/mnt
aufsのマウント前に/tmpにtmpfsをマウントしているが、これはファイルシステムがext3とかなら多分不要。\\
CentOS7はデフォルトでxfsがファイルシステムとして適用されるが、xfsだとaufsが生成するファイルが書けないらしい。\\
tmpfsのマウントをしない状態でaufsのマウントを行うと、次のような良く見かけるエラーになる。
aufs au_xino_create:XXX:mount[XXXX]: xino doesn't support /tmp/.aufs.xino(xfs)
mount: wrong fs type, bad option, bad superblock on aufs,
missing codepage or helper program, or other error
In some cases useful info is found in syslog - try
dmesg | tail or so.
要は、.xinoファイルとやらがXFS上に作成される事に対応していない、ということらしい。\\
今回のようにtmpfsを使ったり、EXT3などのファイルシステムなら問題にならない様子。
=== 動作確認 ===
現状の確認
# ls -la /work/ro/
合計 0
drwxr-xr-x. 2 root root 60 7月 25 10:16 .
drwxr-xr-x. 7 root root 104 7月 25 10:16 ..
-rw-r--r--. 1 root root 0 7月 25 10:16 sample1.txt
-rw-r--r--. 1 root root 0 7月 25 10:16 sample2.txt
-rw-r--r--. 1 root root 0 7月 25 10:16 sample3.txt
# ls -la /work/rw/
合計 0
drwxr-xr-x. 4 root root 81 7月 25 21:55 .
drwxr-xr-x. 7 root root 104 7月 25 10:16 ..
-r--r--r--. 1 root root 0 7月 25 21:55 .wh..wh.aufs
drwx------. 2 root root 6 7月 25 21:55 .wh..wh.orph
drwx------. 2 root root 6 7月 25 21:55 .wh..wh.plnk
-rw-r--r--. 1 root root 0 7月 25 10:16 sample4.txt
# ls -la /work/mnt/
合計 0
drwxr-xr-x. 4 root root 81 7月 25 21:55 .
drwxr-xr-x. 7 root root 104 7月 25 10:16 ..
-rw-r--r--. 1 root root 0 7月 25 10:16 sample1.txt
-rw-r--r--. 1 root root 0 7月 25 10:16 sample2.txt
-rw-r--r--. 1 root root 0 7月 25 10:16 sample3.txt
-rw-r--r--. 1 root root 0 7月 25 10:16 sample4.txt
データを追加してみる
# touch /work/mnt/sample5.txt
で、再度確認
# ls -la /work/ro/
合計 0
drwxr-xr-x. 2 root root 60 7月 25 10:16 .
drwxr-xr-x. 7 root root 104 7月 25 10:16 ..
-rw-r--r--. 1 root root 0 7月 25 10:16 sample1.txt
-rw-r--r--. 1 root root 0 7月 25 10:16 sample2.txt
-rw-r--r--. 1 root root 0 7月 25 10:16 sample3.txt
# ls -la /work/rw/
合計 0
drwxr-xr-x. 4 root root 99 7月 25 21:56 .
drwxr-xr-x. 7 root root 104 7月 25 10:16 ..
-r--r--r--. 1 root root 0 7月 25 21:55 .wh..wh.aufs
drwx------. 2 root root 6 7月 25 21:55 .wh..wh.orph
drwx------. 2 root root 6 7月 25 21:55 .wh..wh.plnk
-rw-r--r--. 1 root root 0 7月 25 10:16 sample4.txt
-rw-r--r--. 1 root root 0 7月 25 21:56 sample5.txt
# ls -la /work/mnt/
合計 0
drwxr-xr-x. 4 root root 99 7月 25 21:56 .
drwxr-xr-x. 7 root root 104 7月 25 10:16 ..
-rw-r--r--. 1 root root 0 7月 25 10:16 sample1.txt
-rw-r--r--. 1 root root 0 7月 25 10:16 sample2.txt
-rw-r--r--. 1 root root 0 7月 25 10:16 sample3.txt
-rw-r--r--. 1 root root 0 7月 25 10:16 sample4.txt
-rw-r--r--. 1 root root 0 7月 25 21:56 sample5.txt
削除もしてみる
# rm /work/mnt/sample3.txt
で、再々度確認
# ls -la /work/ro/
合計 0
drwxr-xr-x. 2 root root 60 7月 25 10:16 .
drwxr-xr-x. 7 root root 104 7月 25 10:16 ..
-rw-r--r--. 1 root root 0 7月 25 10:16 sample1.txt
-rw-r--r--. 1 root root 0 7月 25 10:16 sample2.txt
-rw-r--r--. 1 root root 0 7月 25 10:16 sample3.txt
# ls -la /work/rw/
合計 4
drwxr-xr-x. 4 root root 4096 7月 25 21:59 .
drwxr-xr-x. 7 root root 104 7月 25 10:16 ..
-r--r--r--. 2 root root 0 7月 25 21:55 .wh..wh.aufs
drwx------. 2 root root 6 7月 25 21:55 .wh..wh.orph
drwx------. 2 root root 6 7月 25 21:55 .wh..wh.plnk
-r--r--r--. 2 root root 0 7月 25 21:55 .wh.sample3.txt
-rw-r--r--. 1 root root 0 7月 25 10:16 sample4.txt
-rw-r--r--. 1 root root 0 7月 25 21:56 sample5.txt
# ls -la /work/mnt/
合計 4
drwxr-xr-x. 4 root root 4096 7月 25 21:59 .
drwxr-xr-x. 7 root root 104 7月 25 10:16 ..
-rw-r--r--. 1 root root 0 7月 25 10:16 sample1.txt
-rw-r--r--. 1 root root 0 7月 25 10:16 sample2.txt
-rw-r--r--. 1 root root 0 7月 25 10:16 sample4.txt
-rw-r--r--. 1 root root 0 7月 25 21:56 sample5.txt
ま、こんな感じで。