Saturday, August 21, 2010

Debian Linux: Simple steps to recover files from /lost+found

The following steps illustrate how one can use simple shell commands to recover files from the /lost+found directory in Linux. This assumes that you actually have some files in /lost+found.




  1. First, concatenate all the *.md5sums files in /var/lib/dpkg/info into a single file:


    cd /var/lib/dpkg/info
    cat *.md5sums | sort -k 2 > /tmp/all.md5


  2. Go to the /lost+found directory. fsck may have placed some files here after fixing the Linux partition. If you don't find any file here, you can relax and skip the following steps. Run md5sum on files in /lost+found.


    cd /lost+found
    md5sum * | sort > /tmp/lost.md5


  3. Put only the md5sum values into a temporary file, called 0.txt.


    awk '{print $1}' /tmp/lost.md5 > /tmp/0.txt


  4. Search all.md5 for the md5sum values in 0.txt and save the results in 1.txt.


    for f in $(cat /tmp/0.txt); do grep $f all.md5 >> /tmp/1.txt; done


  5. Put the names of files in /lost+found into a temporary fie 2.txt.


    awk '{print $2}' /tmp/lost.md5 > /tmp/2.txt


  6. Move the lost+found files to their original locations.


    cd /
    for $f in $(cat /tmp/2.txt); do MD5=$(grep $f /dev/shm/lost.md5 | awk '{print $1}'); ORIGIN=$(grep $MD5 /tmp/1.txt | awk '{print $2}'); mv /lost+found/$f /$ORIGIN; done

Monday, August 9, 2010

Tweaking Lenovo IdeaPad S12

I bought Lenovo IdeaPad S12 for $400. This little laptop has 12.1" display, VIA Nano processor, 1GB memory and 160GB hard drive. It's shipped with Windows XP, but I want to install Windows 7 alongside XP, so as to have a dual-boot system.



Shrinking the Recovery Partition


I booted IdeaPad S12 with my own Linux Live CD. In Xterm, I typed the following command:



fdisk -l -u /dev/sda


I got the following output.



Disk /dev/sda: 160.0 GB, 160041885696 bytes
255 heads, 63 sectors/track, 19457 cylinders, total 312581808 sectors
Units = sectors of 1 * 512 = 512 bytes
Disk identifier: 0xee8a96be

Device Boot Start End Blocks Id System
/dev/sda1 * 2048 217909247 108953600 7 HPFS/NTFS
/dev/sda2 217909248 281638911 31864832 f W95 Ext'd (LBA)
/dev/sda3 281638912 312581807 15471448 12 Compaq diagnostics
/dev/sda5 217911296 281638911 31863808 7 HPFS/NTFS


The last primary partition /dev/sda3 seems to be Lenovo's recovery partition. I was able to boot the recovery partition with the following GRUB commands:



root (hd0,2)
chainloader +1
boot


Once I boot into Lenovo's OneKey Recovery System, I can use OneKey AntiVirus to scan the laptop for virus or use OneKey Recovery to restore the laptop to the factory state. I rebooted the laptop with my Linux Live CD. Then, I used GParted to shrink /dev/sda3 and changed its partition number to /dev/sda4:


  1. Shrink /dev/sda3 to 6 GB.
  2. Duplicate /dev/sda3 to a new primary partition /dev/sda4.
  3. Remove the partition /dev/sda3.
  4. Change the type of the new partition /dev/sda4 to 12.


After that, my partition layout looks like this:



Disk /dev/sda: 160.0 GB, 160041885696 bytes
255 heads, 63 sectors/track, 19457 cylinders, total 312581808 sectors
Units = sectors of 1 * 512 = 512 bytes
Disk identifier: 0xee8a96be

Device Boot Start End Blocks Id System
/dev/sda1 * 2048 217909247 108953600 7 HPFS/NTFS
/dev/sda2 217909248 281638911 31864832 f W95 Ext'd (LBA)
/dev/sda4 299997810 312576704 6289447+ 12 Compaq diagnostics
/dev/sda5 217911296 281638911 31863808 7 HPFS/NTFS


I restarted my laptop. I was able to boot Lenovo's OneKey Recovery System using the following GRUB commands.



