Ubuntu 14.04を3.19カーネルで実行していますが、OpenFSがサポートされている必要があります(カーネル3.18以降)。 OverlayFSについて読んだ ですが、実際にそれを使用して実装する方法については混乱しています。オーバーレイされている元のファイルシステムのバックアップを取りながら、どこか他の場所に変更を書き込むことができるという点で、LVMの非常に有用な代替手段になりそうですか?
次の場合に使用する(可能な場合)マウントコマンドの例を教えてください。
オーバーレイファイルシステムとして機能するrawディスクイメージ(dd if=/dev/zero of=$HOME/filestystem1.img bs=4096 count=1024000
を使用して作成)を使用して、$HOME/mount
などのランダムファイルが既に含まれているfile1.txt
でホストのファイルシステムの上部にマウントしますおよびfile2.txt
。マウントしたら、既存のファイルを見ることができるはずだと思います。今作成したファイルは、実際に別のシステムに移動できるfilesystem1.img
ファイル内に保存されますか?
別のrawディスクイメージを作成し、作成したばかりの別のディスクの上にこのディスクをマウントします。前の例で実行したマウントコマンドの後に実行される2番目のマウントコマンドとしてこれを実行しますか、それとも両方のマウントを一度に指定できますか?
OverlayFSがmkfs -t xxx /path/to/raw/disk/image
でディスクイメージに作成する必要がある実際のファイルシステムであるか、特別なマウント方法であり、rawディスクイメージが実際にext4のようなものを使用しているかはわかりませんが、 mount -t OverlayFS
を使用した特別な方法実行すると:
cd /sbin
ls mkfs*
オーバーレイファイルシステムを作成するオプションが表示されない次のものが表示されます。
mkfs mkfs.cramfs mkfs.ext3 mkfs.ext4dev mkfs.minix mkfs.ntfs
mkfs.bfs mkfs.ext2 mkfs.ext4 mkfs.fat mkfs.msdos mkfs.vfat
OverlayFSがmkfs -t xxx/path/to/raw/disk/imageを使用してディスクイメージに作成する必要がある実際のファイルシステムであるか、または特別なマウント方法であり、rawディスクイメージが実際に何かを使用しているのかわかりませんext4に似ていますが、mount -t OverlayFSで特別な方法でマウントされていますか?
OverlayFSに対してmkfsコマンドを実行する必要はありません。単にマウントする方法です。
マウントしたら、既存のファイルを見ることができるはずだと信じています。今作成したファイルは、実際にはfilesystem1.imgファイル内に保存され、別のシステムに移動できますか?
はい、OverlayFSの仕組みの詳細については、 "Docker and OverlayFS in practice" を参照してください。
オーバーレイマウントの作成は、以下に示すように、必要に応じてディレクトリのみで実行できます。
cd /tmp
mkdir lower upper workdir overlay
Sudo mount -t overlay -o \
lowerdir=/tmp/lower,\
upperdir=/tmp/upper,\
workdir=/tmp/workdir \
none /tmp/overlay
必要に応じて、(任意の)独自のファイルシステムを備えた[仮想]ブロックデバイスを投入して、下位および上位のファイルシステムとして機能させることができます。唯一の制限は、「workdir」がupperdirと同じファイルシステム内の空のディレクトリである必要があることです。 upperdirとlowerdirの両方にファイルシステムを使用した例を以下に示します。
cd /tmp
# Create the necessary directories.
mkdir lower upper overlay
# Lets create a fake block device to hold our "lower" filesystem
dd if=/dev/zero of=lower-fs.img bs=4096 count=102400
dd if=/dev/zero of=upper-fs.img bs=4096 count=102400
# Give this block device an ext4 filesystem.
mkfs -t ext4 lower-fs.img
mkfs -t ext4 upper-fs.img
# Mount the filesystem we just created and give it a file
Sudo mount lower-fs.img /tmp/lower
Sudo chown $USER:$USER /tmp/lower
echo "hello world" >> /tmp/lower/lower-file.txt
# Remount the lower filesystem as read only just for giggles
Sudo mount -o remount,ro lower-fs.img /tmp/lower
# Mount the upper filesystem
Sudo mount upper-fs.img /tmp/upper
Sudo chown $USER:$USER /tmp/upper
# Create the workdir in the upper filesystem and the
# directory in the upper filesystem that will act as the upper
# directory (they both have to be in the same filesystem)
mkdir /tmp/upper/upper
mkdir /tmp/upper/workdir
# Create our overlayfs mount
Sudo mount -t overlay -o \
lowerdir=/tmp/lower,\
upperdir=/tmp/upper/upper,\
workdir=/tmp/upper/workdir \
none /tmp/overlay
上記の例は、 overlayfsの使用に関する私のブログ投稿 から取られています。
...別のrawディスクイメージを作成し、作成したばかりの別のイメージの上にこのイメージをマウントします。前の例で実行したマウントコマンドの後に実行される2番目のマウントコマンドとしてこれを実行しますか、それとも両方のマウントを一度に指定できますか?
あなたは、overlayFSをネストできますcan。たとえば、次のコマンドを実行して、上記の例をlowerdirとして別のoverlayFSシステムにネストできます。
mkdir -p /tmp/upperdir2/upper /tmp/upperdir2/workdir /tmp/overlay2
Sudo mount -t overlay -o \
lowerdir=/tmp/overlay,\
upperdir=/tmp/upperdir2/upper,\
workdir=/tmp/upperdir2/workdir \
none /tmp/overlay2
buntuがカーネル4.0+を取得するとき のように、コロン文字をセパレーターとして使用することにより、単一のコマンドで複数の下位ディレクトリを結合できるはずです。
Sudo mount -t overlay -o \
lowerdir=/tmp/lower:/tmp/lowest,\
upperdir=/tmp/upper,\
workdir=/tmp/workdir \
none /tmp/overlay
この場合、workdirは2つではなく1つであり、/tmp/overlay
の同じマージパスを保持します。下位ディレクトリは、右から左にスタックされます。 upperdir=
を完全に省略して、読み取り専用のマウントを行うこともできます。