web-dev-qa-db-ja.com

OverlayFSの使用例

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
7
Programster

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の使用に関する私のブログ投稿 から取られています。

ネスティング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=を完全に省略して、読み取り専用のマウントを行うこともできます。

18
Programster