Wednesday, June 2, 2010

Бууж өгье гэвэл зөндөө боломж байна, гэхдээ ганцхан л давж гарах боломж бий

Дөнгөж сая бараг уйлахаас цаагуур зүйл болоод өнгөрлөө. Тэгэхдээ алдлаа гээд уйлах гэсэн нулимс гардаггүй сонин юм. Ажлын компьютерээсээ зөөврийн компьютер луу нэвтэрч орчихоод явж байгаад дипломоо тэр чигээр нь устгачихваа. Зөөврийн компьютер маань үндсэн 2 партишнд хуваагдсан нэг нь өгөгдлөө хадгалдаг NTFS, нөгөөх нь яг ажиллагааны EXT4 дээр нь линукс суусан хоёр хэсэгтэй.

Азаар NTFS-ээ маунт хийж холбодог байсан учир энэ партишн тийм ч идэвхтэй биш устгасан өгөгдлүүд хэсэгтээ байж байдаг. Гэхдээ анхаараарай "Ямар нэгэн файл устахад дискэн дээрээс чинь файл устдаггүй, зөвхөн файлын бүртгэлд зориулсан орон зайгаас л бүртгэлийг нь устгадаг" тийм учраас түүнийг сэргээх найдвар бий.

Линукс үйлдлийн систем маань "ntfsundelete" гэдэг жижигхэн түүлтэй хамт ирдэг. Энэ түүлийн тусламжтайгаар сэргээж болно. Гэвч миний тохиолдолд энэ нь маш хүнд байсан. Манай ажлын ах маань Линукс дээрээс NTFS партишн дээрх өгөгдлийг устгавал сэргээх ямар ч боломжгүй сонссоноо хэлэхэд их айсан шүү. Энэ нь ч үнэний ортой юм билээ. Яагаад?

NTFS партишн дээрээс файлыг устгах үед түүний нэрийг нь хамт устгадаг. Ийм үед ямар нэртэй файл байж байгаад устгагдсан нь мэдэгдэхгүй.

sudo ntfsundelete /dev/sda5 -s -f

гэх үед бүх файлууд чинь гарч ирэх болно. Иймэрхүү:


38650 FR.. 100% 2007-10-16 83 <none>
38652 D... 0% 2008-08-23 0 <none>


Гарч ирж байгаа мэдээллийн хамгийн арын баганад файлын нэр байх ёстой боловч минийх дээр бүгд None байв. Эхний багана нь файлыг давтагдашгүй дугаарлаж байдаг inode, дараагийн багана нь файлын төрөл, арынх нь нас, тэр он сарыг нь мэдэхгүй юм байна. Бодвол үүсгэсэн өдөр байх. Харин дараагийнх нь хэмжээ байдаг.

Хэрвээ нас нь 0% гэж байвал авралгүй гэж ойлго. Тэгэхээр би өгөгдлөө устгаад дөнгөж удаагүй байсан учраас бүх 100%-тай файлуудыг авахаар шийдсэн. Тэгтэл 100%-тай 14890 файл байдгийм байна. Тэгээд л багшаасаа сурсан чаддаг шелл скриптээ бичив. Энэ бараг цаг шахуу ажилласан:

#Сэргээх боломжтой файлуудын ID-г шүүрдэж байна.

sudo ntfsundelete /dev/sda5 -s -f | grep "100%" | sed -re \
's/^[0-9]+ .*$/\1/g'> 100percentfiles

#Одоо сэргээх боломжтой файлуудынхаа нэрийг мэдэхгүй байсан учраас
#түүний id-гаар нь файл үүсгэж өгөгдлүүдийг нь оруулна:

while read x; do
sudo ntfsundelete /dev/sda5 -u -f -i $x -o $x
done < 100percentfiles

Ажиллах горимын үед -u гэдэг нь сэргээх, -o гаралтын файлыг заана, -f гэдэг нь хүчээр компьютерээ унтраасан үед гарч ирдэг, -i нь файлын id-г зааж байна. Зиак ингээд ажиллуулна. Ингээд 14890 ширхэг файл үүснэ. Бүгд дугаарлагдсан. Харин би яаж энэ дундаас диплом дээр хийсэн программаа олж авах уу? grep коммандыг ашигласан :)

Grep-ийг ашиглахын тулд маш сайн хүний санах ойтой байх хэрэгтэй. Ямар файл би устгасан билээ, гол файл нь main.py гэдэг нэртэй gst гэсэн модулийг импортолж байсан гээд л санаж гарваа. Тэгэхээр main.py гэсэн файл дотор
import gst

гэсэн мөр байж л байгаа.
$ grep -rE "import gst" .

гээд ажиллуултал:

Binary file ./22569 matches
Binary file ./21129 matches
Binary file ./20738 matches
Binary file ./20431 matches
Binary file ./22568 matches
...

гээд л 10 мөр файл олдсон мэдээлэл гарч ирсэн. Тэгээд файл болгоныг нь дэлгээд үзэж байтал нэг нь миний хайж байсан файл мөн болов. Файлын төгсгөл хэсэгт жаахан бинар мэдээлэл нэмэгдсэн байсан боловч би олох зүйлээ олсон шууд copy/paste. Тэгээд олсон файлаа дэлгээд үзтэл бусад импортууд.

import settings
import window_manager
...

гэх мэтчилэн ар араасаа хөврөв. Тэгээд л би утасны нэг үзүүрийг атгаад авсан. Ийм юм импортолж байсан юм чинь энэ файл чинь ийм класс дотор нь зарласан байх ёстой гээд л дахиад grep командаа ажиллуулаад нөгөө арван хэдэн мянган файл дундаас олоод атгасан жижиг утасны үзүүрээрээ дамжуулан бүгдийг нь би авсан юм. Хэрвээ бууж өгье гэвэл бууж өгөх олон шалтгаан байлаа "устгасан, файлын нэр нь устчихаж ..." . Твиттерчиддээ баярлалаа дэмжсэнд.

4 comments:

  1. Үнэхээр гайхалтай пост байна. Ядаж байхад би яг устаснаа жиргэж байхад чинь Twitter-тээ байж байсан хэхэ. Бүх үйл явдал нүдний өмнүүр явдаг бээшд хэхэ Twitter-ээ гэж :P

    За ямар ч байсан энэ ёстой сайн пост байна. Баярлалаа. Тэр сүүлдийн өгүүлбэр таалагдсан учир жиргэв ;)

    ReplyDelete
  2. Би бас өнөөдөр өдөржин ажил дээрээ устсан файл сэргээж суусан. IT чиглэлээр ажилдаггүй мөртлөө Windows XP үйлдлийн систем дээр Shift+Delete хийсэн 25GB файлуудын 12GB -г 4 төрлийн Recover ашиглан амжилттай сэргээсэн гэж байгаа. Гэхдээ л сэргээгүй байгаа тун хэрэгтэй зүйлс зөндөө байгаа. Маргааш үргэлжлүүлээд оролдоно доо.
    Оролдлого ихт оройд нь гарна гэдэг байхаа?

    ReplyDelete
  3. За за амжилттай болсонд баяр хүргэе. Хэрэгтэй пост байна шүү. Дипломоо амжилттай хамгаалаарай

    ReplyDelete
  4. Баяр хүргэе уншихад сэтгэл хөдлөм байлаа :D

    ReplyDelete