虚拟机中archlinux尝试LVM分区

archlinux

 

虚拟机中archlinux尝试LVM分区

Created 星期六 26 一月 2013

本来是打算玩一下 LFS 的,总是用发行版(还几年 ubuntu——入门版 linux ),搞得自己太业余了点(不过,LFS也没多专业,好吧)。但是呢官网 LFS 的 Live CD 是比较老的,而且不更新了。于是乎,看来使用虚拟机更好玩一点,如果是在主机上分区出了乱子就损失大了。那么试试 archlinux 吧,不能总用 ubuntu 吧。想看详细过程的直接拉到后边吧。

第一次尝试 archlinux 非常顺利,因为 wiki 实在详细,按部就班就是了。除了那个 nat 网络有点问题(第3次尝试的时候,虚拟机的网卡调成 virtio-net,照 wiki 再搞终于好了),每次总是需要手动 dhcpcd 一下。但是我的分区没有搞得太好,总不能我的 LFS 放在 archlinux 分区内部吧,最好还是有单独的分区好一点,使用的 mbr 分区表。

于是我想重装 archlinux,第二次当然不甘心还是老样子安装了,试试 LVM 分区吧。没想到把/boot安装到 lvm 有一点小蹊跷,最后的 grub2 总是安装不上 “core.img is unusually large”,第三次重装还是这样。

搞了大半夜才搞明白原来grub安装时有一个几十kb大小的 core.img 放在 MBR 和第一个分区之间的数百kb内的(一般的分区工具默认的空间都非常小,除非你自己设定第一个分区从 2m开始,用 parted 方便一点,单位最好 unit compact)。但是由于那个 core.img 的 lvm 分区载入支持模块比较大,于是导致那一点空间放不下新的加了模块的“大”core.img 了,最后 grub-install 抱怨你的 core.img is unusually large,没有空间放置。

本来可以使用 parted 所有分区向后移动 2M 就可以了,但是为了一次成功,还是来第四次重装吧,毕竟移动分区这样的操作很容易出问题。这一次分区,第一个分区 使用 parted 空下2M开始,其他的 LFS 分区,swap 分区(为了照顾 LFS 编译)照旧。OK,果然grub-install Install finished no error 了。但是重启问题又来了 grub 找不到 分区 WTF...

肯定是 grub 的 cfg 没设置,但是直接自己改太麻烦了。再找找 wiki 看有没有 grub 设置。没想到在 grub 页上试了试 grub2 替代 grub 中的一句命令生成了一下cfg就OK了,因为里边看到了 insmod lmv 模块,还有 uuid的分区查找也已经改成了 /dev/mapper/VG_Arch/LV_Arch 了。重启,一切OK!

需要用到的 wik i分在4个不同页面。

总结:RTF wiki pages carefully!!

然后安心的 LFS 吧。

下边是主要过程:

进入镜像系统

下载 archlinux 镜像。

打开 virtualbox 设置硬盘大小。网络选 nat ,网卡驱动选 virtio-net ,导入 archlinux 镜像。

选择第一项进入镜像系统。

系统自动运行了 dhcpcd,所以 ping -c 3 www.baidu.com 是 ping 得通的,如果虚拟机宿主机可以上网的话。

分区

#使用 parted 分区
parted

#设置单位
unit compact

#分第一个区 /dev/sda1 给 Arch 的 lvm 卷,从 2m 开始,大小 10G
mkpart
primary
2m
10242m
q
#分第二个区 /dev/sda2,给 LFS 的 lvm 卷,这次使用 cfdisk,这样方便直观一点,大小5G;最后给 swap ,Type 为82,分区大小 2G。Write 写入分区表,Quit 退出。注意 cfdisk 中,前边显示空了2m,不要管它,后边安装 grub2 时,core.img 就是放在那里的,不需要分区。

lvm分区

#加载 lvm 需要的 module
modprobe dm-mod

#创建物理卷(PV)
pvcreate /dev/sda1
pvcreate /dev/sda2
pvdisplay

#创建卷组(VG),VG_Arch 只有一块物理卷(PV),VG_LFS 也只有一块pv
vgcreate VG /dev/sda1
Vgcreate VG /dev/sda2
vgdisplay

格式化lvm分区

mkfs.ext4 /dev/mapper/VG_Arch/LV_Arch
mkfs.ext4 /dev/mapper/VG_LFS/LV_LFS

挂载 LV_Arch 到 /mnt,安装 arch

mount /dev/mapper/VG_Arch/LV_Arch /mnt
##剩下的步骤一直到 grub 安装前都是 wiki 的
pacman -Syy
#安装基本系统
pactstrap /mnt base base-devel
#生成 fstab
genfstab -U -p /mnt | sed 's/rw,relatime,data=ordered/defaults,relatime/' >> /mnt/etc/fstab
#Chroot 到新系统
arch-chroot /mnt

配置系统

#Locale

vi /etc/locale.gen
去除掉一下注释
en_US.UTF-8 UTF-8
zh_CN.GB18030 GB18030
zh_CN.GBK GBK
zh_CN.UTF-8 UTF-8
zh_CN GB2312

#然后运行
locale-gen

vi /etc/locale.conf
#添加如下
LANG=zh_CN.UTF-8
LC_TIME=en_GB.UTF-8

终端字体和键盘映射

#编辑/etc/vconsole.conf.
#添加
KEYMAP=us
FONT=

时区

#编辑文件 /etc/timezone.示例:
Asia/Shanghai

#做个链接
ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

硬件时间

hwclock --systohc --utc

内核模块

#编辑 /etc/modules-load.d/virtio-net.conf
#添加如下

# Load virtio-net.ko at boot
virtio-net

主机名

#myhostname 是你的主机名字
echo myhostname > /etc/hostname

配置网络

#因为是虚拟机,直接动态IP得了省事
systemctl enable dhcpcd@eth0.service

ramdisk 环境

#这玩意儿是什么?wiki 说当系统启动的时候 initramfs 仅需要包含读取根文件系统的必要文件。但是如本文需要使用lvm或者加密分区这样的文件系统,就需要特殊设定模块了。

mkinitcpio 的 lvm 设定

#编辑/etc/mkinitcpio/.conf,在 HOOKS=“...”那一行中加入 lvm2,注意这个 HOOKS 里边模块的顺序就是加载顺序,lvm2 必须在filesystems 前边。
HOOKS="base udev ... lvm2 filesystems"
#还有MODULES=“”这一行
MODULES="dm_mod"

#保存后运行
mkinitcpio -p linux

设置 Root 密码并创建一般用户

#用 passwd 设置一个root密码:
passwd

安装配置启动加载器

pacman -Syy
pacman -S grub-bios
#grub-install --modules=lvm --target=i386-pc --recheck /dev/sda
# cp /usr/share/locale/en\@quot/LC_MESSAGES/grub.mo /boot/grub/locale/en.mo

grub-mkconfig -o /boot/grub/grub.cfg

重启,应该没问题了。

 

 

posted @ 2013-01-26 19:06  Z.X.L  阅读(1004)  评论(0编辑  收藏  举报