O oposto do loop mount -o: posso ler um dispositivo de bloco como um arquivo normal?

4

Eu estou tentando fazer o backup de um volume LVM usando Duplicity (nota: não apenas o conteúdo do arquivo do volume, mas o próprio volume real, byte-by-byte).

A melhor maneira que encontrei até agora é dd de todos os dados do volume LVM para um arquivo temporário, incluir esse arquivo no conjunto de backup e excluí-lo após o backup ser feito. Isso parece horrivelmente ineficiente, no entanto: estou debatendo desnecessariamente o disco e duplicando todos os dados.

O que parece ser necessário é uma maneira de fazer essencialmente o oposto de mount -o loop . Em outras palavras, não quero montar um arquivo como um dispositivo de bloco: em vez disso, quero "montar" um dispositivo de bloco como um arquivo binário regular (somente leitura) - um que o Duplicity lerá e fará o backup para mim.

Existe alguma maneira de conseguir isso?

    
por George 29.01.2013 / 16:58

4 respostas

3

Não é que a duplicidade tenha um tratamento especial para dispositivos de bloco, ela os vê como são, "bloqueia arquivos especiais". Por exemplo,

$ stat /dev/dm-0
  File: ‘/dev/dm-0’
  Size: 0           Blocks: 0          IO Block: 4096   block special file
Device: 5h/5d   Inode: 10311       Links: 1     Device type: fc,0
Access: (0660/brw-rw----)  Uid: (    0/    root)   Gid: (    6/    disk)
Access: 2015-01-15 14:19:24.674418470 -0600
Modify: 2015-01-15 14:19:20.917418645 -0600
Change: 2015-01-15 14:19:20.917418645 -0600
 Birth: -

comparado a:

$ stat /etc/passwd
  File: ‘/etc/passwd’
  Size: 2740        Blocks: 8          IO Block: 4096   regular file
Device: fc00h/64512d    Inode: 3802485     Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2015-01-15 17:15:01.166461694 -0600
Modify: 2015-01-12 17:02:41.134820776 -0600
Change: 2015-01-12 17:02:41.201820651 -0600
 Birth: -

A duplicidade fará backup do arquivo especial de bloco da mesma maneira que o tar ou rsync.

A única solução que vem à mente seria escrever um sistema de arquivos de fusíveis para apresentar todos os seus dispositivos de bloco como arquivos regulares. Mas isso provavelmente está fora do escopo desta questão.

    
por 16.01.2015 / 18:37
3

Existe um projeto de software chamado diskfile , um sistema de arquivos FUSE que expõe dispositivos de bloco como readonly regular arquivos. Por exemplo, com uma pasta mountpoint , você pode chamar diskfile /dev/dm-0 mountpoint e, em seguida, mountpoint/dm-0 será um arquivo regular com o mesmo conteúdo de /dev/dm-0 .

    
por 19.01.2015 / 01:56
2

É assim que os dispositivos de bloco já funcionam por padrão. Eles podem ser lidos por qualquer programa - afinal, dd usa apenas as funções padrão open () e read () para criar a imagem.

    
por 29.01.2013 / 17:03
1

Esta é a maneira normal como as coisas já funcionam.

Basta adicionar -r ou -o ro às opções de montagem para torná-lo somente leitura.


Homem monte

 ro      The same as -r; mount the file system read-only 
         (even the super-user may not write it).
    
por 29.01.2013 / 17:07