Question Le contraire de mount -o loop: puis-je lire un périphérique de bloc en tant que fichier normal?


J'essaie de sauvegarder un volume LVM en utilisant Duplicity (note: pas seulement le contenu du fichier, mais le volume proprement dit, octet par octet).

La meilleure façon que j'ai trouvée jusqu'ici est de dd toutes les données du volume LVM dans un fichier temporaire, incluez ce fichier dans le jeu de sauvegarde et supprimez-le une fois la sauvegarde effectuée. Cela semble horriblement inefficace: je défonce inutilement le disque et duplique toutes les données.

Ce qui semble être nécessaire, c’est un moyen de faire essentiellement le contraire de mount -o loop. En d'autres termes, je ne veux pas monter un fichier en tant que périphérique en mode bloc: je veux plutôt "monter" un périphérique en mode bloc en tant que fichier binaire normal (en lecture seule), que Duplicity lira et sauvegardera ensuite. pour moi.

Y'a-t-il une quelconque façon de réussir cela?


4
2018-01-29 15:58


origine


Bien sûr, vous pouvez, rappelez-vous que dans Unix "tout est un fichier" (presque). Je ne connais pas Duplicity, mais juste en incluant les /dev/mapper/... fichier pourrait être suffisant. Mais cela va copier tout, y compris les espaces jamais utilisés et les restes de fichiers supprimés. Soutenir cela n'a de sens que pour des fins médico-légales. - vonbrand
Salut @vonbrand - oui, c'est ce que j'espérais aussi. Duplicity a donc peut-être un traitement spécial intégré pour les périphériques de bloc qui vident ce cas d'utilisation. - George
J'ai ce problème avec un autre logiciel. J'ai ajouté une prime dans l'espoir que quelqu'un y répondra au lieu de simplement dire que cela fonctionne déjà. Le logiciel qui m'intéresse n'a même pas la possibilité de le lire de toute façon; Je ne pense pas que Duplicity le fasse non plus, mais je ne suis pas sûr. - Daniel H


Réponses:


Ce n'est pas que la duplicité ait un traitement spécial pour les périphériques de bloc, elle les voit pour ce qu'ils sont, "bloquer les fichiers spéciaux". Par exemple,

$ 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: -

par rapport à:

$ 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: -

Duplicity sauvegardera le fichier spécial du bloc de la même manière que le font tar ou rsync.

La seule solution qui vient à l'esprit serait d'écrire un système de fichiers fusionné pour présenter tous vos périphériques de blocs en tant que fichiers normaux. Mais c'est probablement hors de la portée de cette question.


3
2018-01-16 17:37



Oui, si cela n'a généré aucune réponse, c'était mon plan. J'espérais que ce n'était pas nécessaire ou que quelqu'un l'avait déjà fait. - Daniel H
Il les traite spécialement en ce sens qu'il ne fait pas que faire open()et read() les appelle, car il vérifie spécifiquement quel type de fichier il est. Un système de sauvegarde naïf ne ferait que read() chaque fichier sans vérification. - Daniel H
Bien, mais vous ne voudriez vraiment pas que votre logiciel de sauvegarde ouvre naïvement tous les liens socket, hard link ou sym non plus. Y a-t-il quelque chose que vous gagnez en ne faisant pas que monter le périphérique en bloc et en travaillant de cette manière? - Ben Grimm
Le demandeur original voulait sauvegarder le volume lui-même; Je ne sais pas pourquoi. Je souhaite sauvegarder le périphérique lui-même car il ne se monte pas correctement et je ne souhaite pas perdre de données si la récupération se déroule mal. Je prévois également d'utiliser la fonctionnalité d'instantané du gestionnaire de périphériques pendant la récupération, mais j'aime toujours une sauvegarde de l'état actuel. - Daniel H
Dans ce cas, je voudrais juste utiliser dd pour tenter de le sauvegarder ou de ses partitions. - Ben Grimm


Il y a un projet de logiciel appelé fichier de disque, un système de fichiers FUSE qui expose les périphériques en tant que fichiers en lecture seule. Par exemple, avec un dossier mountpoint, vous pouvez appeler diskfile /dev/dm-0 mountpoint, et alors mountpoint/dm-0 sera un fichier régulier avec le même contenu que /dev/dm-0.


3
2018-01-19 00:56



Parfait! Merci pour le pointeur. - Jim Paris


C'est comme ça que les périphériques de blocs fonctionnent déjà par défaut. Ils peuvent être lus par n'importe quel programme - après tout, dd utilise uniquement les fonctions standard open () et read () pour créer l'image.


2
2018-01-29 16:03



Hmm - ça ne marche vraiment pas avec Duplicity. Le problème est peut-être que Duplicity a un traitement spécial intégré pour les périphériques de bloc. - George


C'est la façon normale de faire les choses.

Ajoutez simplement -r ou -o ro aux options de montage pour le rendre en lecture seule.


Monture homme

 ro La même chose que -r; monter le système de fichiers en lecture seule
         (même le super-utilisateur ne peut pas l'écrire).

1
2018-01-29 16:07