Unionfs-fuse não mapeia diretório para si

2

Então, tentei unir dois diretórios e falhei. Aqui está uma transcrição do que eu tentei, e com base em tutoriais e informações que eu vi no googling, eu tenho certeza que isso deve funcionar. Eu acho que aufs2 é geralmente preferido e há também mddhfs mas não consigo encontrar nenhuma documentação sobre o último e o primeiro não está nos repositórios (também, eu não quero instalar o build-essentials etc porque eu realmente quero instalá-los na união, não no sistema de arquivos principal).

De qualquer forma, configurei o seguinte cenário de teste

user@host:~$ cd Desktop
user@host:~/Desktop$ mkdir test
user@host:~/Desktop$ cd test
user@host:~/Desktop/test$ mkdir test1
user@host:~/Desktop/test$ mkdir test2
user@host:~/Desktop/test$ mkdir test3
user@host:~/Desktop/test$ echo "this is file A" > test1/fileA.txt
user@host:~/Desktop/test$ echo "this is file B" > test2/fileB.txt

Em seguida, mescle os diretórios test1 e test2 como tal

unionfs-fuse /home/user/Desktop/test/test1=RW:/home/user/Desktop/test/test2=RO /home/user/Desktop/test/test3

E obtenho o resultado esperado

user@host:~/Desktop/test$ unionfs-fuse /home/user/Desktop/test/test1=RW:/home/user/Desktop/test/test2=RO /home/user/Desktop/test/test3
user@host:~/Desktop/test$ ls -l test3
-rw-r--r-- 1 user user 14 2010-06-25 11:34 fileA.txt
-rw-r--r-- 1 user user 14 2010-06-25 11:34 fileB.txt

Eu então desmonto o novo diretório

user@host:~/Desktop/test$ sudo umount test3

E então tente isso

user@host:~/Desktop/test$ unionfs-fuse /home/user/Desktop/test/test1=RW:/home/user/Desktop/test/test2=RO /home/user/Desktop/test/test1
fuse: mountpoint not empty
fuse: if you are sure this is safe, use the 'nonempty' mount option

Que eu definitivamente não estava esperando. Então eu pensei "o que diabos, vamos tentar"

user@host:~/Desktop/test$ unionfs-fuse /home/user/Desktop/test/test1=RW:/home/user/Desktop/test/test2=RO /home/user/Desktop/test/test1 -o nonempty
user@host:~/Desktop/test$ ls -l test1

O primeiro comando é executado, mas o segundo congela ... Alguém se importa em explicar por quê? Eu pensei unionfs permitiu a fusão de dois diretórios em um dos dois como o ponto de montagem. Pelo menos, é o que vários tutoriais do sindicato indicaram. Existe uma maneira de fazer o que eu quero? Algumas outras opções?

    
por cheshirekow 25.06.2010 / 21:24

1 resposta

1

Aqui está um caso de uso que foi testado com sucesso em um sistema (K) Ubuntu (Linux step3 3.13.0-63-genérico # 103-Ubuntu SMP x86_64 x86_64 x86_64 GNU / Linux).

Todos os comandos anotados foram executados com direitos de root. Por favor, reconheça que o seguinte é apenas uma espécie de prova de conceito, ajuste os argumentos aos comandos de acordo com suas necessidades individuais.

Para uma instalação padrão (K) do Ubuntu, certifique-se de que o pacote "unionfs-fuse" esteja instalado - ele pode ser instalado usando a linha de comando "sudo apt-get install unionfs-fuse".

Por exemplo, as seguintes instruções descrevem como sobrepor um diretório existente, não vazio (home do usuário) "consigo mesmo" para que todas as alterações sejam armazenadas como persistentes em um diretório (caso 1.) ou descartado de qualquer maneira (caso 2.).

O "truque" é primeiro "montar bind" o diretório para sobrepor a outro, então use um sistema de arquivos de união para combinar o original imutável com o diretório "changes".

Os arquivos criados ou modificados no diretório "original" estarão disponíveis apenas no diretório "changes". Os arquivos criados no diretório "relocated" ficarão disponíveis no diretório "original", mas não no diretório "changes".

  1. Torne (não vazio) o diretório (por exemplo, / home / user1) unwritable para que todas as alterações e todos os arquivos recém-criados permaneçam persistentes (em / tmp / home_user1_changes)

1.1 Criar diretórios auxiliares

1.1.1 mkdir / tmp / home_user1_changes

1.1.2 mkdir / tmp / home_user1_relocated

1.2 Use a opção mount bind para montar o diretório no diretório "overlay unwritable" (/ tmp / home_user1_relocated)

1.2.1 mount --bind / home / user1 / tmp / home_user1_relocated

1.3 Use o sistema de arquivos unionfs para combinar o conteúdo original realocado com o conteúdo do diretório "changes"

1.3.1 unionfs-fuse -o vaca -o allow_other -o use_ino -o não vazio / tmp / home_user1_changes = RW: / tmp / home_user1_relocated = RO / home / user1

[agora todas as alterações em / home / user1 são salvas em / tmp / home_user1_changes, mas não em "overlaid" / home / user1]

1.4 Reversão

1.4.1 umount / home / user1

1.4.2 umount / tmp / home_user1_relocated

1.4.3 inspecione arquivos opcionalmente em / tmp / home_user1_changes

1.4.4 opcionalmente rm -fR / tmp / home_user1_changes, rmdir / tmp / home_user1_relocated

[/ home / user1 no estado como antes 1., modificações desde então residem em / tmp / home_user1_changes]

  1. Torne (não vazio) dir (por exemplo, / home / user1) unwritable para que todas as alterações e todos os arquivos recém-criados persistam apenas temporariamente (em / tmp / home_user1_changes)

2.1 Crie diretórios auxiliares

2.1.1 mkdir / tmp / home_user1_changes

2.1.2 mkdir / tmp / home_user1_relocated

2.2 Use a opção mount bind para montar o diretório para o diretório "overlay unwritable" (/ tmp / home_user1_relocated)

2.2.1 mount --bind / home / user1 / tmp / home_user1_relocated

2.3 Força o diretório / tmp / home_user1_changes a ser temporário

2.3.1 mount -t tmpfs -o size = 20% nenhum / tmp / home_user1_changes

2.4 Use o sistema de arquivos unionfs para combinar o conteúdo original realocado com o conteúdo do diretório "changes"

2.4.1 unionfs-fuse -o vaca -o allow_other -o use_ino -o não vazio / tmp / home_user1_changes = RW: / tmp / home_user1_relocated = RO / home / user1

[agora todas as alterações em / home / user1 são salvas em / tmp / home_user1_changes, mas não em "overlaid" / home / user1]

2.5 Reversão

2.5.1 umount / home / user1

2.5.2 umount / tmp / home_user1_relocated

2.5.3.1 opcionalmente inspecione arquivos em / tmp / home_user1_changes

2.5.3.2 umount / tmp / home_user1_changes [fará as alterações desaparecerem]

2.5.4 opcionalmente rm -fR / tmp / home_user1_changes, rmdir / tmp / home_user1_relocated

[/ home / user1 está agora no estado anterior a 1., todas as modificações desapareceram]

    
por 05.09.2015 / 18:28