物理サーバをコンテナ化 (OpenVzの例)

こちらも[物理サーバーのCentOS5を停止せずに強引にイメージ化 - Qiita](http://qiita.com/tukiyo3/items/87a61e1435cc1bc86d14)

以下で成功

* Debian4 i386
* Debian5 i386
* CentOS5 i386
* CentOS6 x86_64
* Ubuntu 14.04_64

## 参考

* [Physical to container - OpenVZ Linux Containers Wiki](http://wiki.openvz.org/Physical_to_container)

# 移行したいサーバにて実施

* qcow2イメージの場合[KVM - qcow2イメージのマウント - Qiita](http://qiita.com/tukiyo3/items/afc601ea72c546edb990)

```bash:excludes.excl
.bash_history
/dev/*
/mnt/*
/tmp/*
/proc/*
/sys/*
/usr/src/*
/run/*
/var/lib/docker/*
```

を用意し、

```bash:無圧縮
tar --numeric-owner -cpf /mnt/mysystem.tar / -X excludes.excl
```

* /tmp/mysystem.tar を Proxmox にscp。


# Proxmoxにて実施

```bash:
mkdir /var/lib/vz/private/233
mkdir /var/lib/vz/root/233
cp /etc/vz/conf/{100,233}.conf 
```

```diff:/etc/vz/conf/233.conf
- VE_ROOT="/var/lib/vz/root/100"
- VE_PRIVATE="/var/lib/vz/private/100"
+ VE_ROOT="/var/lib/vz/root/233"
+ VE_PRIVATE="/var/lib/vz/private/233"
```

```bash:
cd /var/lib/vz/private/233
tar jxf mysystem.tar.bz2
mkdir proc
```

----

# コンテナ用修正 (CentOS)

* Ubuntuは下に記載

## 設定ファイル修正

```bash:etc/inittab
sed -i -e 's@^[0-9].*getty.*tty@#&@g' etc/inittab

echo "1:2345:respawn:/sbin/mingetty tty1" >> etc/inittab
```

```bash:etc/fstab
mv etc/fstab{,.old}
egrep '/dev/pts|/dev/shm|/proc|/sys' etc/fstab.old > etc/fstab
```

```bash:
chroot .
```

```bash:/dev
mknod --mode 666 /dev/ptmx c 5 2
mkdir /dev/pts
/sbin/MAKEDEV -d /dev ttyp ptyp

rm -f /dev/null
mknod --mode 666 /dev/null c 1 3

mknod --mode 444 /dev/urandom c 1 9
```

```bash:udev
mkdir /etc/udev/devices

/sbin/MAKEDEV -d /dev {p,t}ty{a,p}{0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f} console core full kmem kmsg mem null port ptmx random urandom zero ram0

/sbin/MAKEDEV -d /etc/udev/devices {p,t}ty{a,p}{0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f} console core full kmem kmsg mem null port ptmx random urandom zero ram0
```

## 不要なサービス停止

```bash:
for s in \
  acpid \
  amd \
  checkfs \
  checkroot \
  clock \
  consolefont \
  hdparm \
  klogd \
  keymaps \
  kudzu \
  lm_sensors \
  microcodectl \
  netplugd \
  irqbalance \
  auditd \
  lvm2-monitor \
  ntp
do
  /sbin/chkconfig $s off
done
```

## OpenVz側でネットワーク設定を行うため一旦削除

```bash:
rm /etc/sysconfig/network-scripts/ifcfg-bond*
rm /etc/sysconfig/network-scripts/ifcfg-eth*
```

## OSTEMPLATE値を修正

* [OpenVZ - ネットワーク設定がされない場合の対処法 - Qiita](http://qiita.com/tukiyo3/items/ba2bde32a51d5ff7a177)

## OpenVzのコンテナからnfsマウントしたい

* [NFS - OpenVZ Linux Containers Wiki](https://openvz.org/NFS)

```diff:/etc/pve/openvz/233.conf
+ FEATURES="nfs:on"
```

## OpenVzのコンテナでnfsdを動かしたい

```diff:/etc/pve/openvz/233.conf
+ FEATURES="nfsd:on"
```

# ネットワーク設定例

```bash:/etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE="eth0"
ONBOOT=yes
NETBOOT=yes
IPV6INIT=no
TYPE=Ethernet
NAME="eth0"

BOOTPROTO=static
DNS1="8.8.8.8"
DNS2="8.8.4.4"
DOMAIN=local
IPADDR=192.168.33.11
NETMASK=255.255.255.0
GATEWAY=192.168.33.1
```

```bash:/etc/sysconfig/network-scripts/ifcfg-eth1
DEVICE="eth1"
ONBOOT=yes
NETBOOT=yes
IPV6INIT=no
TYPE=Ethernet
NAME="eth1"

BOOTPROTO=static
IPADDR=192.168.0.11
NETMASK=255.255.255.0
```


## その他

* [Linux - OSのオンラインバックアップ - Qiita](http://qiita.com/tukiyo3/items/b45edbf7fae2bb81a0f3)
* [OpenVzからdockerへのデータ移行が簡単だった - Qiita](http://qiita.com/tukiyo3/items/d9e00f232f3d8d8bcb31)
* [OpenVZ テンプレートの作成 - Qiita](http://qiita.com/yoshi-naoyuki/items/ab70d8653dc02b4a35bd)

# Debianの場合

## サービス停止

```bash:debianの場合
update-rc.d -f サービス名 remove
```

## 事前にtemplateからコンテナ作成

```bash:
vzctl stop 100
mv /var/lib/vz/private/100{,.bak}
mv ./bkup /var/lib/vz/private/100 vzctl start 100
vzctl enter 100
```

----

# コンテナ用修正 (Ubuntu)

```bash:
mkdir dev tmp proc mnt sys
chmod 777 tmp
```

> resolvconf: Error: /run/resolvconf/interface either does not exist or is not a directory

```bash:対処
# crontab -e
@reboot echo "nameserver 8.8.8.8" > /etc/resolv.conf
```

----

# df -h の結果がホストのHDDを表示する場合

Quotaがおかしい。

```bash:ホストのHDDの容量が表示されている！！
root@container1:/# df -h .
Filesystem      Size  Used Avail Use% Mounted on
/dev/simfs      917G  379G  492G  44% /
```

```bash:Quota修正手順
vzctl stop 391
vzquota off 391 -f
vzquota drop 391
vzquota start 391
```

```bash:治った
root@container1:/# df -h .
Filesystem      Size  Used Avail Use% Mounted on
/dev/simfs      330G  260G   71G  79% /
```