|
このページは大阪弁化フィルタによって翻訳生成されたんですわ。 |
Mon but est naturellement d'en faire une r馭駻ence utile la r馗up駻ation de fichiers sous Linux exige certaines connaissances techniques, ainsi que de la pers騅駻ance, au moins dans l'騁at actuel des choses.
Il vous sera impossible de r馗up駻er des fichiers supprim駸 depuis un syst鑪e de fichiers ext2 sans au moins un acc鑚 sachant que je ne connais rien du format de fichier JFIF j'ai vraiment fait ce que j'ai pu).
Je discuterai plus bas du taux de r馗up駻ation que vous pouvez esp駻er pour les fichiers supprim駸.
Les r騅isions de ce document (en version anglaise, NdT) d駘ivr馥s au public, ainsi que leurs dates de publication, sont les suivantes :
Cette r騅ision est plut? une augmentation. Elle inclut principalement des modifications propos馥s devrait 黎re disponible au format texte aupr鑚 du site du Linux Documentation Project (et ses miroirs). La derni鑽e version est 馮alement disponible sur ma page sous divers formats :
En l'absence de sauvegardes, que faire (en fait, m麥e en pr駸ence de sauvegardes : dans le cas de donn馥s importantes, la ceinture et les bretelles, ce n'est pas du luxe) ?
Essayez de donner aux fichiers importants les droits 440 (ou moins) :
ne pas vous laisser les droits en 馗riture provoque une demande de
confirmation explicite de rm avant la destruction
(mais si je veux supprimer r馗ursivement un r駱ertoire
avec rm -r, j'interromprai le programme d鑚 la premi鑽e ou
deuxi鑪e demande de confirmation pour relancer la commande avec
rm -rf).
Un bon truc, pour les fichiers importants, est de cr馥r un lien en tant que root quelque chose comme :
# mkdir /.backup
# ln /etc/passwd /.backup
Il est alors assez difficile de supprimer compl鑼ement le contenu du fichier : si vous dites
# rm /etc/passwd
alors
# ln /.backup/passwd /etc
permettra de le r馗up駻er. Naturellement, cela ne couvre pas le cas
Red Hat le font par d馭aut
pour tous les utilisateurs, y compris root. En ce qui me concerne,
je ne supporte pas les logiciels incapables de tourner tous seuls,
je ne le fais donc pas. Par ailleurs, un jour ou l'autre,
un paquetage qui manipulerait une destruction ォ recyclable サ
en fournissant une commande qui ne s'appellerait pas rm.
Pour plus de d騁ails, voir Peek et al (1993)
(voir la section
Bibliographie et remerciements).
quand quelqu'un veut 馗rire sur le disque. Donc, quand le syst鑪e
d'exploitation re輟it l'ordre de supprimer un fichier, il suppose
libres les blocs utilis駸 par ce fichier au moment d'allouer
de nouveau de la place pour un nouveau fichier
(c'est un exemple typique d'un principe g駭駻al d'Unix :
le noyau et les outils associ駸 supposent que les utilisateurs
ne sont pas des idiots). En g駭駻al, plus votre machine est utilis馥,
moins vous avez de chances de r馗up駻er vos fichiers avec succ鑚.
La proc馘ure consiste principalement en la recherche de donn馥s se trouvent les donn馥s dans la partition et de les 馗rire dans un nouveau fichier.
Vous devez suivre plusieurs 騁apes avant de commencer votre tentative de r馗up駻ation ; voir les sections D駑onter le syst鑪e de fichiers, Obtenir des d騁ails sur les inodes, R馗up駻er des blocs de donn馥s et Modifier les inodes directement.
fichiers supprim駸 soient dans la partition/usr, tapez :
# umount /usr
Vous pouvez cependant avoir besoin de garder certaines donn馥s
disponibles dans /usr. Dans ce cas, remontez-le
en mode lecture seule :
# mount -o ro,remount /usr
Si les fichiers supprim駸 騁aient dans la partition racine, vous devrez
ajouter une option -n, afin d'emp鹹her que l'op駻ation
de montage ne d馗lenche une 馗riture dans /etc/mtab :
# mount -n -o ro,remount /
Ind駱endamment de tout cela, il est possible qu'un autre processus
Si vous sentez que vous devez le faire de cette mani鑽e, je vous conseille de copier les donn馥s de la partition en mode caract鑽e dans une autre partition, puis monter le tout en utilisant le p駻iph駻ique boucle (loopback device) :
# cp /dev/hda5 /root/working
# mount -t ext2 -o loop /root/working /mnt
(Notez que les anciennes versions de mount peuvent avoir des probl鑪es
aucun probl鑪e : cr馥z simplement un nouveau r駱ertoire dans l'une
d'entre elles.
Si vous n'avez qu'une partition racine dans laquelle vous fourrez tout, 軋 risque d'黎re un poil plus d駘icat. Peut-黎re avez-vous une partition MS-DOS ou Windows que vous pourriez utiliser ? Ou vous avez le gestionnaire ramdisk dans votre noyau, peut-黎re en module ? Pour utiliser le ramdisk (en supposant que votre noyau soit plus r馗ent que 1.3.48), tapez les commandes suivantes :
# dd if=/dev/zero of=/dev/ram0 bs=1k count=2048
# mke2fs -v -m 0 /dev/ram0 2048
# mount -t ext2 /dev/ram0 /mnt
Cela a pour effet de cr馥r un volume ramdisk de 2 Mo,
et de le monter en /mnt.
Un petit mot d'avertissement : si vous utilisez kerneld (ou son
rempla軋nt kmod avec les noyaux 2.2.x et les derniers 2.1.x) pour
charger et d馗harger automatiquement les modules du noyau,
Si vous avez un lecteur Zip, Jaz, ou LS-120, ou quelque chose d'駲uivalent, il s'agit probablement d'une bonne place pour une partition de secours. Sinon, il faudra faire avec les disquettes.
Une autre chose dont vous devriez avoir besoin est un programme capable de lire les donn馥s n馗essaires en plein milieu ma page, ou sur Metalab (et ses miroirs). Si vous souhaitez utiliser cette m騁hode, la suite
Si vous avez besoin de fsgrab mais n'en voulez pas, il est
fort simple de traduire une ligne de commande avec fsgrab
en une avec dd. Si on a
fsgrab -c count -s skip device
alors la commande dd correpondante (et g駭駻alement beaucoup plus
lente) est
dd bs=1k if=device count=count skip=skip
garantie, consultez la section No Warranty dans le fichier
COPYING inclus dans la distribution (li s'agit de la GPL, la licence
publique g駭駻ale GNU).
# debugfs /dev/hda5
Si vous souhaitez modifier les inodes directement, ajoutez une option
$PAGER). Maintenant vous aurez envie d'en sauver une copie
autre part. Si vous avez less, vous pouvez taper -o suivi
du nom du fichier qui devra contenir le r駸ultat. Sinon, vous devrez
vous arranger pour envoyer la sortie ailleurs. Essayez ceci :
debugfs: quit
# echo lsdel | debugfs /dev/hda5 > lsdel.out
Maintenant, d'apr鑚 la date et l'heure de la suppression, la taille, bien garde en allant p鹹her dans la liste.
Je vous sugg鑽e, autant que possible, d'imprimer la liste des inodes que vous voulez r馗up駻er. Cela vous facilitera nettement la vie.
debugfs: stat <148003>
Inode: 148003 Type: regular Mode: 0644 Flags: 0x0 Version: 1
User: 503 Group: 100 Size: 6065
File ACL: 0 Directory ACL: 0
Links: 0 Blockcount: 12
Fragment: Address: 0 Number: 0 Size: 0
ctime: 0x31a9a574 -- Mon May 27 13:52:04 1996
atime: 0x31a21dd1 -- Tue May 21 20:47:29 1996
mtime: 0x313bf4d7 -- Tue Mar 5 08:01:27 1996
dtime: 0x31a9a574 -- Mon May 27 13:52:04 1996
BLOCKS:
594810 594811 594814 594815 594816 594817
TOTAL: 6
et stats contient la sortie de toutes les commandes stat.
10. R馗up駻er les blocs de donn馥s
Cette partie est soit tr鑚 facile, soit nettement moins, selon que
debugfs: stat <148003>
Inode: 148003 Type: regular Mode: 0644 Flags: 0x0 Version: 1
User: 503 Group: 100 Size: 6065
File ACL: 0 Directory ACL: 0
Links: 0 Blockcount: 12
Fragment: Address: 0 Number: 0 Size: 0
ctime: 0x31a9a574 -- Mon May 27 13:52:04 1996
atime: 0x31a21dd1 -- Tue May 21 20:47:29 1996
mtime: 0x313bf4d7 -- Tue Mar 5 08:01:27 1996
dtime: 0x31a9a574 -- Mon May 27 13:52:04 1996
BLOCKS:
594810 594811 594814 594815 594816 594817
TOTAL: 6
debugfs: dump <148003> /mnt/recovered.000
Bien s?, on peut faire 軋 aussi avec fsgrab ; je le montre ici
en guise d'exemple d'utilisation :
# fsgrab -c 2 -s 594810 /dev/hda5 > /mnt/recovered.000
# fsgrab -c 4 -s 594814 /dev/hda5 >> /mnt/recovered.000
Que ce soit avec debugfs ou avec fsgrab, il y aura un peu
de 12 blocs de donn馥s. Ici, il vaut mieux en savoir un peu
sur la mani鑽e dont sont structur駸 les syst鑪es de fichiers Unix.
Les donn馥s du fichier sont stock馥s dans des unit駸 appel馥s ォ blocs サ.
Ces blocs peuvent 黎re num駻ot駸 s駲uentiellement. Un fichier a
Bien entendu, m麥e si ces blocs sont suppos駸 corrects, rien ne garantit que les donn馥s qu'ils contiennent sont intactes. pouvant 黎re plac駸 dans chaque bloc indirect est taille_du_bloc/4. Donc, chaque fois que le nombre 256 appara? dans la dicussion qui pr馗鐡e, remplacez-le par taille_du_bloc/4. Les limitations ォ nombre de blocs requis サ devront 馮alement 黎re modifi馥s.
Examinons un exemple de r馗up駻ation de fichier plus long.
debugfs: stat <1387>
Inode: 148004 Type: regular Mode: 0644 Flags: 0x0 Version: 1
User: 503 Group: 100 Size: 1851347
File ACL: 0 Directory ACL: 0
Links: 0 Blockcount: 3616
Fragment: Address: 0 Number: 0 Size: 0
ctime: 0x31a9a574 -- Mon May 27 13:52:04 1996
atime: 0x31a21dd1 -- Tue May 21 20:47:29 1996
mtime: 0x313bf4d7 -- Tue Mar 5 08:01:27 1996
dtime: 0x31a9a574 -- Mon May 27 13:52:04 1996
BLOCKS:
l'inode (qui sont tous des blocs de donn馥s) sont contigus.
Nous pouvons donc commencer par r馗up駻er ces blocs :
# fsgrab -c 12 -s 8314 /dev/hda5 > /mnt/recovered.001
# fsgrab -c 256 -s 8842 /dev/hda5 >> /mnt/recovered.001
# fsgrab -c 256 -s 9099 /dev/hda5 >> /mnt/recovered.001
# fsgrab -c 256 -s 9356 /dev/hda5 >> /mnt/recovered.001
# fsgrab -c 256 -s 9613 /dev/hda5 >> /mnt/recovered.001
mais ces blocs occupaient malheureusement 512 octets (un reliquat
d'Unix), ce que nous voulons r馥llement est alors 3616/2 = 1808
blocs de 1024 octets. Cela signifie que nous avons seulement besoin
de quatre blocs de plus. Le dernier bloc de donn馥s 馗rit portait
le num駻o 10125. De la m麥e fa輟n que depuis le d饕ut, on saute
un bloc indirect (num駻o 10126) ; on peut alors 馗rire ces
quatre derniers blocs.
# fsgrab -c 4 -s 10127 /dev/hda5 >> /mnt/recovered.001
User ID [503]
Group ID [100]
Size [6065]
Creation time [833201524]
Modification time [832708049]
Access time [826012887]
Deletion time [833201524] 0
Link count [0] 1
Block count [12]
File flags [0x0]
Reserved1 [0]
File acl [0]
Directory acl [0]
Fragment address [0]
Fragment number [0]
Fragment size [0]
Direct Block #0 [594810]
Direct Block #1 [594811]
Direct Block #2 [594814]
Direct Block #3 [594815]
Direct Block #4 [594816]
Direct Block #5 [594817]
Direct Block #6 [0]
Direct Block #7 [0]
Direct Block #8 [0]
Direct Block #9 [0]
Direct Block #10 [0]
Direct Block #11 [0]
Indirect Block [0]
Double Indirect Block [0]
Triple Indirect Block [0]
faire face. Si vous vouliez du velours, il fallait utiliser un
ォ syst鑪e d'exploitation サ graphique avec une jolie ォ corbeille サ.
タ propos, le texte de sortie de mi indique un champ
ォ cr饌tion サ (creation time). Il est totalement mensonger
debugfs pour cr馥r un lien vers l'inode dans le syst鑪e de
fichiers. Utilisez la commande link de debugfs quand
vous avez fini de modifier l'inode.
debugfs: link <148003> toto.txt
lignes sont 馗rites (2 f騅rier 1999), les noyaux stables actuels (la s駻ie
2.0.x) effacent les blocs indirects, ce n'est plus le cas des noyaux de
d騅eloppement 2.1.x, ni des noyaux stables 2.2.x, dont le 2.2.1 qui vient
d'utiliser la commande dump de debugfs sur des fichiers
longs, et d'utiliser d'autres outils de r馗up駻ation.
13. Existe-t-il des outils qui automatisent le processus ?
devrait s'av駻er quand m麥e utile d鑚 maintenant ; vous pouvez le t駘馗harger
depuis
ma page, et
prochainement sur Metalab.
Scott D. Heavner est l'auteur de lde, (`Linux Disk Editor'). lde peut
servir aussi bien d'馘iteur binaire de disque, que d'un 駲uivalent de
debugfs pour les syst鑪es ext2 et minix, et m麥e pour les syst鑪es xia
(bien que le support xia ne soit plus disponible dans les noyaux 2.1.x et
2.2.x). Il dispose de fonctionnalit駸 pour faciliter la r馗up駻ation, comme
le parcours de la liste des blocs, et la recherche dans le contenu du disque.
Il poss鐡e 馮alement une documentation sur
les concepts de base des syst鑪es de fichiers particuli鑽ement utile,
ainsi qu'un document expliquant comment l'utiliser afin de
r馗up駻er des fichiers supprim駸.
La version 2.4 de lde est disponible sur
Comme la plupart des outils actuels de r馗up駻ation, il g鑽e tr鑚 mal les blocs
indirects effac駸 -- la plupart du temps il ne r馗up鑽e que les 12 premiers
Ko des gros fichiers.
La derni鑽e version peut 黎re r馗up駻馥 depuis
le site ftp officiel.
O'Reilly and Associates, Inc., ISBN : 1-56592-127-5.
Garfinkel, Simson, Daniel Weise et Steven Strassmann
(1994), The Unix-Haters Handbook, IDG Books, ISBN : 1-56884-203-1.
(ext2fs/debugfs), comp.os.linux.misc Usenet posting.
Peek, Jerry, Tim O'Reilly, Mike Loukides et al (1993),
UNIX Power Tools, O'Reilly and Associates, Inc./Random House,
Inc., ISBN : 0-679-79073-X.
Microsoft ;
UNIX est une marque d駱os馥 de
the Open Group ;
Linux est une marque d駱os馥 de Linus Torvalds aux USA et dans
quelques autres pays.
Ce document est Copyright ゥ 1997, 1999 Aaron Crane
aaronc@pobox.com.
courts extraits sans modification pour des revues ou une citation ;
dans ces circonstances, les sections peuvent 黎re reproduites
accompagn馥s d'une citation appropri馥 mais sans cette note de copyright.
L'auteur demande, mais n'exige pas, que des parties souhaitant
vendre des copies de ce document, sur un medium lisible par un
ordinateur ou par un humain, informent de leurs intentions,
soit l'auteur, soit le coordinateur des HOWTO Linux.
Le coordinateur des HOWTO Linux est actuellement Tim Bynum
linux-howto@metalab.unc.edu.