前些天,调试文件系统时,失手把ubuntu系统的etc目录给删了(慎用rm的-fr选项)。这下悲剧了,还原不回来,好在系统运行还正常。这些天空闲下来了,琢磨着修复这个问题。经过悲剧般的折腾,系统彻底挂了,系统和分区信息都出了问题(至少我这么认为,系统打死都起不来,唉水平太差)。放弃之余,忽然意识到修改后的内核还没有备份,而且庞大的工具链也没有备份。重做工具链和内核费工费时,于是决定试着把文件恢复出来。
步骤如下:
介绍过程之前强烈建议使用linux的记得备份etc等文件。
1、ubuntu安装时使用了lvm的文件系统,因此在其他系统中加载损坏的系统分区(用虚拟机的好处),可以认出分区,但是却不能正确加载,Google得到以下方法。
Mounting a Linux LVM volume
You do not mount a partition of type "Linux LVM" the same way you mount a partition using a standard Linux file system (e.g. ext2, ext3).

如果连root都不能写的话,就不是权限的问题。
首先确定,hda2是不是ntfs或者什么新型的分区。
如果是的话,确实是不能写入的,ntfs可以打开写入功能,但是相当危险,绝对不推荐。
如果不是,你只要在挂上以后执行:
mount -o remount,rw /mnt/e
或者挂载的时候就执行:
mount -o rw /dev/hda2 /mnt/e
就可以了。

# fdisk -l /dev/hda

Disk /dev/hda: 160.0 GB, 160041885696 bytes
255 heads, 63 sectors/track, 19457 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

  Device Boot      Start        End      Blocks  Id  System
/dev/hda1  *          1          13      104391  83  Linux
/dev/hda2              14      19457  156183930  8e  Linux LVM

# mount /dev/hda2 /tmp/mnt
mount: /dev/hda2 already mounted or /tmp/mnt busy

First, let's determine the volume group containing the physical volume /dev/hda2.

# pvs
  PV        VG        Fmt  Attr PSize  PFree
  /dev/hda2  VolGroup01 lvm2 a-  148.94G 32.00M
  /dev/hdb2  VolGroup00 lvm2 a-  114.94G 96.00M

Next, let's list the logical volumes in 百度数据恢复VolGroup01.


# lvdisplay /dev/VolGroup01
  --- Logical volume ---
  LV Name                /dev/VolGroup01/LogVol00
  VG Name                VolGroup01
  LV UUID                zOQogm-G8I7-a4WC-T7KI-AhWe-Ex3Y-JVzFcR
  LV Write Access        read/write
  LV Status              available
  # open                0
  LV Size                146.97 GB
  Current LE            4703
  Segments              1
  Allocation            inherit
  Read ahead sectors    0
  Block device          253:2
 
  --- Logical volume ---
  LV Name                /dev/VolGroup01/LogVol01
  VG Name                VolGroup01
  LV UUID                araUBI-4eer-uh5L-Dvnr-3bI6-4gYg-APgYy2
  LV Write Access        read/write
  LV Status              available
  # open                0
  LV Size                1.94 GB
  Current LE            62
  Segments              1
  Allocation            inherit
  Read ahead sectors    0
  Block device          253:3

The logical volume I would like to "mount" (in purely the computing-related sense) is/dev/VolGroup01/LogVol00. The other logical volume is a swap partition.

# mount /dev/VolGroup01/LogVol00 /tmp/mnt
提示如果你使用clone的系统,那就意味着当前clone的系统分区名与原系统相同,即使mount上,其实访问到的仍是当前clone系统的分区。因此,最好有个livecd或者不同名的系统,或者把分区名改了(不知道怎么做)。
2、大问题,我把文件都放在home下面了,而ubuntu对这个私有部分做了加密.因此在用户名目录下看到的是Access-Your-Private-Data.desktop和。
解密并恢复文件夹如下文描述(重点部分用蓝标出,红为命令)
恢复被ecryptfs加密的主目录
ubuntu9.10开始,全新安装时多了一个登入时需要密码并加密我的主目录的选项,简单的说就是把整个主目录都加密了,如果电脑丢失或者重新安装系统时,没有关键密码此主
目录则永远无法恢复,数据则可保无忧。不管有没有用,用各种方法试验恢复主目录时总是遇到各种各样的问题,其中最好的情况是目录恢复了,但其中的文件名称是乱码,根本无法解读,在网上了很久的资料,最后才发现原因,不敢独享,贴在此处:

如果安装时选择了加密主目录,登入系统后要做的第一件事情就是保存好密钥,在终端中输入:
ecryptfs-unwrap-passphrase
则可以得到一串长长的字符串,保存在安全的地方,这是关键;
假设准备重新安装系统,有两种方式可保数据无忧,第一种是在安装前把已经被加密的主目录中需要保存的数据文件拷贝出来——不准打人、扔鸡蛋;第二种则是这篇文章要讲的东西。
仔细检查安装的系统,你会发现,被加密的整个主目录实际上只是一个被挂载的空目录,里面只有四个文件,真正的文件实际上存放在 /home/.ecryptfs/你的主目录名/.Private中,是加密存放的,所以重新安装系统时,这个目录一定不能被删除,否则神仙也救不了你。

