Ext2fs Undeletion of Directory Structures mini-HOWTO
Tomas
Ericsson
tomase (at) matematik.su.se
Á¤
Áö¿ë
ways (at) gon.kaist.ac.kr
v0.1.1
14 November 2000
T.E.
Initial release.
v0.1.1
29 November 2001
Á¤ Áö¿ë
ÃÖÃÊ ¹ø¿ª
ÀÌ ¹®¼´Â Aaron Crane¿¡ ÀÇÇØ ¾²¿©Áø
Ext2fs-Undeletion mini-HOWTO¸¦
º¸ÃæÇϱâ À§ÇÑ °ÍÀÌ´Ù.
³ª´Â ÀÌ ¹®¼¸¦ Àбâ Àü¿¡ ±× ¹®¼¸¦ ¸ÕÀú ÀÚ¼¼È÷ Àб⸦ °·ÂÈ÷ ÃßõÇÑ´Ù.
¿©±â¼ ³ª´Â ½Ç¼ö·Î ½ÇÇà½ÃŲ rm -rf¸í·É¿¡ ÀÇÇØ
Áö¿öÁø ÆÄÀÏ ´ÜÀ§°¡ ¾Æ´Ñ Àüü µð·ºÅ丮 ±¸Á¶¸¦ º¹±¸ÇÏ´Â
Á÷Á¢ÀûÀÎ ¹æ¹ýÀ» Á¦½ÃÇÒ °ÍÀÌ´Ù.
¼Ò°³
Ã¥ÀÓÀÇ ÇѰè
º» ÀúÀÚ´Â ÀÌ ¹®¼ÀÇ ³»¿ëÀÌ ¾ß±âÇÒ ¼ö ÀÖ´Â ¾î¶°ÇÑ °á°ú¿¡ ´ëÇØ¼µµ
Ã¥ÀÓÀ» ÁöÁö ¾Ê½À´Ï´Ù. ¸ðµç ÀÏÀº ´ç½ÅÀÇ Ã¥ÀÓ ÇÏ¿¡¼ ¼öÇàµÇ¾î¾ß ÇÕ´Ï´Ù.
ÀúÀÛ±Ç
º» ¹®¼´Â
http://www.linuxdoc.org/manifesto.html
¿¡¼ ¾òÀ» ¼ö ÀÖ´Â LDP license ÇÏ¿¡¼¸¸ ¹èÆ÷µÉ ¼ö ÀÖ´Ù.
Çǵå¹é
¾î¶² ÇüÅÂÀÇ Çǵå¹éÀ̵ç ȯ¿µÇÑ´Ù. ÀÌ ¹®¼ÀÇ ¿À·ù ¼öÁ¤Àº ¸Å¿ì Áß¿äÇÏ´Ù.
¸¸¾à, ´©±º°¡°¡ ÀÌ ¹®¼¸¦ À¯¿ëÇÏ°Ô »ç¿ëÇÏ¿´´Ù¸é, ³ª´Â ±×°Í¿¡ ´ëÇØ
µè´Â °ÍÀ» ÁÁ¾ÆÇÑ´Ù.
ÀÌ ¹®¼ÀÇ »õ ¹öÀü
ÀÌ ¹®¼ÀÇ ÃֽйöÀüÀº
http://www.matematik.su.se/~tomase/ext2fs-undeletion/
¿¡¼ ¾òÀ» ¼ö ÀÖ´Ù.
°¨»ç
¿À·ù¸¦ ¾Ë·ÁÁØ ´ÙÀ½ÀÇ »ç¶÷µé¿¡°Ô °¨»çÇÑ´Ù. (¾ËÆÄºª ¼ø¼)
Gabriel Kihlman
Richard Nyberg
Mats Oldin
Tobias Westerblom
¹è°æ
ÀÌ ¹®¼´Â ³»°¡ ¾ó¸¶ Àü °Þ¾ú´ø º¹±¸ ¹®Á¦¸¦ ÇØ°áÇÏ´Â µµÁß¿¡ ¾²¿©Á³´Ù.
³ª´Â ¸î°³ÀÇ µð·ºÅ丮¸¦ ÇϳªÀÇ µð½ºÅ©·ÎºÎÅÍ ´Ù¸¥ µð½ºÅ©·Î ¿Å±â·Á Çϰí
ÀÖ¾ú´Ù. ±×·¯³ª ¹®Á¦´Â ¿Å±â·Á Çß´ø µð½ºÅ©°¡ À̵¿ Á÷ÈÄ, ¸ðÁ¾ÀÇ ÀÌÀ¯·Î
ÀÎÇØ ¿À·ù°¡ ¹ß»ýÇÏ¿´´Ù.
±×·¡¼ ³ª´Â À̵¿½ÃŲ µð·ºÅ丮¸¦ ¿øº» µð½ºÅ©·Î ¿Å±â°íÀÚ Çß´Ù.
±×·¯³ª ¾à 40000°³ÀÇ º¹±¸ÇÒ ÆÄÀÏ·Î ÀÎÇÏ¿© ±×µéÀ» ÀÏÀÏÀÌ ¼ÕÀ¸·Î
ã¾Æ¼ º¹±¸ÇϱⰡ ¾î·Á¿öÁ³´Ù.
³ª´Â µð·ºÅ丮ÀÇ Àüü ±¸Á¶¸¦ µÇµ¹¸®°í ½Í¾ú´Ù. ¶È°°Àº »óȲÀº ¸¸¾à
³»°¡ ±× µð·ºÅ丮µéÀ» ´ë»óÀ¸·Î
rm -rf ¸¦ ½ÇÇàÇ߾ ÀϾÀ» °ÍÀÌ´Ù.
ÀüÁ¦Á¶°Ç
¹«¾ùº¸´Ù ¿µÇâ¹ÞÀº ÆÄƼ¼ÇÀ» ÃÖ´ëÇÑ »¡¸® ¾Æ¹«°Íµµ ÇÏÁö ¾ÊÀºÃ¤·Î ¾ð¸¶¿îÆ®
½ÃŰ´Â °ÍÀÌ ¸Å¿ì Áß¿äÇÏ´Ù. ¸¸¾à ´ç½ÅÀÌ »ç°íÈÄ¿¡ ÀÌ ÆÄƼ¼Ç¿¡¼ ÆÄÀÏÀ»
Ä«ÇÇÇϰųª Çß´Ù¸é, ÀÌ ¹æ¹ýÀÌ ¼º°øÇÒ °¡´É¼ºÀº ¸Å¿ì ³·¾ÆÁø´Ù.
¶ÇÇÑ, ²Ï ÃÖ±ÙÀÇ Ä¿³Î ¹öÀüÀ» °¡Á®¾ß¸¸ ÇÑ´Ù. ¿Ö³ÄÇϸé 2.0.x ³ª ±× ÀÌÇÏÀÇ
¹öÀü Ä¿³Î¿¡¼´Â ÀÌ °úÁ¤ÀÌ 12ºí·Ï ÀÌ»óÀÇ µ¥ÀÌÅ͸¦ °¡Áø ÆÄÀÏ¿¡ ´ëÇØ¼´Â
ÀÛµ¿ÇÏÁö ¾ÊÀ» °ÍÀ̱⠶§¹®ÀÌ´Ù.
³ª´Â º¹±¸ÇÏ´Â ÇÑ ¹æ¹ýÀ» ¼³¸íÇÒ °ÍÀ̳ª, ´ëºÎºÐÀÇ ¿¡·¯¿¡ ´ëÇÑ ¼³¸íÀº
»ý·«ÇÒ °ÍÀÌ´Ù. ¸¸¾à ´ÙÀ½¿¡ ¼³¸íµÈ °úÁ¤ÀÌ Àß ÀÛµ¿ÇÏÁö ¾Ê´Â °Í °°À¸¸é
°Å±â¼ ¸ØÃß°í ´õÀÌ»ó ÇÏÁö ¾Ê±â¸¦ ÃßõÇÑ´Ù.
Áغñ
Áö¿öÁø ÆÄÀÏÀÌ ÀÖ´Â ÆÄƼ¼ÇÀ» ¾ð¸¶¿îÆ®ÇÑ´Ù. ÀÌ ÆÄƼ¼ÇÀ» /dev/hdx1À̶ó
ÇϰڴÙ.
# umount /dev/hdx1
/dev/hdx1ÀÇ Å©±â¸¦ ºí·Ï´ÜÀ§·Î üũÇÑ´Ù.
# fdisk -l /dev/hdx
ÀÌÁ¦ ¾ÈÀüÀ» ±âÇϱâ À§ÇÏ¿© /dev/hdx1°ú °°Àº Å©±âÀÇ ¶Ç´Ù¸¥ ÆÄƼ¼ÇÀÌ
ÇÊ¿äÇÏ´Ù. ´ç½ÅÀÌ /dev/hdy¿¡ ºñ¾îÀÖ´Â Çϵåµå¶óÀ̺긦 °¡Áö°í ÀÖ´Ù°í
°¡Á¤ÇÏÀÚ.
# fdisk /dev/hdy
/dev/hdx1°ú °°Àº »çÀÌÁîÀÇ ÆÄƼ¼ÇÀ» »õ·Î ¸¸µç´Ù. ¿©±â¼
»çÀÌÁî´Â ºí·Ï ´ÜÀ§(°¢ ºí·ÏÀº 1024kB)·Î
³ªÅ¸³½ /dev/hdx1ÀÇ »çÀÌÁîÀÌ´Ù.
³ª´Â fdisk 2.10f ¹öÀüÀ» »ç¿ëÇÑ´Ù.
¸¸¾à ´ç½ÅÀÌ ´Ù¸¥ ¹öÀüÀÇ fdisk
¸¦ »ç¿ëÇÑ´Ù¸é, ¾Æ·¡ÀÇ ³»¿ëÀº ¾à°£ ´Ù¸¦ ¼ö ÀÖ´Ù.
fdisk: n <- »õ·Î¿î ÆÄƼ¼ÇÀ» ¸¸µç´Ù.
fdisk: p <- Primary ÆÄƼ¼Ç.
fdisk: <- ÃʱâÄ¡ÀΠù° ½Ç¸°´õ¸¦ ¼±ÅÃÇϱâ À§ÇØ ±×³É ¿£Å͸¦ ´©¸¥´Ù.
fdisk: +sizeK <- /dev/hdx1°ú °°Àº »çÀÌÁîÀÇ ÆÄƼ¼ÇÀ» ¸¸µç´Ù.
fdisk: w <- Å×À̺íÀ» µð½ºÅ©¿¡ ±â·ÏÇϰí Á¾·áÇÑ´Ù.
ÀÌÁ¦ ¿øº» ÆÄƼ¼ÇÀÇ ³»¿ëÀ» »õ·Î¿î ÆÄƼ¼ÇÀ¸·Î º¹»çÇÑ´Ù.
# dd if=/dev/hdx1 of=/dev/hdy1 bs=1k
ÀÌ °úÁ¤Àº ÆÄƼ¼ÇÀÇ Å©±â¿¡ µû¶ó ²Ï ¿À·¡°É¸± ¼öµµ ÀÖ´Ù. ¸¸¾à ºí·Ï»çÀÌÁî
bs¸¦ ´Ã¸°´Ù¸é, ´õ ºü¸£°Ô ÇÒ ¼ö ÀÖ°ÚÁö¸¸,
±×·² °æ¿ì¿¡´Â ÆÄƼ¼ÇÀÇ Å©±â°¡ bs
·Î ³ª´©¾î ¶³¾îÁ®¾ß ÇÑ´Ù.
ÀÌÁ¦ºÎÅÍ ¿ì¸®´Â À߸øµÇ´Â °ÍÀ» ¹æÁöÇϱâ À§ÇØ ¿øº» ÆÄƼ¼ÇÀÇ º¹»çº»¸¸À»
°¡Áö°í ÀÛ¾÷ÇÒ °ÍÀÌ´Ù.
Áö¿öÁø µð·ºÅ丮ÀÇ inode¸¦ ã±â
¿ì¸®´Â Áö¿öÁø µð·ºÅ丮ÀÇ inode ¹øÈ£µéÀ» ãÀ» °ÍÀÌ´Ù.
# debugfs /dev/hdy1
Áö¿öÁø µð·ºÅ丮°¡ ¿ø·¡ À§Ä¡Çß´ø °÷À¸·Î À̵¿ÇÑ´Ù.
debugfs ¾È¿¡¼´Â
ls ³ª cd ·Î À̵¿ÇÒ ¼ö ÀÖ´Ù.
debugfs: ls -l
À§ÀÇ ¸í·É¿¡ ´ëÇÑ outputÀ¸·Î ´ÙÀ½°ú °°Àº ¿¹½Ã¸¦ µé ¼ö ÀÖ´Ù.
179289 20600 0 0 0 17-Feb-100 18:26 file-1
918209 40700 500 500 4096 16-Jan-100 15:18 file-2
160321 41777 0 0 4096 3-Jun-100 06:13 file-3
177275 60660 0 6 0 5-May-98 22:32 file-4
229380 100600 500 500 89891 19-Dec-99 15:40 file-5
213379 120777 0 0 17 16-Jan-100 14:24 file-6
À§ ³»¿ëÀÇ °¢ ÇʵåµéÀ» ¼³¸íÇϸé,
Inode ¹øÈ£.
¸Ç ¾Õ µÎ(ȤÀº ù) ¼ýÀÚ´Â inodeÀÇ Á¾·ù¸¦ ÀǹÌÇÑ´Ù.
2 = ¹®ÀÚ µð¹ÙÀ̽º
4 = µð·ºÅ丮
6 = ºí·Ï µð¹ÙÀ̽º
10 = ÀÏ¹Ý ÆÄÀÏ
12 = ½Éº¼¸¯ ¸µÅ©
³²Àº ³× ¼ýÀÚ´Â Unix¿¡¼ Á¤ÇØÁö´Â °ÍÀÌ´Ù.
¼ýÀڷΠǥÇöµÈ ¼ÒÀ¯ÁÖ.
¼ýÀڷΠǥÇöµÈ ¼ÒÀ¯ ±×·ì.
¹ÙÀÌÆ®·Î ³ªÅ¸³½ Å©±â.
³¯Â¥ (¿©±â¼ ¿ì¸®´Â Y2K ¹ö±×¸¦ º¼ ¼ö ÀÖ´Ù =)).
½Ã°£.
ÆÄÀÏÀ̸§.
ÀÌÁ¦ »óÀ§ µð·ºÅ丮¸¦ µð½ºÅ©¿¡ ´ýÇÁÇÏÀÚ. ¿©±â¼ inode
´Â ±×¿¡ ÇØ´çÇÏ´Â inode ¹øÈ£¸¦ °¡¸®Å²´Ù
('<' ¿Í '>'¸¦ »©¸ÔÁö ¾Êµµ·Ï ÇØ¾ßÇÑ´Ù.).
debugfs: dump <inode> debugfs-dump
debugfs¿¡¼ ºüÁ®³ª¿Â´Ù.
debugfs: quit
´ýÇÁµÈ µð·ºÅ丮ÀÇ ºÐ¼®
ÀÐÀ» ¼ö ÀÖ´Â ÇüÅ·Π´ýÇÁµÈ inode¸¦ º¸ÀÚ.
# xxd debugfs-dump | less
¸ðµç ¿£Æ®¸®´Â ´Ù¼¸°³ÀÇ Çʵå·Î ±¸¼ºµÈ´Ù. ù µÎ Çʵå´Â ¿ª¼øÀ¸·Î ¹ÙÀÌÆ®°¡
¹è¿µÇ¾îÀÖ´Ù. À̴ ù¹øÂ° ¹ÙÀÌÆ®°¡ Á¦ÀÏ ³·Àº ÀÚ¸®ÀÇ ¼ö¶ó´Â °ÍÀ» ÀǹÌÇÑ´Ù.
°¢ ÇʵåÀÇ ¼³¸í.
4 ¹ÙÀÌÆ® - Inode ¹øÈ£.
2 ¹ÙÀÌÆ® - µð·ºÅ丮 ¿£Æ®¸® ±æÀÌ.
1 ¹ÙÀÌÆ® - ÆÄÀÏÀ̸§ ±æÀÌ (1-255).
1 ¹ÙÀÌÆ® - ÆÄÀÏÀÇ Á¾·ù.
0 = ¾Ë¼ö¾øÀ½
1 = ÀÏ¹Ý ÆÄÀÏ
2 = µð·ºÅ丮
3 = ¹®ÀÚ µð¹ÙÀ̽º
4 = ºí·° µð¹ÙÀ̽º
5 = FIFO
6 = SOCK
7 = ½Éº¼¸¯ ¸µÅ©
ÆÄÀÏÀ̸§ (1-255ÀÚ).
¸¸¾à µð·ºÅ丮ÀÇ ¾î¶² ¿£Æ®¸®°¡ Áö¿öÁ®¾ß ÇÑ´Ù¸é, Áö¿öÁ®¾ß ÇÒ ¿£Æ®¸®
¹Ù·Î ¾Õ¿¡ ÀÖ´Â ¿£Æ®¸®ÀÇ µÎ¹øÂ° Çʵ尡 Áö¿öÁ®¾ß ÇÒ ¿£Æ®¸®ÀÇ µÎ¹øÂ°
ÇÊµå °ª¸¸Å Áõ°¡µÈ´Ù.
¸¸¾à, ÆÄÀÏÀ̸§ÀÌ ´õ ªÀº °ÍÀ¸·Î ¹Ù²î¸é, ¼¼ ¹øÂ° Çʵ尪ÀÌ ÁÙ¾îµç´Ù.
¸Ç ù ¿£Æ®¸®´Â '.'À¸·Î Ç¥ÇöµÇ´Â ±× µð·ºÅ丮 ÀÚ½ÅÀÌ´Ù.
¿ì¸®°¡ ´ÙÀ½°ú °°Àº µð·ºÅ丮 ¿£Æ®¸®µéÀ» °¡Áö°í ÀÖ´Ù°í ÇÏÀÚ.
c1 02 0e 00 40 00 05 01 'u' 't' 'i' 'l' 's'
±×·¯¸é inode´Â 16Áø¼ö·Î e02c1ÀÌ µÉ °ÍÀ̰í, ÀÌ´Â 10Áø¼ö·Î 918209ÀÌ´Ù.
´ÙÀ½ ¿£Æ®¸®´Â 64¹ÙÀÌÆ®(16Áø¼ö·Î 40) µÚ¿¡ À§Ä¡ÇÏ°Ô µÉ °ÍÀ̰í,
¿ì¸®´Â ÆÄÀÏ À̸§ÀÌ 5ÀÚ("utils")·Î ±¸¼ºµÈ °ÍÀ» ¾Ë ¼ö ÀÖ´Ù. ±×¸®°í
ÆÄÀÏÀÇ Á¾·ù´Â ÀÏ¹Ý ÆÄÀÏÀÓÀ» ¾Ë ¼ö ÀÖ´Ù.
ÀÌÁ¦ µð·ºÅ丮ÀÇ inode ¹øÈ£¸¦ 10Áø¼ö·Î ´Ù½Ã °è»êÇÏÀÚ.
¸¸¾à À̸¦ ¼ÕÀ¸·Î °è»êÇÏ°í ½ÍÁö ¾Ê´Ù¸é, ³»°¡ C·Î ¸¸µç ÀÛÀº ÇÁ·Î±×·¥À»
»ç¿ëÇØ¶ó. ÀÌ ÇÁ·Î±×·¥Àº µð·ºÅ丮 ´ýÇÁ( ¿¡¼ ¼³¸íµÈ
debugfs À¸·Î ¸¸µé¾îÁø´Ù )¸¦ ÀÔ·ÂÀ¸·Î ¹Þ°í,
°¢ ¿£Æ®¸®ÀÇ inode¹øÈ£¿Í ÆÄÀÏÀ̸§À» stdout¿¡ Ãâ·ÂÇÑ´Ù.
ÇÁ·Î±×·¥À» ½ÇÇà½Ã۱â Àü¿¡, ´ýÇÁ¸¦ hex¿¡µðÅÍ·Î ºÒ·¯µé¿© µÇ»ì¸®°íÀÚ ÇÏ´Â
µð·ºÅ丮 ¿£Æ®¸® ¹Ù·Î ¾Õ ¿£Æ®¸®ÀÇ
µð·ºÅ丮 ¿£Æ®¸® ±æÀÌÇʵ带 Á¶Á¤ÇÒ Çʿ䰡 ÀÖ´Ù.
±×·¯³ª, ÀÌ´Â °£´ÜÇÏ´Ù. ¸¸¾à ¾ÕÂÊ ¿£Æ®¸®ÀÇ ÇÊµå °ªÀ»
x¶ó Çϰí, µÇ»ì¸®°íÀÚ ÇÏ´Â ¿£Æ®¸®ÀÇ ÇÊµå °ªÀ»
y¶ó Çϸé, x¸¦
x - y·Î ¹Ù²Ù¸é µÈ´Ù.
http://www.matematik.su.se/~tomase/ext2fs-undeletion/
¿¡¼ e2dirana (ext2fs directory analyse)¶õ
ÇÁ·Î±×·¥À» ±¸ÇÒ ¼ö ÀÖ´Ù.
Áö¿öÁø inodeµéÀ» ¿øÀ§Ä¡ ½Ã۱â
Áö¿öÁø inodeµéÀÇ ¸ñ·ÏÀ» ¾ò´Â´Ù.
# echo lsdel | debugfs /dev/hdy1 > lsdel.out
¹®Á¦´Â ¿©±â¼ debugfs°¡ Å©±â°¡ 0ÀÎ ÆÄÀÏ(´ç½ÅÀº
¾Æ¸¶µµ /etcµð·ºÅ丮¿¡¼ ÀÌ·¯ÇÑ °ÍµéÀ» º¼ ¼ö ÀÖÀ» °ÍÀÌ´Ù)ÀÇ
inode ¹øÈ£¸¦ ÁÖÁö ¾Ê´Â´Ù´Â °ÍÀÌ´Ù. ÀÌ ¹®Á¦¿¡ ´ëÇÑ ÇØ°áÃ¥Àº
°ú ¿¡¼ Á¦½ÃÇϵµ·Ï ÇϰڴÙ.
"lsdel.out"À» ¹®¼ ÆíÁý±â·Î ºÒ·¯¿Â´Ù. inodeµéÀÇ ¸ñ·ÏÀº ½Ã°£ ¼ø¼´ë·Î Á¤·Ä
µÇ¾îÀÖÀ» °ÍÀÌ´Ù. ´ç½ÅÀÌ rm -rf¸¦ ¾ðÁ¦ Çß´ÂÁö¸¦
±â¾ïÇØ º¸¾Æ¶ó. ¾Æ¸¶µµ ±×°ÍÀº ´ç½ÅÀÌ ¸¶Áö¸·À¸·Î Áö¿î °ÍÀ̾úÀ» °ÍÀ̰í
¸ñ·ÏÀÌ ½Ã°£¼øÀ¸·Î Á¤·ÄµÇ¾îÀֱ⠶§¹®¿¡ ±×°ÍµéÀº ¸ñ·ÏÀÇ ¸Ç ¸¶Áö¸·¿¡ ÀÖÀ»
°ÍÀÌ´Ù.
ÇÊ¿äÇÏÁö ¾ÊÀº °ÍµéÀ» ¸ðµÎ Áö¿ì°í, À̸¦ "lsdel.out-selected"·Î ÀúÀåÇÑ´Ù.
ÀÌÁ¦ inode¸¦ Á¦¿ÜÇÑ ¸ðµç Á¤º¸¸¦ Áö¿î´Ù.
# cut -b 1-8 lsdel.out-selected | tr -d " " > inodes
È®½ÇÈ÷ Çϱâ À§Çؼ, À§¿¡¼ ãÀº Áö¿öÁø µð·ºÅ丮µéÀÇ inode°¡
¸ñ·Ï¿¡ ÀÖ´ÂÁö È®ÀÎÇÏÀÚ.
# grep ^inode$ inodes
¿©±â¼ inode ´Â ±×¿¡ ÇØ´çÇÏ´Â inode¹øÈ£ÀÌ´Ù.
inodeµéÀ» Ȱ¼ºÈ½Ã۱â
ÀÌÁ¦ Áö¿öÁø inodeµéÀÇ Ç÷¡±×µéÀ» Á¶Á¤ÇؾßÇÑ´Ù.
"make-debugfs-input"À̶õ ÆÄÀÏÀ» ¸¸µé°í, ´ÙÀ½ 6ÁÙÀ» ³Ö¾î¶ó.
#!/bin/sh
awk '{ print "mi <" $1 ">\n"\
"\n\n\n\n\n\n\n"\
"0\n"\
"1\n"\
"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n" }'
ÀÌ´Â inode¸¦ Á÷Á¢ ¼öÁ¤ÇÒ ¶§, »ç¶÷ÀÇ ÀÔ·ÂÀ» ½Ã¹Ä·¹ÀÌÆ® ÇÒ °ÍÀÌ´Ù.
¿ì¸®´Â Áö¿öÁø ½Ã°£À» 0À¸·Î Çϰí,
¸µÅ© ¼ýÀÚ ¸¦ 1·Î ÇÒ °ÍÀÌ´Ù.
³ª´Â debugfs 1.18 ¹öÀüÀ» »ç¿ëÇϰí ÀÖ´Ù.
¸¸¾à ´Ù¸¥ ¹öÀüÀ» »ç¿ëÇϰí ÀÖ´Ù¸é, ´ç½ÅÀº À§ ½ºÅ©¸³Æ®ÀÇ ¿£ÅÍ °¹¼ö¸¦
ÀûÀýÇÏ°Ô Á¶ÀýÇØ¾ß ÇÒ °ÍÀÌ´Ù.
ÀÌÁ¦ inode¸¦ ¼öÁ¤ÇÏÀÚ.
# ./make-debugfs-input < inodes | debugfs -w /dev/hdy1 | tail -c 40
¸¸¾à, ¸ðµç °ÍÀÌ Àß ¼öÇàµÇ¾ú´Ù¸é, À§ ¸í·ÉÀº
"Triple Indirect Block [0] debugfs:"¶ó°í ÇÏ¸é¼ ³¡³ª¾ß ÇÑ´Ù.
µð·ºÅ丮 ¿£Æ®¸®¸¦ ´õÇϱâ
debugfsÀ» Àбâ-¾²±â ¸ðµå·Î ½ÃÀÛÇÑ´Ù.
# debugfs -w /dev/hdy1
ÀÌÁ¦ ´ç½ÅÀº Áö¿öÁø µð·ºÅ丮°¡ À§Ä¡Çß´ø °÷¿¡ µð·ºÅ丮¸¦ »õ·Î ³Ö¾î¾ß ÇÑ´Ù.
debugfs: link <inode> directoryname
¿©±â¼ inode ´Â inode ¹øÈ£À̰í,
directoryname Àº µð·ºÅ丮 À̸§ÀÌ´Ù.
¸µÅ©¸¦ Ãß°¡ÇÑ´ÙÀ½, µð·ºÅ丮°¡ ÇöÀç µð·ºÅ丮¿¡ Ãß°¡µÈ °ÍÀ» È®ÀÎÇÒ ¼ö
ÀÖÀ» °ÍÀÌ´Ù. ´ç½ÅÀº ÀÌÁ¦ ±×µéÀÇ ³»¿ëÀ» È®ÀÎ ÇÒ ¼ö ÀÖ´Ù
(debugfs¿¡¼).
±×·¯³ª °¢ µð·ºÅ丮ÀÇ Å©±â°¡ 0À̱⠶§¹®¿¡ ÀÌ´Â °íÃÄÁ®¾ßÇÑ´Ù. ±×·¸Áö ¾ÊÀ¸¸é
½©¿¡¼ ls ¸í·ÉÀ¸·Î º¸¾ÒÀ» ¶§, ºñ¾îÀÖ´Â °ÍÀ¸·Î
º¸ÀÏ °ÍÀÌ´Ù.
debugfs¿¡¼ ºüÁ®³ª¿Â´Ù.
debugfs: quit
Àç°è»ê
ÀÌÁ¦ Å©±â¿Í üũ¼¶À» ´Ù½Ã °è»êÇϱâ À§ÇØ e2fsck À»
½ÇÇà½Ãų Â÷·ÊÀÌ´Ù.
³ª´Â e2fsck 1.18 ¹öÀüÀ» ¾²°í ÀÖ´Ù. ¸¸¾à
´Ù¸¥ ¹öÀüÀ» »ç¿ëÇϰí ÀÖ´Ù¸é, ÆÄ¶ó¹ÌÅͳª ÀÔ/Ãâ·ÂÀÌ ¹Ù²îÁö ¾Ê¾Ò´ÂÁö
È®ÀÎÇØ¾ß ÇÒ °ÍÀÌ´Ù.
¸¸¾à ´ç½ÅÀÌ º¹±¸ÇϰíÀÚ ÇÏ´Â ÆÄÀÏ Áß Å©±â°¡ 0ÀÎ ÆÄÀÏÀÌ Çϳªµµ
¾ø´Ù¸é ¾Æ·¡ÀÇ ³»¿ëÀ» ÇÑ µÚ, ÀÌ ±ÛÀÇ ³ª¸ÓÁö ºÎºÐÀº ³Ñ¾î°¡µµ
µÈ´Ù. (¹°·Ð ´ç½ÅÀº ÀÎÀÚ y¸¦ ¾²Áö ¾ÊÀ» ¼öµµ
ÀÖ°ÚÁö¸¸, ±×·² °æ¿ì ¸ðµç Áú¹®¿¡ ÀÏÀÏÀÌ ¼ÕÀ¸·Î ´ë´äÇØ¾ß ÇϹǷÎ, ¸¹Àº
½Ã°£ÀÌ °É¸± °ÍÀÌ´Ù.
# e2fsck -f -y /dev/hdy1 > e2fsck.out 2>&1
¸¸¾à ´ç½ÅÀÌ Å©±â°¡ 0ÀÎ ÆÄÀϵéÀ» µÇ»ì¸®°í ½Í´Ù¸é, ¿£Æ®¸®¸¦ Áö¿ì°Ú³Ä´Â
Áú¹®¿¡ no ¶ó°í ´ë´äÇØ¾ßÇϰí, Áö¿öµµ µÇ´Â ¿£Æ®¸®
¿¡ ´ëÇØ¼´Â yes ¶ó°í ´ë´äÇÏ¸é µÈ´Ù.
¾Æ·¡ 7ÁÙÀÇ ³»¿ëÀ» "e2fsck-wrapper"¶õ ÆÄÀÏ¿¡ ³Ö´Â´Ù.
#!/usr/bin/expect -f
set timeout -1
spawn /sbin/e2fsck -f $argv
expect {
"Clear<y>? " { send "n" ; exp_continue }
"<y>? " { send "y" ; exp_continue }
}
À§ ½ºÅ©¸³Æ®¸¦ ½ÇÇà½ÃŲ´Ù.
# ./e2fsck-wrapper /dev/hdy1 > e2fsck.out 2>&1
e2fsck¿¡¼ ¾î¶»°Ô ÆÄƼ¼ÇÀ» ó¸®Çß´ÂÁö º¸±âÀ§Çؼ´Â,
e2fsck.outÀÇ ³»¿ëÀ» º¸¾Æ¶ó.
¸¸¾à /lost+found µð·ºÅ丮°¡ ºñ¾îÀÖÁö ¾Ê´Ù¸é
¸î¸î µð·ºÅ丮³ª ÆÄÀÏÀÌ Á¤È®ÇÑ À§Ä¡¿¡ ³ªÅ¸³ªÁö ¾ÊÀ» ¼öµµ ÀÖ´Ù.
´ë½Å¿¡ ±× ÆÄÀϵéÀº /lost+foundÆÄÀÏ¿¡ ±×µéÀÇ inode¸¦ ÆÄÀÏÀ̸§À¸·Î
ÇÏ¿© ³ªÅ¸³µÀ» °ÍÀÌ´Ù.
ÀÌ °æ¿ì´Â, ".." µð·ºÅ丮 ¿£Æ®¸®¿¡ ´ëÇÑ Æ÷ÀÎÅͰ¡ Áõ°¡µÇ¾î ±× ´ÙÀ½
µð·ºÅ丮¸¦ °¡¸®Å°°í ÀְԵȴÙ. (ÀÌ·± Çö»óÀÌ ÀϾ´Â ÀÌÀ¯´Â ¾Ë ¼ö
¾ø´Ù. ¾Æ¸¶ ÆÄÀϽýºÅÛÀÇ ¹ö±×ÀÎ °Í °°´Ù)
µð·ºÅ丮ÀÇ ¿¬°á¼ºÀÌ °Ë»çµÇ´Â "e2fsck.out"ÀÇ pass 3
À» Á¶»çÇØº¸¾Æ¶ó. ¾Æ¸¶µµ °Å±â¼ ¿µÇâ¹ÞÀº µð·ºÅ丮¸¦ ãÀ» ¼ö ÀÖÀ» °ÍÀÌ´Ù.
¿¡ ³ª¿Â´ë·Î µð½ºÅ©¸¦ ´ýÇÁÇÏ¿©¶ó.
e2dirana
¸¦ p ÀÎÀÚ¸¦ ÁÖ°í, ½ÇÇà½Ã۰í, ÀÎÀÚ ¾øÀÌ ¶Ç
½ÇÇà½ÃÄѶó.(ÀÌ´Â ".." µð·ºÅ丮 ¿£Æ®¸®ÀÇ Æ÷ÀÎÅ͸¦ º¯È½Ãų °ÍÀÌ´Ù).
¿©±â¼ dump´Â ´ýÇÁµÈ µð·ºÅ丮ÀÌ´Ù.
# e2dirana dump > dump1
# e2dirana -p dump > dump2
µÎ °¡Áö Ãâ·ÂµÈ °ÍÀ» ºñ±³ÇØ º¸¾Æ¶ó.
# diff dump1 dump2
¸¸¾à µÎ °¡Áö Ãâ·ÂÀÌ °°Áö ¾Ê´Ù¸é µð·ºÅ丮ÀÇ ¾î¶² ÆÄÀÏÀΰ¡°¡ ¾ø¾îÁø °ÍÀÌ´Ù.
±×·¯¸é ÇØ´çÇÏ´Â ÆÄÀÏÀ» /lost+found ¿¡¼ ã¾Æ¼ ¿Ã¹Ù¸¥ À§Ä¡·Î ¿Å°ÜÁÖ¾î¶ó.
¿©±â¼ dest ´Â ¸ñÀû µð·ºÅ丮¿¡ ´ëÇÑ ½Éº¼¸¯ ¸µÅ©ÀÌ´Ù.
Ãâ·ÂÀ» ½ºÅ©¸³Æ®¿¡ ³Ö°í, ´ç½ÅÀÌ µ¿ÀÇÇÑ´Ù¸é ½ºÅ©¸³Æ®¸¦ ½ÇÇà½ÃÄѶó.
# diff dump1 dump2 |\
tail -n $[`diff dump1 dump2 | wc -l`-1] | cut -b 3- |\
sed -e 's/^\([^ ]*\) \(.*\)$/mv lost+found\/#\1 dest\/"\2"/' |\
sed -e 's/!/"\\\!"/g'
ÀÌ °úÁ¤À» /lost+found°¡ ºñ°Ô µÉ ¶§±îÁö ¹Ýº¹ÇÑ´Ù.
¸¶Áö¸· ¼ÕÁú
¸¸¾à ¿¡¼ Å©±â°¡ 0ÀÎ ÆÄÀϵéÀ» µÇ»ì¸®±â·Î °áÁ¤
ÇßÀ¸¸é ¹®Á¦°¡ Çϳª ³²¾ÆÀÖ´Ù. ¿Ö³ÄÇϸé ÀÌ ÆÄÀϵéÀº 0ÀÌ ¾Æ´Ñ »èÁ¦ ½Ã°£°ú
0ÀÇ ¸µÅ© ¼ýÀÚ¸¦ °¡Áö°í Àֱ⠶§¹®ÀÌ´Ù. ÀÌ´Â e2fsck°¡
½ÇÇàµÉ ¶§¸¶´Ù ÀÌ ÆÄÀϵéÀ» »èÁ¦Ç϶ó°í ¹°¾îº¸°Ô µÉ °ÍÀ̱⠶§¹®ÀÌ´Ù.
ÀÌ ¹®Á¦¸¦ ÇØ°áÇÏ´Â °¡Àå ½¬¿î ¹æ¹ýÀº Àüü µð·ºÅ丮 ±¸Á¶¸¦ ´Ù¸¥ °÷(°°Àº
ÆÄƼ¼Ç »ó¿¡ À־ µÈ´Ù)À¸·Î º¹»ç Çϰí, ¿øº» ÆÄÀϵéÀ» Áö¿î ÈÄ, ´Ù½Ã
¿ø·¡ À§Ä¡·Î º¹»çÇØ¿À´Â °ÍÀÌ´Ù. ÀÌ·¸°Ô ÇÏÁö ¾ÊÀ¸¸é, ÀÏÀÏÀÌ inode¸¦ ¾Ë¾Æ³»¼
debugfs·Î ¹Ù²ãÁÖ¾î¾ß ÇÑ´Ù.
ÀÌÁ¦ ¸ðµç °ÍÀÌ Àß µÇ¾ú´Ù¸é, ¸ðµç °ÍµéÀÌ »èÁ¦µÇ±â ÀüÀÇ »óŰ¡ µÇ¾î¾ß ÇÑ´Ù.
ÃÖ¼ÒÇÑ ³»°¡ ÀÌ ±ÛÀ» ¾²¸é¼ ÇØº» Å×½ºÆ®¿¡¼´Â ±×·¨´Ù.
±â¾ïÇÒ °ÍÀº ¹Ýµå½Ã ¿¡ ³ª¿Â ÀüÁ¦Á¶°ÇÀ»
¸¸Á·ÇØ¾ß ÇÑ´Ù´Â °ÍÀÌ´Ù.
Âü°í¹®Çå
Linux Ext2fs Undeletion mini-HOWTO, v1.3
Aaron Crane
Design and Implementation of the Second Extended Filesystem,
http://e2fsprogs.sourceforge.net/ext2intro.html
Rémy Card, Laboratoire MASI--Institut Blaise Pascal
Theodore Ts'o, Massachussets Institute of Technology
Stephen Tweedie, University of Edinburgh
Kernel Source for Linux 2.2.16
linux/include/linux/ext2_fs.h
linux/fs/ext2/namei.c