最近对数据的安全性有了兴趣,正好也想试试LVM2(logical volume manager逻辑卷管理), 就想着在硬盘划出来个分区,用dm-crypt加密这个分区,然后用LVM2管理这个分区划分几个逻辑分区:/,/home,swap,

最终的硬盘分区
/sda1    100 MB     /boot
/sda2    10 GB    # For Windows
/sda3    剩下所有空间用dm-crypt加密然后创建逻辑卷供Gentoo使用

首先是检查kernel,把Device mapper support和Crypt target support还有相应的编译进内核(为了方便没有编译成模块),然后备份好Gentoo和相应的数据,用liveCD启动重新划分分区

  1. 创建一个加密的分区,需要提供一个passphrase
    # cryptsetup -c aes-xts-plain -y -s 512 luksFormat /dev/sda3
     2. 挂载该分区, 会提示你输入刚才你创建的passphrase
    # cryptsetup luksOpen /dev/sda3 gentoo
    3. 用LVM2管理/dev/mapper/gentoo,并划分pv,vg,lv
    #pvcreate /dev/mapper/gentoo
    #vgcreate gentoo /dev/mapper/gentoo
    #lvcreate -L 10G -n root gentoo
    #lvcreate -L 2G -n swap gentoo
    #lvcreate -L 30G -n home gentoo
    4.生成initramfs文件,
    4.1创建一个如下层次的目录
    mkdir initram

    cd initram
    mkdir bin dev dev/mapper dev/vc etc newroot proc sys
    4.2复制如下的命令,并创建一些需要的链接
    cp /bin/busybox /sbin/cryptsetup /sbin/lvm.static /sbin/mdadm bin

    mv bin/lvm.static bin/lvm

    ln -s busybox bin/cat

    ln -s busybox bin/mount
    ln -s busybox bin/sh

    ln -s busybox bin/switch_root
    n -s busybox bin/umount

    ln -s busybox bin/sleep

    ln -s lvm bin/vgscan

    ln -s lvm bin/vgchange
    4.3复制相应的device
    cp -a /dev/console /dev/sda3 /dev/sda3 /dev/null /dev/urandom dev

    cp -a /dev/mapper/gentoo-root dev/mapper

    ln -s ../console dev/vc/0
    4.4创建init脚本

     #!/bin/sh
    mount -t proc proc /proc
    CMDLINE=cat /proc/cmdline
    mount -t sysfs sysfs /sys
    #wait a little to avoid trailing kernel output
    sleep 3
    #dm-crypt
    /bin/cryptsetup luksOpen /dev/sda3 gentoo
    #lvm
    /bin/vgchange -ay gentoo
    #root filesystem
    mount -r /dev/mapper/gentoo-root /newroot
    #unmount pseudo FS
    umount /sys
    umount /proc
    #root switch
    exec /bin/busybox switch_root /newroot /sbin/init ${CMDLINE}

    4.5执行如下命令来生成initramfs文件
    chmod a+x initrd
    find . | cpio --quiet -o -H newc | gzip -9 > /boot/initramfs

    4.6修改如grub.conf,添加initrd条目
    title Gentoo Linux AMD64
    root (hd0,0)
    kernel /boot/kernel video=uvesafb:1440x900-32,mtrr:3,ywrap splash=silent,fadein,theme:livecd-2007.0 console=tty1
    initrd /boot/initramfs
    以上参考了Gentoo Wiki里的Root filesystem over LVM2, DM-Crypt and RAID

    5.格式化并挂载lvm2创建的pv
    mount /dev/mapper/gentoo-root      /mnt/gentoo
    mount /dev/mapper/gentoo-home    /mnt/gentoo/home

    6. 恢复之前备份的Gentoo到/mnt/gentoo
    tar zvjfp gentoo.tar.bz2 -C /mnt/gentoo

    7. 修改/mnt/etc/fstab文件,更改相应的device为lvm2创建的pv

    重新启动电脑,没有问题的话会在引导kernel的时候提示你输入/devsda3的加密passphrase,如果正确就会像正常引导系统可以正常使用了,使用了dm-crypt加密之后可以保护电脑或者硬盘丢失后的数据安全(不能保证系统启动后的数据安全)