web-dev-qa-db-fra.com

Exemple d'utilisation OverlayFS

J'utilise Ubuntu 14.04 avec le noyau 3.19 sur lequel OpenFS devrait être supporté (depuis le noyau 3.18). J'ai été à lire à propos de OverlayFS mais je ne comprends pas comment implémenter réellement son utilisation. Il semble que cela pourrait être une alternative vraiment utile à LVM pour permettre d’écrire les modifications ailleurs tout en sauvegardant le système de fichiers original en cours de superposition?

Quelqu'un peut-il me donner des exemples de commandes de montage à utiliser (si possible) dans les cas suivants:

  • Avec une image disque brute (créée à l'aide de dd if=/dev/zero of=$HOME/filestystem1.img bs=4096 count=1024000) pour agir en tant que système de fichiers superposé, montez-la au-dessus du système de fichiers de mon hôte à $HOME/mount qui devrait déjà contenir des fichiers aléatoires tels que file1.txt et file2.txt. Une fois monté, je pense que je devrais toujours être capable de voir mes fichiers déjà existants et que tous les fichiers que je crée maintenant seront réellement stockés dans le fichier filesystem1.img que je pourrais éventuellement déplacer vers un autre système?

  • Créez une autre image de disque brute et montez celle-ci sur celle que nous venons de créer. Est-ce que je fais cela comme une deuxième commande de montage qui est exécutée après la commande de montage que nous avons exécutée dans l'exemple précédent, ou puis-je éventuellement spécifier les deux montages en une fois?

Je ne peux pas dire si OverlayFS est un système de fichiers réel que je dois créer sur les images de disque avec mkfs -t xxx /path/to/raw/disk/image ou est une méthode de montage spéciale et que les images de disque brutes utilisent en réalité quelque chose comme ext4, mais elles sont montées de manière spéciale avec mount -t OverlayFS ? Quand je cours:

cd /sbin
ls mkfs*

Je reçois ce qui suit qui ne montre pas une option pour créer un système de fichiers en superposition.

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

Je ne peux pas dire si OverlayFS est un système de fichiers réel que j'ai besoin de créer sur les images de disque avec mkfs -t xxx/chemin/vers/raw/disque/image, ou s'il s'agit d'une méthode de montage spéciale et que les images de disque brutes utilisent réellement quelque chose comme ext4, mais ils sont montés de manière spéciale avec mount -t OverlayFS?

Il n’est pas nécessaire d’exécuter de commande mkfs pour overlayFS, c’est juste une façon de monter.

Une fois monté, je pense que je devrais toujours être capable de voir mes fichiers déjà existants et que tous les fichiers que je crée maintenant seront réellement stockés dans le fichier filesystem1.img que je pourrais éventuellement déplacer vers un autre système?

Oui, pour une explication plus détaillée du fonctionnement de OverlayFS, vous pouvez vous reporter à "Docker et OverlayFS en pratique" .

Exemples

La création d'un montage par superposition peut être effectuée uniquement avec des répertoires si vous le souhaitez, comme illustré ici:

cd /tmp
mkdir lower upper workdir overlay
Sudo mount -t overlay -o \
lowerdir=/tmp/lower,\
upperdir=/tmp/upper,\
workdir=/tmp/workdir \
none /tmp/overlay

Vous pouvez ajouter des périphériques de blocs [virtuels] avec leurs propres systèmes de fichiers (de tout type) pour qu'ils agissent en tant que systèmes de fichiers inférieurs et supérieurs si vous le souhaitez. La seule restriction est que "workdir" doit être un répertoire vide dans le même système de fichiers que upperdir. Un exemple utilisant un système de fichiers pour upperdir et lowerdir peut être présenté ci-dessous:

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

Les exemples ci-dessus sont tirés de mon blog sur l'utilisation de superposition .

Imbrication des superpositions

... une autre image de disque brute et montez celle-ci sur celle que nous venons de créer. Est-ce que je fais cela comme une deuxième commande de montage qui est exécutée après la commande de montage que nous avons exécutée dans l'exemple précédent ou puis-je éventuellement spécifier les deux montages en une fois?

Vous pouvez imbriquer overlayFS. Par exemple, vous pouvez imbriquer l'exemple ci-dessus en tant que lowerdir dans un autre système overlayFS en exécutant:

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

Lorsque Ubuntu obtient le noyau 4.0 + , nous devrions pouvoir combiner plusieurs répertoires inférieurs en une seule commande en utilisant le caractère deux-points comme séparateur, comme suit:

Sudo mount -t overlay -o \
lowerdir=/tmp/lower:/tmp/lowest,\
upperdir=/tmp/upper,\
workdir=/tmp/workdir \
none /tmp/overlay

Dans ce cas, vous n'avez pas deux répertoires de travail mais un et vous conservez le même chemin fusionné de /tmp/overlay. Les répertoires inférieurs seront empilés de de droite à gauche . Vous pouvez également omettre entièrement upperdir=, ce qui entraîne un montage en lecture seule.

18
Programster