montagem / var como overlayfs

0

Estou executando um sistema de arquivos somente leitura em um pi pi de framboesa até agora tudo funciona bem até que eu tentei montar / var como overlayfs para nginx e outros serviços para trabalhar usando isso:

VAROVRL="-o lowerdir=/var,upperdir=/mnt/persist/var-rw,workdir=/mnt/persist/var-work"
mount -t overlay ${VAROVRL} overlay /var

enquanto isso está funcionando e todos os serviços não iniciam nenhum problema, notei que o comando mount gera apenas a montagem de sobreposição e é duplicado toda vez que eu reinicializo.

após 3 reinicializações:

mount
overlay on /var type overlay (rw,lowerdir=/var,upperdir=/mnt/persist/var-rw,workdir=/mnt/persist/var-work)
overlay on /var type overlay (rw,lowerdir=/var,upperdir=/mnt/persist/var-rw,workdir=/mnt/persist/var-work)
overlay on /var type overlay (rw,lowerdir=/var,upperdir=/mnt/persist/var-rw,workdir=/mnt/persist/var-work)

saída de / etc / mount

/dev/root / ext4 ro,relatime,data=ordered 0 0
devtmpfs /dev devtmpfs rw,relatime,size=469532k,nr_inodes=117383,mode=755 0 0
sysfs /sys sysfs rw,nosuid,nodev,noexec,relatime 0 0
proc /proc proc rw,relatime 0 0
tmpfs /dev/shm tmpfs rw,nosuid,nodev 0 0
devpts /dev/pts devpts rw,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000 0 0
tmpfs /run tmpfs rw,nosuid,nodev,mode=755 0 0
tmpfs /run/lock tmpfs rw,nosuid,nodev,noexec,relatime,size=5120k 0 0
tmpfs /sys/fs/cgroup tmpfs ro,nosuid,nodev,noexec,mode=755 0 0
cgroup /sys/fs/cgroup/systemd cgroup rw,nosuid,nodev,noexec,relatime,xattr,release_agent=/lib/systemd/systemd-cgroups-agent,name=systemd 0 0
cgroup /sys/fs/cgroup/cpu,cpuacct cgroup rw,nosuid,nodev,noexec,relatime,cpu,cpuacct 0 0
cgroup /sys/fs/cgroup/blkio cgroup rw,nosuid,nodev,noexec,relatime,blkio 0 0
cgroup /sys/fs/cgroup/memory cgroup rw,nosuid,nodev,noexec,relatime,memory 0 0
cgroup /sys/fs/cgroup/devices cgroup rw,nosuid,nodev,noexec,relatime,devices 0 0
cgroup /sys/fs/cgroup/freezer cgroup rw,nosuid,nodev,noexec,relatime,freezer 0 0
cgroup /sys/fs/cgroup/net_cls cgroup rw,nosuid,nodev,noexec,relatime,net_cls 0 0
systemd-1 /proc/sys/fs/binfmt_misc autofs rw,relatime,fd=23,pgrp=1,timeout=300,minproto=5,maxproto=5,direct 0 0
debugfs /sys/kernel/debug debugfs rw,relatime 0 0
mqueue /dev/mqueue mqueue rw,relatime 0 0
configfs /sys/kernel/config configfs rw,relatime 0 0
tmpfs /tmp tmpfs rw,relatime,size=102400k 0 0
/dev/mmcblk0p1 /boot vfat ro,relatime,fmask=0022,dmask=0022,codepage=437,iocharset=ascii,shortname=mixed,errors=remount-ro 0 0
/dev/mmcblk0p5 /mnt/persist ext4 rw,relatime,data=ordered 0 0
/dev/mmcblk0p6 /mnt/cache ext4 rw,relatime,data=ordered 0 0
/dev/mmcblk0p7 /mnt/osboot vfat rw,relatime,fmask=0022,dmask=0022,codepage=437,iocharset=ascii,shortname=mixed,errors=remount-ro 0 0
/dev/mmcblk0p8 /mnt/osimage ext4 rw,relatime,data=ordered 0 0
/dev/mmcblk0p9 /mnt/userdata ext4 rw,relatime,data=ordered 0 0
overlay /etc overlay rw,relatime,lowerdir=/etc,upperdir=/mnt/persist/etc-rw,workdir=/mnt/persist/etc-work 0 0
overlay /var overlay rw,relatime,lowerdir=/var,upperdir=/mnt/persist/var-rw,workdir=/mnt/persist/var-work 0 0
binfmt_misc /proc/sys/fs/binfmt_misc binfmt_misc rw,relatime 0 0

saída de / etc / mtab

overlay /var overlay rw,lowerdir=/var,upperdir=/mnt/persist/var-rw,workdir=/mnt/persist/var-work 0 0
overlay /var overlay rw,lowerdir=/var,upperdir=/mnt/persist/var-rw,workdir=/mnt/persist/var-work 0 0
overlay /var overlay rw,lowerdir=/var,upperdir=/mnt/persist/var-rw,workdir=/mnt/persist/var-work 0 0

observe que /etc também é montado como overlayfs, mas não gera esse problema quando é a única montagem de sobreposição.

qualquer um pode ver algo que estou fazendo errado aqui?

    
por TheBrash 23.01.2017 / 11:35

1 resposta

2

O arquivo /etc/mtab é gravado pelos comandos mount e umount . Mantê-lo preciso requer um pouco de trabalho porque eles só podem atualizar /etc/mtab se esse arquivo estiver disponível e gravável.

Para o caso usual em que /etc é montado como read-write em algum momento durante a inicialização, as distribuições configuram um script que reescreve /etc/mtab durante a inicialização, assim que a partição raiz é montada como read-write. Isso é necessário no caso de o sistema desligar sem desmontar tudo (por exemplo, devido a uma falha do sistema ou falta de energia).

No seu caso, onde /etc está em overlayfs, o script de inicialização é executado na hora errada quando /etc ainda é somente leitura ou não suporta o caso de uma raiz de sobreposição. Então, se você quiser manter /etc/mtab como um arquivo normal, você terá que ajustar esse script ou a hora em que ele será executado.

Mas você provavelmente não precisa fazer isso. Uma configuração comum é ter /etc/mtab um link simbólico para /proc/mounts . Os dois arquivos contêm basicamente as mesmas informações com a mesma sintaxe; do ponto de vista das aplicações que os lêem, são compatíveis. Como /proc/mounts reflete as informações atuais do kernel, ele está sempre atualizado e os comandos mount e umount não os tocarão.

A desvantagem de /proc/mounts em comparação com /etc/mtab é que ele mostra informações (especialmente opções de montagem) conforme impressas pelo kernel, em vez dos parâmetros exatos passados para o comando mount . Então, um pouco de informação é perdida. Essa informação raramente é útil embora.

    
por 25.01.2017 / 02:56