devise pour comparer des files sur un disque avec des informations de registre sur un autre?

Il y a longtime que je me suis retrouvé très loin sous le capot d'Unix, donc je n'utilise probablement pas la terminologie appropriée quand je parle de «registre», mais voici la situation.

J'ai un disque qui est en train de mourir. Beaucoup d'erreurs d'E / S. Je suis donc en train de copyr tous les files de ce disque vers un autre.

Mais il y a définitivement des files qui ne le font pas. Y a-t-il un moyen de regarder le «registre» des files sur le mauvais disque et de le comparer avec les files qui existent sur le nouveau disque et de déterminer lesquels sont manquants?

Je sais que je pourrais essayer de faire un diff entre les deux filesystems, mais je suis préoccupé que la lecture de chaque file sur le mauvais disque va juste à erreur – alors que j'espère que la list des files qui existent sur le mauvais disque est encore assis sur des secteurs non endommagés.

Ou est-ce qu'Unix (en fait c'est tout OSX, pas Unix pur) ne contient même pas un file de registre global?

Si le disque est endommagé, il peut être plus intelligent de copyr le disque entier (ou chaque partition seule) dans des files. Lorsque les disques commencent à échouer, ils sont généralement complètement disparus peu de time après. Ensuite, vous pouvez monter en boucle les copys, et aller à l'aventure avec vos outils médico-légaux préférés pour essayer de sauver tout ce que vous pouvez.

Sous UNIX conforme à FHS , la configuration à l'échelle du système est généralement stockée dans /etc (certaines pièces peuvent se find dans /usr/local/etc ou /opt/app/etc ) et la configuration de l'user est stockée dans des directorys personnels directorys commençant par un point ( .vim/ , .libreoffice , …). Il n'y a pas de database de parameters unique, si par simple vous comprenez un seul file . Certains gros logiciels peuvent stocker tout ou partie de leur configuration dans un seul file, mais pas le système entier. Vous devez donc copyr les files ci-dessus pour restaurer les parameters, c'est pourquoi il est conseillé de les sauvegarder de time en time avec des données "régulières" (ou même de les garder sous un système de contrôle de version).

Cela dit, une fois que vous avez enregistré les éléments les plus importants, je suggère fortement d'utiliser GNU ddrescue pour get une copy aussi bonne que possible du (des) système (s) de files et travailler sur ces copys. Puisque ddrescue peut fonctionner à des niveaux inférieurs au système de files, il est souvent capable de récupérer plus de données (et aussi plus rapidement) que de simplement copyr.

Il n'y a pas de «registre» contenant une list de noms de files sur le système (ce n'est pas une chose courante). La list des noms de files dans chaque directory est stockée dans ce directory. Vous pouvez générer une list de tous les noms de files sur le système avec la command find .

 find / -xdev | sort >/tmp/file-list 

Cela crée une list sortingée des noms de file dans /tmp/file-list . L'option -xdev indique à find ne pas descendre dans d'autres filesystems montés tels que les filesystems spéciaux du operating system ou les lecteurs amovibles.

Il serait probablement plus utile de savoir quels files sont identiques. Je recommand de copyr vos files avec rsync et d'save la sortie d'erreur de rsync dans un file, puis d'parsingr ce file pour voir ce qui est passé et ce qui ne l'a pas fait.

Voici ce que vous cherchez:

Au delà de toute comparaison

Je voudrais utiliser rsync. Il compare intelligemment les files pendant le process de copy et vous donne une list de ceux qui n'ont pas pu être copiés par la suite.

rsync -av / path / vers / source / path / vers / cible