假设已经重新安装了系统,则进行如下操作:
确认先前的/home/.ecryptfs/被加密的目录名/.Private 里面的文件在不在,如果不在,不用继续了
如果先前忘记保存的密钥串或者密钥串丢了,检查
/home/.ecryptfs/被加密的目录名/.ecryptfs/wrapped-passphrase文件在不在,如果不在,也不用继续了,如果在,
安装ecryptfs
sudo aptutide install ecryptfs-utils
如果已经安装,此步略。
在终端中输入:
sudo ecryptfs-unwrap-passphrase wrapped-passphrase 不用说在哪运行了吧,就是在旧的那个wrapped-passphrase文件所在的目录里,你想将这个文件拷贝出来操作也随便你
Passphrase: 输入以前主目录被加密的用户密码
得到密钥串,保存起来

在现在的主目录下新建一个目录restore
在终端输入:
sudo ecryptfs-add-passphrase  –fnek 注:–fnek 两个 -,即“- -fnek”,还有,如果这一步不sudo,同样会出错
Passphrase:输入先前保存在安全位置的那一长串字符串
Inserted auth tok with sig [6ceb75c6208b3c78] into the user session keyring
Inserted auth tok with sig [01bda2c2fc25d863] into the user session keyring
记住方括号中的两串字符串,后面要用到。其中第二串是解密文件名用的
注:这一步相当重要,很多时候就是因为这一步没有做,没有将先前保存的密钥导入密钥环中(我是这么理解的),结果要不恢复出错,要不恢复出来的文件名称、目录名称全部是看不懂的东东。在终端输入:
sudo mount -t ecryptfs /home/.ecryptfs/以前那个被加密主目录名称/.Private /restore
Passphrase:同样输入先前保存的字符串
Select cipher:
1) aes: blocksize = 16; min keysize = 16; max keysize = 32 (not loaded)
2) blowfish: blocksize = 16; min keysize = 16; max keysize = 32 (not loaded)
3) des3_ede: blocksize = 8; min keysize = 24; max keysize = 24 (not loaded)
4) twofish: blocksize = 16; min keysize = 16; max keysize = 32 (not loaded)
5) cast6: blocksize = 16; min keysize = 16; max keysize = 32 (not loaded)
6) cast5: blocksize = 8; min keysize = 5; max keysize = 16 (not loaded)
Selection [aes]:直接回车
Select key bytes:
1) 16
2) 32
3) 24
Selection [16]:直接回车
Enable plaintext passthrough (y/n) [n]:直接回车
Enable filename encryption (y/n) [n]: y 这一步很关键,因为加密主目录时文件名称是默认加密的,一定要回答y
Filname Encryption Key (FNEK) Signature [6ceb75c6208b3c78]: 01bda2c2fc25d863 将前
面提到的那两串字符串中的第二串输入
Attempting to mount with the following options:
ecryptfs_unlink_sigs
ecryptfs_fnek_sig=01bda2c2fc25d863
ecryptfs_key_bytes=16
ecryptfs_cipher=aes
ecryptfs_sig=6ceb75c6208b3c78
WARNING: Based on the contents of [/root/.],
it looks like you have never mounted with this key
before. This could mean that you have typed your
passphrase wrong.
Would you like to proceed with the mount (yes/no)? yes 你从未用这个密码挂载过,是否继续?
Would you like to append sig [86a764759a1f7625] to
[/root/.]
in order to avoid this warning in the future (yes/no)? no 是否将此次挂载信息记录下来以免下次报警?
Not adding sig to user sig cache file; continuing with mount.

到此,去访问主目录中的restore文件夹,应该不会出现问题了。把要恢复的文件拷贝出来,不然下次开机想再进去又要来一次。如果你没有在最开始那一步进行
ecryptfs-add-passphrase –fnek
的操作的话,应该会出现以下的出错信息:
Error mounting eCryptfs: [-2] No such file or directory
目录挂载失败。莫名其妙。不到文件?就是这个问题困扰了我很长一段时间,总是挂载失败。
Mount分区前必须执行一次ecryptfs-add-passphrase –fnek
这是比较简单的方式,对于ecryptfs复杂运用,欢迎和我讨论。
本文用菊子曰发布
转载请注明来源:LiZhenyu.Com五百年- 《恢复被ecryptfs加密的主目录》
本文链接地址:blog.lizhenyu/restore-encrypted-home-directory-by-ecryptfs.html

ok,这样一般情况下就能把文件恢复出来了