Usando um sistema de arquivos diferenciado, também conhecido como sobreposição, também conhecido como união, com capacidade de confirmação

3

Eu trabalho em dois PCs e sincronizo todos os meus arquivos do meu PC primário com uma memória flash USB. No meu segundo PC, eu montei a memória flash USB no mesmo caminho para trabalhar nos meus arquivos como estava no meu PC principal.

Agora, por causa do desempenho e da vida útil da memória flash, preciso usar qualquer tipo de diferenciação, também conhecida como união, sistema de arquivos (como unionfs ou aufs) para permitir que eu use o disco flash USB como somente leitura e gravar alterações em um diretório temporário e, no final, permite que eu grave as alterações novamente no flash USB de uma só vez.

Qualquer ajuda? Alguma esperança?

Atualização:

Obrigado por todas as suas respostas e comentários. Estou interessado em Linux e minha pergunta é: Algum dos sistemas de arquivos acima permite cometer as gravações para os sistemas de arquivos inferiores, quando necessário? Se sim, como?

    
por mmonem 13.09.2010 / 07:46

5 respostas

5

Existe um novo alvo de dm chamado "snapshot-merge".

Se você formatar sua memória flash USB como um volume físico LVM e, em seguida, localizar o sistema de arquivos desejado sobre um volume lógico, poderá

  1. Ative um grupo de volumes contendo sua memória flash USB e outro volume físico LVM em um disco local.
  2. Crie um instantâneo do volume lógico no disco local.
  3. Monte o instantâneo, faça o que quiser com ele e, em seguida, desmonte-o.
  4. Mesclar o instantâneo de volta à origem.

Isso deve ficar próximo ao que você pediu, embora exija um dispositivo de bloco de rascunho em vez de um diretório temporário.

Substitua as partes entre {chaves} conforme apropriado.

# Initial setup of the USB drive.
pvcreate /dev/{USB}
vgcreate {removable} /dev/{USB}
lvcreate -n {base} -l 100%PVS {removable} /dev/{USB}
mkfs -t {fs} {...} /dev/mapper/{removable}-{base}
# Initial setup of the scratch device.
pvcreate /dev/{SCRATCH}
# Mounting the device.
vgextend {removable} /dev/{SCRATCH}
lvcreate -s -n {snap} -l 100%ORIGIN /dev/mapper/{removable}-{base} /dev/{SCRATCH}
mount -t {fs} -o {...} /dev/mapper/{removable}-{snap} {MOUNTPOINT}
# Unmounting the device.
umount {MOUNTPOINT}
lvconvert --merge /dev/mapper/{removable}-{snap}
vgreduce {removable} /dev/{SCRATCH}
vgchange -a n {removable}

Não testado, mas todos os comandos do LVM têm manpages, então você deve ser capaz de descobrir as coisas daqui. Você pode precisar de uma invocação de vgscan em algum lugar, se o grupo de volumes não for detectado automaticamente quando você conectar a unidade USB.

    
por 16.09.2010 / 00:08
2

Isto parece um caso de uso para dm-userspace + cowd : em essência, você configuraria um destino DM ( dispositivo de bloco) que consiste em um arquivo COW (copy-on-write) e o dispositivo de bloco correspondente ao seu pendrive, e o utiliza para hospedar um sistema de arquivos. Todas as atualizações iriam para o arquivo COW; as leituras que não estiverem no arquivo COW serão exibidas no pen drive USB; depois de desmontar o sistema de arquivos, mescle modificações do arquivo COW no pendrive.

Infelizmente, ele é específico do Linux e o desenvolvimento parece ter parado em 2007.

Se o que você quer fazer é sincronizar arquivos em dois (ou mais) PCs, sugiro que você colocar sua casa (ou pastas relevantes) sob um sistema de controle de versão? O ciclo de trabalho normal se torna assim:

  1. conecte o stick USB;
  2. atualize o repositório de diretório inicial, extraindo as alterações mais recentes do pendrive;
  3. faça suas coisas;
  4. confirme as alterações no sistema de versão e atualize o repositório no pendrive.

É apenas uma gravação no dispositivo USB. (Embora eu concorde com o que os outros disseram, que quando o seu stick USB se desgasta, você provavelmente terá comprado outro - maior - um).

    
por 14.09.2010 / 17:39
1

Eu recomendo que você use ferramentas de sincronização de arquivos. Solução de nível de sistema de arquivos para o seu problema pode não ser viável. Confira uníssono e conduto . Pelo que entendi você já tem uma cópia dos arquivos no seu computador principal. Aqui está o fluxo de trabalho que eu uso:

  1. Trabalhe e altere os arquivos no PC_1. Depois de terminar, sincronize-os com o seu pendrive USB.

  2. Conecte o pendrive ao PC_2 e sincronize o conteúdo com o PC_2.

  3. Trabalhe e altere os arquivos no PC_2. Depois de terminar, sincronize-os com o seu pendrive USB.

A sincronização será muito rápida, porque somente os arquivos alterados serão reescritos. Além disso, você pode escrever a montagem e desmontar gatilhos que farão a sincronização automaticamente.

Para uma solução de sistema de arquivos, você pode procurar algum FS com o atributo Copiar na gravação, por exemplo, btrfs. Tirar instantâneos e sincronizá-los pode ser mais rápido e mais eficaz. Mas ainda não consegui encontrar nenhuma implementação. Também trabalhar no nível do sistema de arquivos não facilitará seu caminho na resolução de conflitos.

    
por 14.09.2010 / 17:47
1

Talvez você possa usar o recurso de propagação do btrfs (indicado em < href="http://en.wikipedia.org/wiki/Btrfs#cite_ref-16"> link ) - semear uma leitura-escrita fs com uma base somente leitura.

Em seguida, você terá o problema de sincronizá-lo com o armazenamento removível.

Eu não sei de um recurso de nível btrfs semelhante a lvconvert --merge ; então você poderia usar algumas ferramentas de nível superior (como rsync ) para mesclar suas alterações de volta, mas isso não seria tão eficiente computacionalmente como um suporte de nível fs para isso.

Ou há também o comando btrfs subvolume find-new para ajudar o copiando ferramentas para encontrar coisas que mudaram e precisam ser enviadas de volta.

(não testado na prática.)

    
por 17.08.2011 / 16:58
0

Suponho que isso seja para um SO com sabor Unix, mas caso você esteja interessado em uma solução baseada no Windows, usei o Microsoft Mesh, que é uma ferramenta gratuita para sincronizar uma variedade de arquivos e pastas uma série de computadores. Outro recurso interessante é a capacidade de acessar essa "nuvem" (seu termo, não meu) por meio de uma interface da web. Ele é útil quando você está em um computador remoto que não está sincronizado, mas gostaria de acessar / baixar determinados arquivos.

    
por 14.09.2010 / 03:32