root (hd0,3)
chainloader +1
boot


Moving Lenovo's pre-installed Windows XP to a logical partition


To reserve primary partitions for other crucial operating systems, I moved the Windows XP partition to the extended partition. This technique is explained in this post. Roughly speaking:



  1. Shrink the Windows XP partition (/dev/sda1) by half using GParted. Space is created between /dev/sda1 (Windows XP, type 7) and /dev/sda2 (extended, type f).
  2. Enlarge the extended partition (/dev/sda2) to the left. A space is created at the beginning of the extended partition.
  3. Make a copy of Windows XP partition in the space of the extended partition. The new partition will become /dev/sda6.
  4. Fix the partition numbers with fdisk (switching partition numbers of /dev/sda6 and /dev/sda5). Previously, /dev/sda6 came before /dev/sda5.
  5. Fix BOOT.INI of the new XP partition (/dev/sda5).
  6. Boot the new XP partition (/dev/sda5) in safe mode using GRUB or SYSLINUX. Change drive letters in the registry.
  7. Reboot Windows XP (/dev/sda5) normally and remove the old partition (/dev/sda1).


Starting Windows XP with SYSLINUX


Recently, I switched to SYSLINUX. I created a 100MB primary partition (/dev/sda1) formatted with FAT16. Then, in Linux, I installed SYSLINUX.


syslinux /dev/sda1

A new MBR had to be installed, too.


install-mbr /dev/sda -v --drive 0x80 --enable +14

I copied chain.c32 from the SYSLINUX package to the SYSLINUX partition (/dev/sda1). Then, I copied NTLDR, NTDETECT.COM and BOOT.INI to the SYSLINUX partition (/dev/sda1), too.


I created a text file named SYSLINUX.CFG with the following instruction.


TIMEOUT 30
DEFAULT chain.c32 ntldr=NTLDR

This will let you boot Windows XP in a logical partition.



Installing Programs on Windows XP


I removed the following programs from factory-installed Windows XP of Lenovo S12:


  • Symantec Norton Internet Security
  • Diskeeper
  • Veriface

Then, I installed the following software:


  • Avast Anti-virus
  • MyDefrag


Installing Windows 7 Home Premium


I created a new NTFS partition (/dev/sda2) using GParted. I set its bootable flag and hid all other FAT and NTFS partitions. Then, I installed Windows 7 Home Premium.


After that, I moved the Windows 7 partition into the extended partition as /dev/sda6. Then, I removed the original partition (/dev/sda2). I rebooted with Windows 7 installation DVD, clicked the Repair option and opened the Command Prompt. I typed the following commands to make the new Windows 7 partition bootable.


C:
bcdedit /store C:\Boot\BCD /enum
bcdedit /store C:\Boot\BCD /set {bootmgr} device partition=C:
bcdedit /store C:\Boot\BCD /set {default} device partition=C:
bcdedit /store C:\Boot\BCD /set {default} osdevice partition=C:

Then, I added the following entry to SYSLINUX.CFG.


LABEL win7
KERNEL chain.c32
APPEND hd0 6

To make sure that SYSLINUX can boot Windows 7, I typed the following command at the boot: prompt.


chain.c32 hd0 6

Now I am able to boot Windows 7 from a logical partition.



Booting Windows 7 with Software SLIC emulation


There are many ways to emulate SLIC so that Windows 7 can be activated. In my case, I've set up a boot sequence like this.


MBR -> SYSLINUX -> GRUB -> Windows 7

GRUB was patched for the loadslic command which is crucial for Windows activation. The SYSLINUX command to invoke GRUB is like this.


chain.c32 grub=stage2 grubcfg=(hd0,0)/win7.cfg

Then, I created a file WIN7.CFG with the following contents.


hiddenmenu
timeout 0
default 0

title Windows 7 Home Premium
loadslic (hd0,0)/lenovocb-01.bin
chainloader (hd0,5)+1

About This Blog

KBlog logo This blog is about current events and issues concerning general population. Thanks for visiting the blog and posting your comments.

© Contents by KBlog

© Blogger template by Emporium Digital 2008

Followers

Total Pageviews

icon
Powered By Blogger