Igualmente, divida o conteúdo de um diretório entre discos - arredondado para o diretório de nível superior mais próximo

0

Eu tenho um diretório de músicas e um MP3 player com dois slots de cartão SD. O conteúdo do diretório é grande demais para um cartão, então gostaria de dividi-lo em dois.

Eu gosto de ter coisas em ordem alfabética. Se eu preenchesse o SD1 e deixasse o SD2 parcialmente vazio, sempre que eu adicionasse novas músicas, eu teria que quebrar a ordem alfabética colocando novas coisas no SD2, ou reorganizar tudo ao redor.

A outra coisa é que meus diretórios são agrupados por Artist, então se eu conseguisse um novo álbum de um artista no SD1, não caberia.

Em suma, quero que as duas cartas sejam preenchidas igualmente de forma igual.

Agora mesmo, minha solução está correta:

  1. Listar os diretórios e enviar a lista para um arquivo
  2. Abra o arquivo e encontre o ponto médio (tenho certeza de que há uma maneira inteligente de fazer isso, mas é rápido de fazer manualmente no vim)
  3. Corte a metade inferior da lista e cole-a em um segundo arquivo
  4. Execute rsync --files-from= usando um arquivo no SD1 e o próximo no SD2. Trabalho feito!

Isso me fez pensar, existe uma maneira mais precisa de fazer isso para que os dois cartões SD sejam preenchidos de maneira mais uniforme? Como você faria isso?

Eu acho que teria que talvez

  1. Execute du no diretório de músicas para encontrar o totalSize .
  2. Em seguida, percorra todos os dir do artista para obter seus tamanhos e manter um total em execução.
  3. Quando esse total ultrapassar o totalSize * 0.5 , envie uma lista de todos os diretórios que você acabou de contar para obter a primeira metade e coloque o restante em um segundo arquivo para obter a outra metade?
  4. Faça o mesmo rsync do arquivo

Alguém tem alguma ideia melhor?

    
por benoliver999 18.04.2018 / 18:04

1 resposta

0

Assim, ironicamente, isso seria muito fácil de fazer se esses dois cartões SD forem dois computadores separados na mesma rede, pois há todos os tipos de soluções de armazenamento em cluster que fazem exatamente o que você está perguntando.

Dado que essa não é uma opção muito realista (usar um sistema de arquivos em cluster é um exagero para isso), sua melhor aposta é provavelmente um programa chamado mhddfs. A página inicial oficial está em russo, mas há uma postagem decente aqui sobre isso, e é empacotado um número de diferentes distribuições. Em essência, ele faz RAID no nível do arquivo. A grande vantagem aqui é que, quando você instala o mhddfs, você pode literalmente chamar rsync uma vez. Cada arquivo terminará inteiramente em exatamente um sistema de arquivos e gerenciará de maneira inteligente a distribuição nos sistemas de arquivos. Além disso, ele não armazena nenhum estado nos dispositivos subjacentes (ele apenas observa a distribuição de dados nos dispositivos para descobrir onde colocar os arquivos recém-criados e verifica adequadamente todos os arquivos existentes), para que não desperdice nenhum espaço também.

    
por 18.04.2018 / 21:45