/ sfoolish_post / linux rootfs.img 文件的使用

linux rootfs.img 文件的使用

2013-08-29 posted in [linux]

文中提到的 rootfs.img 指代 cloudxy 提供的domU-x8664-FS.imgdomU-32bit-FS.img

rootfs.img 的挂载与卸载

方法一

## 挂载
$ mkdir rootfs
$ sudo losetup /dev/loop0 domU-x86_64-FS.img
$ sudo mount /dev/loop0 rootfs

## 卸载
$ sudo umount rootfs
$ sudo losetup -d /dev/loop0
$ rm -rf rootfs

方法二

## 挂载
$ mkdir rootfs
$ sudo mount -o loop domU-x86_64-FS.img rootfs/

## 卸载
$ sudo umount rootfs
$ rm -rf rootfs

domU-x86_64-FS.img 使用是遇到的问题与处理

下文中需要对文件系统的修改,都需要按照上文提到的方法进行挂载卸载操作,文件系统默认都是挂载到 rootfs 下。

echo 无法修改 rootfs 中的文件

在使用 domU-x86_64-FS.img 时,遇到 echo 无法写文件的问题。网上查了一下,需要通过命令:set +o noclobber 进行设置。因为 /etc/profile 中有这么一行: set -o noclobber 。 noclobber 这个选项,告诉 bash 在重定向的时候,不要覆盖已有文件。在设定了 noclobber 之后,如何强制覆盖现有文件 echo hello >| abc

lkvm 运行异常打印处理

使用默认的 domU-x86_64-FS.img ,lkvm 系统启动后,会一直有如下打印:

```
    can't open /dev/hvc0: No such file or directory
```

将文件系统做如下修改:

## 查找配置文件
$ cd rootfs/etc/
$ sudo grep -rn hvc ./
```
    ./inittab:30:hvc0::respawn:/sbin/getty 38400 hvc0
    ./securetty:20:hvc0
```

## 修改配置文件
$ sudo vim inittab +30
```
    # hvc0::respawn:/sbin/getty 38400 hvc0    # 直接注释掉
```

默认挂载 nfs 文件系统

## 编辑 domU-x86_64-FS.img 配置脚本
vim /etc/profile.d/rootfs_config.sh
```
    ifconfig eth0 192.168.33.2 netmask 255.255.255.0
    ## 判读 /mnt/tools 是否为空,避免重复挂载
    if [[ "`ls -A /mnt/tools`" = "" ]]; then
        mount -t nfs -o nolock 192.168.33.1:/home/liang/prj/kvm/tools /mnt/tools
    fi
    export PATH=$PATH:/mnt/tools/bin
```

用户登入的时候,会执行 /etc/profile/etc/profile 最后有如下语句,因此,上面创建的脚本会被自动执行。

```
    for i in /etc/profile.d/*.sh; do
        [[ -f $i ]] && . $i  
```

domU-32bit-FS.img ssh 登陆异常处理

现象描述

## 运行 lkvm
$ sudo ./lkvm  run -d domU-32bit-FS.img --network virtio

## 设置虚拟机ip
# ifconfig eth0 192.168.33.2 netmask 255.255.255.0

## 主机登陆虚拟机异常
$ ssh root@192.168.33.2
```
    root@192.168.33.2's password: 
    PTY allocation request failed on channel 0
    shell request failed on channel 0
```

google 找到答案: PTY allocation request failed on channel 0

处理方法一

## ssh 登陆后开启交互式 bash
$ ssh root@192.168.33.2 "/bin/bash -i"
```
    root@192.168.33.2's password: 
    bash-3.2# pwd
    /root
    bash-3.2# 
```

处理方法二

## 虚拟机设置 /dev/pts
# mkdir /dev/pts 
# mount -t devpts devpts /dev/pts
$ ssh root@192.168.33.2
```
    root@192.168.33.2's password: 
    % 
```

– EOF –

sfoolish

About

sfoolish

爱生活,爱代码,爱折腾。。。