Para montar a sobreposição é dado lowerdir
, upperdir
e workdir
como opções em mount(8) ou dados em mount(2) , qual lógica é aplicada para escapar de vírgulas? Eu tentei vírgulas duplas e até citando sem sucesso.
Há duas soluções alternativas que descobri que não são exatamente o que eu quero:
Caminho relativo: desde que o último componente não tenha vírgulas o seguinte funciona:
mkdir /tmp/a,b /tmp/a,b/{upper,lower,work,merged} cd /tmp/a,b sudo mount \ -t overlay \ -o 'lowerdir=./lower,upperdir=./upper,workdir=./work' \ overlay \ '/tmp/a,b/merged'
Mas reforço que não funciona se o último componente contiver vírgulas.
Mover o caminho após a montagem: acredito que o kernel mantenha o
inode
controle, pois os valores da opção/proc/self/mountinfo
não mudam:mkdir /tmp/a\ b /tmp/a\ b/{upper,lower,work,merged} sudo mount \ -t overlay \ -o 'lowerdir=/tmp/a b/lower,upperdir=/tmp/a b/upper,workdir=/tmp/a b/work' \ overlay \ '/tmp/a b/merged' mv '/tmp/a b' '/tmp/a,b' fgrep merged /proc/self/mountinfo 314 86 0:56 / /tmp/a,b/merged rw,relatime shared:217 - overlay overlay rw,lowerdir=/tmp/a\040b/lower,upperdir=/tmp/a\040b/upper,workdir=/tmp/a\040b/work
Nota : Como o kernel escapa de espaço, tabulação, novas linhas e caracteres de barra invertida com três dígitos decimais, também tentei escapar de vírgula \044
sem sucesso, parece que ele quer escapar de barra invertida novamente.
A barra invertida escapará dela. Como o comando mount o envia como está (como pode ser visto com strace ), este deve ser o kernel que usa uma barra invertida para escapar dele.
Eu acho que os escapes do kernel em octal vistos
/proc/mounts
são para ajudar os analisadores: a,
sempre será um separador. Em seguida, cabe ao analisador finalmente resolver como\134\054
parte de um caminho ou nome de arquivo.\,
,
Esta é uma parte do tratamento overlayfs de opções no kernel, em
linux/fs/overlayfs/super.c
:onde a barra invertida pode ser vista para escapar do caractere próximo a ela (evitando assim o tratamento específico da vírgula que teria acontecido abaixo).