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