AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / unix / Perguntas / 542295
Accepted
tobiasBora
tobiasBora
Asked: 2019-09-18 09:27:06 +0800 CST2019-09-18 09:27:06 +0800 CST 2019-09-18 09:27:06 +0800 CST

Hardlink que "divide" quando um arquivo é alterado

  • 772

É possível (no ext4 clássico e/ou em qualquer outro sistema de arquivos) criar dois arquivos que apontem para o mesmo conteúdo, de modo que, se um arquivo for modificado, o conteúdo seja duplicado e os dois arquivos se tornem diferentes? Seria muito prático economizar espaço no meu disco rígido.

Contexto: Tenho alguns vídeos pesados ​​que compartilho em um servidor de nuvem próprio que podem ser modificados por muitas pessoas e, portanto, pode ser possível que algumas pessoas modifiquem/removam esses arquivos... Eu realmente gostaria de ter certeza de que tenho um backup desses arquivos e, portanto, preciso manter dois diretórios, o nextcloud normal e um diretório "backup", que (pelo menos) dobra o tamanho necessário para armazená-lo.

Eu estava pensando em criar um repositório git no topo do diretório nextcloud, e isso tornaria o processo de backup muito mais fácil quando novos vídeos são adicionados (apenas git add .), mas gitainda dobra o espaço entre o blob e o diretório de trabalho.

Idealmente, uma solução que possa ser combinada com o git seria incrível (ou seja, que me permita criar um histórico das alterações de vídeo, com commits, checkouts... sem dobrar o espaço em disco.

Além disso, estou curioso para ter solução para vários sistemas de arquivos (especialmente se você tiver truques para sistemas de arquivos que não implementam snapshots). Observe que o instantâneo do LVM não é realmente uma solução, pois não quero fazer backup do meu volume completo, apenas de alguns arquivos/pastas específicos.

Obrigado!

filesystems
  • 3 3 respostas
  • 720 Views

3 respostas

  • Voted
  1. Best Answer
    user1133275
    2019-09-18T09:33:34+08:002019-09-18T09:33:34+08:00

    Sim em sistemas de arquivos Copy On Write (Btrfs, ZFS). git-annex é o mais próximo possível do ext4. Observe que você pode mount --bindusar um volume com suporte de LVM ou um sistema de arquivos Btrfs em uma pasta em outro sistema de arquivos.

    • 6
  2. ilkkachu
    2019-09-19T03:26:07+08:002019-09-19T03:26:07+08:00

    É possível (no ext4 clássico e/ou em qualquer outro sistema de arquivos) criar dois arquivos que apontem para o mesmo conteúdo, de modo que, se um arquivo for modificado, o conteúdo seja duplicado e os dois arquivos se tornem diferentes? Seria muito prático economizar espaço no meu disco rígido.

    Os links físicos fazem isso, desde que qualquer pessoa que edite os arquivos o faça criando um novo arquivo e renomeando-o sobre o original. Isso quebraria o link, já que o novo arquivo está vinculado a apenas um nome e o outro link é substituído pela regravação.

    O problema é que é difícil saber em geral se um programa vai sobrescrever os dados no mesmo inode, ou se vai criar um novo arquivo ao salvar.

    Tornar as "cópias de backup" somente leitura pode ajudar, pois elas não podem ser modificadas, mas os links ainda podem ser removidos e o mesmo nome recriado. Mas isso pode levar a muitos erros quando os programas não puderem gravar nesse inode.

    Então, do meu ponto de vista, a desduplicação em nível de arquivo como essa por meio de links físicos é possível, mas somente se você controlar os programas que gravam nos links.

    • 2
  3. endolith
    2021-01-14T08:12:04+08:002021-01-14T08:12:04+08:00

    Eu acho que as outras respostas não dizem isso explicitamente, então sim, é possível em btrfs usando reflinks em vez de hardlinks.

    • Hardlinks são dois nomes separados para o mesmo arquivo, que ocupa o mesmo pedaço de disco.
    • Reflinks são dois arquivos diferentes, que apontam para o mesmo pedaço de disco.

    Quando um hardlink é modificado, o outro nome de arquivo também mostra a modificação, pois ambos fazem referência ao mesmo arquivo.

    Quando um reflink é modificado, o outro arquivo não é modificado. As edições são gravadas em um novo pedaço de disco, enquanto as partes inalteradas dos dois arquivos ainda se referem aos mesmos pedaços de disco, economizando espaço.

    Ao contrário de um link físico em que duas entradas de diretório se referem à mesma entrada de inode, com reflinks existem duas entradas de inode e são os blocos de dados que são compartilhados.

    https://hackernoon.com/reflinks-vs-symlinks-vs-hard-links-and-how-they-can-help-machine-learning-projects-wz2ej3xa7

    insira a descrição da imagem aqui

    • 2

relate perguntas

  • Qual sistema de arquivos devo usar em um cartão SD em um NAS?

  • Como saber antecipadamente se um .zip tem um diretório pai dentro

  • Disco alocado dinamicamente do Virtualbox *.vdi continua crescendo

  • du/df e ls relatando diferentes usos de disco

  • Como os desenvolvedores do kernel Linux lidam com seu trabalho com milhões de linhas de código? É um método? [fechado]

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Possível firmware ausente /lib/firmware/i915/* para o módulo i915

    • 3 respostas
  • Marko Smith

    Falha ao buscar o repositório de backports jessie

    • 4 respostas
  • Marko Smith

    Como exportar uma chave privada GPG e uma chave pública para um arquivo

    • 4 respostas
  • Marko Smith

    Como podemos executar um comando armazenado em uma variável?

    • 5 respostas
  • Marko Smith

    Como configurar o systemd-resolved e o systemd-networkd para usar o servidor DNS local para resolver domínios locais e o servidor DNS remoto para domínios remotos?

    • 3 respostas
  • Marko Smith

    apt-get update error no Kali Linux após a atualização do dist [duplicado]

    • 2 respostas
  • Marko Smith

    Como ver as últimas linhas x do log de serviço systemctl

    • 5 respostas
  • Marko Smith

    Nano - pule para o final do arquivo

    • 8 respostas
  • Marko Smith

    erro grub: você precisa carregar o kernel primeiro

    • 4 respostas
  • Marko Smith

    Como baixar o pacote não instalá-lo com o comando apt-get?

    • 7 respostas
  • Martin Hope
    user12345 Falha ao buscar o repositório de backports jessie 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl Por que a maioria dos exemplos do systemd contém WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky Como exportar uma chave privada GPG e uma chave pública para um arquivo 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll status systemctl mostra: "Estado: degradado" 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim Como podemos executar um comando armazenado em uma variável? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S Por que /dev/null é um arquivo? Por que sua função não é implementada como um programa simples? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 Como ver as últimas linhas x do log de serviço systemctl 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - pule para o final do arquivo 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla Por que verdadeiro e falso são tão grandes? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis Substitua a string em um arquivo de texto enorme (70 GB), uma linha 2017-12-30 06:58:33 +0800 CST

Hot tag

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve