Editing Physical to container
Warning: You are not logged in. Your IP address will be publicly visible if you make any edits. If you log in or create an account, your edits will be attributed to your username, along with other benefits.
The edit can be undone.
Please check the comparison below to verify that this is what you want to do, and then save the changes below to finish undoing the edit.
Latest revision | Your text | ||
Line 1: | Line 1: | ||
− | A rough description of how to migrate existing physical server into a [[ | + | A rough description of how to migrate existing physical server into a [[VE]]. |
− | == | + | == Prepare a new “empty” VE == |
+ | For OpenVZ this would mean the following (assume you chose VE ID of 123): | ||
− | + | mkdir /vz/root/123 /vz/private/123 | |
+ | cat /etc/vz/conf/ve-vps.basic.conf-sample > /etc/vz/conf/123.conf | ||
− | |||
− | + | == Preparing to migrate == | |
− | + | Stop most services on a machine to be migrated. “Most” means services such as web server, databases and the like — so you will not lose your data. Just leave the bare minimum (including ssh daemon). | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
== Copying the data == | == Copying the data == | ||
− | Copy all your data from the machine to an OpenVZ box. Say you'll be using | + | Copy all your data from the machine to an OpenVZ box. Say you'll be using VE with ID of 123, then all the data should be placed to <code>/vz/private/123/</code> directory (so there will be directories such as <code>/vz/private/123/bin</code>, <code>etc</code>, <code>var</code> and so on). This could be done in several ways: |
=== rsync === | === rsync === | ||
− | + | rsync example (run from the new HN): | |
− | + | rsync -arvpz --numeric-ids --exclude dev --exclude proc --exclude tmp -e "ssh -l root@a.b.c.d" root@a.b.c.d:/ /vz/private/123/ | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | rsync - | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
'''Advantage:''' Your system doesn't really go down. | '''Advantage:''' Your system doesn't really go down. | ||
− | |||
− | |||
=== Live CD === | === Live CD === | ||
Line 68: | Line 37: | ||
/usr/src/* | /usr/src/* | ||
− | Then create the tar. But remember, when the system is 'not' using udev, you have to look into /proc/ after creating your | + | Then create the tar. But remember, when the system is 'not' using udev, you have to look into /proc/ after creating your VE because some devices might not exist. (/dev/ptmx or others) |
− | # tar | + | # tar cjpf /tmp/mysystem.tar.bz2 / -X /tmp/excludes.excl |
Naturally, you can only do this when the critical services (MySQL, apache, ..) are stopped and your /tmp filesystem is big enough to contain your tar. | Naturally, you can only do this when the critical services (MySQL, apache, ..) are stopped and your /tmp filesystem is big enough to contain your tar. | ||
Line 76: | Line 45: | ||
'''Advantage:''' You don't need to boot from a live cd, so your system doesn't really go down. | '''Advantage:''' You don't need to boot from a live cd, so your system doesn't really go down. | ||
− | == Setting | + | == Setting VE parameters == |
=== OSTEMPLATE === | === OSTEMPLATE === | ||
You have to add <code>OSTEMPLATE=xxx</code> line to <code>/etc/vz/conf/123.conf</code> file, where <code>xxx</code> would be distribution name (like <code>debian-3.0</code>) for vzctl to be able to make changes specific for this distribution. | You have to add <code>OSTEMPLATE=xxx</code> line to <code>/etc/vz/conf/123.conf</code> file, where <code>xxx</code> would be distribution name (like <code>debian-3.0</code>) for vzctl to be able to make changes specific for this distribution. | ||
− | |||
− | |||
=== IP address(es) === | === IP address(es) === | ||
− | Also, you have to supply an IP for a new | + | Also, you have to supply an IP for a new VE: |
vzctl set 123 --ipadd x.x.x.x --save | vzctl set 123 --ipadd x.x.x.x --save | ||
Line 95: | Line 62: | ||
== Making adjustments == | == Making adjustments == | ||
− | Since | + | Since VE is a bit different to a real physical server, you have to edit some files inside your new VE. |
=== /etc/inittab === | === /etc/inittab === | ||
− | A | + | A VE does not have real ttys, so you have to disable getty in <code>/etc/inittab</code> (i. e. <code>/vz/private/123/etc/inittab</code>). |
− | |||
− | sed -i -e ' | + | sed -i -e '/getty/d' /vz/private/123/etc/inittab |
=== /etc/mtab === | === /etc/mtab === | ||
Link <code>/etc/mtab</code> to <code>/proc/mounts</code>, for <code>df</code> to work properly: | Link <code>/etc/mtab</code> to <code>/proc/mounts</code>, for <code>df</code> to work properly: | ||
− | ln - | + | rm -f /vz/private/123/etc/mtab |
+ | ln -s /proc/mounts /vz/private/123/etc/mtab | ||
− | {{out|The problem here is | + | {{out|The problem here is VE's root filesystem (<code>/</code>) is mounted not from the VE itself, but rather from the host system. That leaves <code>/etc/mtab</code> in VE without a record for <code>/</code> being mounted, thus df doesn't show it. By linking <code>/etc/mtab → /proc/mounts</code> we make sure /etc/mtab shows what is really mounted in a VE. |
Sure this is not the only way to fix df; you can just manually add a line to <code>/etc/mtab</code> telling <code>/</code> is mounted, and make sure this line will be there after a reboot.}} | Sure this is not the only way to fix df; you can just manually add a line to <code>/etc/mtab</code> telling <code>/</code> is mounted, and make sure this line will be there after a reboot.}} | ||
=== /etc/fstab === | === /etc/fstab === | ||
− | Since you do not have any real disk partitions in a | + | Since you do not have any real disk partitions in a VE, /etc/fstab (or most part of it) is no longer needed. Empty it (excluding the line for /dev/pts): |
− | |||
− | |||
− | |||
− | |||
− | You can also mount a devpts in a running (but not fully functional) | + | cp /vz/private/123/etc/fstab /vz/private/123/etc/fstab.old |
+ | grep devpts /vz/private/123/etc/fstab.old > /vz/private/123/etc/fstab | ||
+ | |||
+ | You can also mount a devpts in a running (but not fully functional) VE: | ||
vzctl exec 123 mount -t devpts none /dev/pts | vzctl exec 123 mount -t devpts none /dev/pts | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
=== /dev === | === /dev === | ||
− | |||
==== Introduction: static /dev ==== | ==== Introduction: static /dev ==== | ||
− | In order for | + | In order for VE to work, some nodes should be present in VE's <code>/dev</code><code></code>. For modern distributions, udev is taking care of it. For a variety of reasons udev doesn't make much sense in a VE, so the best thing to do is to disable udev and create needed device nodes manually. |
Note that in some distributions <code>/dev</code> is mounted on <code>tmpfs</code> — this will not work in case of static <code>/dev</code>. So what you need to do is find out where <code>/dev</code> is being mounted on <code>tmpfs</code> and remove this. This is highly distribution-dependent; please add info for your distro here. | Note that in some distributions <code>/dev</code> is mounted on <code>tmpfs</code> — this will not work in case of static <code>/dev</code>. So what you need to do is find out where <code>/dev</code> is being mounted on <code>tmpfs</code> and remove this. This is highly distribution-dependent; please add info for your distro here. | ||
− | |||
− | |||
After you made sure your <code>/dev</code> is static, populate it with needed device nodes. | After you made sure your <code>/dev</code> is static, populate it with needed device nodes. | ||
Please pay attention to the access permissions of the device files being created: a default file mode for newly created files is affected by <code>umask</code> ([[w:umask]]). You can use --mode option for <code>mknod</code> to set the desired permissions. | Please pay attention to the access permissions of the device files being created: a default file mode for newly created files is affected by <code>umask</code> ([[w:umask]]). You can use --mode option for <code>mknod</code> to set the desired permissions. | ||
− | |||
− | |||
==== tty device nodes ==== | ==== tty device nodes ==== | ||
− | In order for vzctl enter to work, a | + | In order for vzctl enter to work, a VE needs to have some entries in /dev. This can either be /dev/ttyp* and /dev/ptyp*, or /dev/ptmx and mounted /dev/pts. |
===== /dev/ptmx ===== | ===== /dev/ptmx ===== | ||
Line 178: | Line 130: | ||
Check that /dev/urandom exists. If it does not, create with: | Check that /dev/urandom exists. If it does not, create with: | ||
mknod --mode 444 /vz/private/123/dev/urandom c 1 9 | mknod --mode 444 /vz/private/123/dev/urandom c 1 9 | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
===/proc=== | ===/proc=== | ||
− | |||
− | |||
Make sure the /proc directory exists: | Make sure the /proc directory exists: | ||
ls -la /vz/private/123/ | grep proc | ls -la /vz/private/123/ | grep proc | ||
Line 196: | Line 140: | ||
=== /etc/init.d services === | === /etc/init.d services === | ||
− | Some system services can (or in some cases should) be disabled | + | Some system services can (or in some cases should) be disabled. A few good candidates are: |
* acpid, amd (not needed) | * acpid, amd (not needed) | ||
− | * checkfs, checkroot (no filesystem checking is required in | + | * checkfs, checkroot (no filesystem checking is required in VE) |
− | * clock (no clock setting is required/allowed in | + | * clock (no clock setting is required/allowed in VE) |
− | * consolefont ( | + | * consolefont (VE does not have a console) |
− | * hdparm ( | + | * hdparm (VE does not have real hard drives) |
* klogd (unless you use iptables to LOG some packets) | * klogd (unless you use iptables to LOG some packets) | ||
− | * keymaps ( | + | * keymaps (VE does not have a real keyboard) |
− | * kudzu ( | + | * kudzu (VE does not have real hardware) |
− | * lm_sensors ( | + | * lm_sensors (VE does not have access to hardware sensors) |
− | * microcodectl ( | + | * microcodectl (VE can not update CPU microcode) |
− | * netplugd ( | + | * netplugd (VE does not have real Ethernet device) |
− | |||
− | |||
− | |||
− | |||
To see which services are enabled: | To see which services are enabled: | ||
Line 221: | Line 161: | ||
To disable the service: | To disable the service: | ||
− | * RedHat/Fedora/SUSE: <code>/sbin/chkconfig SERVICENAME | + | * RedHat/Fedora/SUSE: <code>/sbin/chkconfig --del SERVICENAME </code> |
* Debian: <code>' update-rc.d -f hdparm remove '</code> | * Debian: <code>' update-rc.d -f hdparm remove '</code> | ||
* Gentoo: <code>/sbin/rc-update del SERVICENAME</code> | * Gentoo: <code>/sbin/rc-update del SERVICENAME</code> | ||
Line 229: | Line 169: | ||
==== Fedora/CentOS/Red Hat ==== | ==== Fedora/CentOS/Red Hat ==== | ||
− | Edit /vz/private/{ | + | Edit /vz/private/{VEID}/etc/sysconfig/network-scripts/ifcfg-eth''x'' |
Make the following look like this: | Make the following look like this: | ||
ONBOOT=no | ONBOOT=no | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
==== Debian/Ubuntu ==== | ==== Debian/Ubuntu ==== | ||
Line 251: | Line 185: | ||
iface lo inet loopback | iface lo inet loopback | ||
− | iface eth0 inet | + | iface eth0 inet dhcp |
address 10.0.0.4 | address 10.0.0.4 | ||
netmask 255.0.0.0 | netmask 255.0.0.0 | ||
Line 259: | Line 193: | ||
You can either comment out the eth* interface stanza(s), or take it out of the "auto" line(s). | You can either comment out the eth* interface stanza(s), or take it out of the "auto" line(s). | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
==== openSUSE/SLES ==== | ==== openSUSE/SLES ==== | ||
Use Yast. | Use Yast. | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
=== Other adjustments === | === Other adjustments === | ||
There might be other adjustments needed. Please add those here (just above this section) if you have more info. | There might be other adjustments needed. Please add those here (just above this section) if you have more info. | ||
− | == Starting a new | + | == Starting a new VE == |
− | Try to start your new | + | Try to start your new VE: |
vzctl start 123 | vzctl start 123 | ||
Now check that everything works fine. If not, see [[#Troubleshooting]] below. | Now check that everything works fine. If not, see [[#Troubleshooting]] below. | ||
− | |||
== Troubleshooting == | == Troubleshooting == | ||
− | === | + | === Can't enter VE === |
− | |||
− | |||
− | + | If you can not enter your VE (using <code>vzctl enter</code>), you should be able to at least execute commands in it. | |
− | |||
− | |||
− | |||
− | |||
− | If you can not enter your | ||
First, see the [[#tty device nodes]] section above. | First, see the [[#tty device nodes]] section above. | ||
Line 317: | Line 223: | ||
vzctl exec 123 mount -t devpts none /dev/pts | vzctl exec 123 mount -t devpts none /dev/pts | ||
− | Then, add the appropriate mount command to | + | Then, add the appropriate mount command to VE's startup scripts. On some distros, you need to have the appropriate line in VE's /etc/fstab. |
− | In Fedora, try commenting out any '''udev''' entries in /vz/private/{ | + | In Fedora, try commenting out any '''udev''' entries in /vz/private/{VEID}/etc/rc.sysinit |
− | vi /vz/private/{ | + | vi /vz/private/{VEID}/etc/rc.sysinit |
Locate the '''udev''' entry from within vim | Locate the '''udev''' entry from within vim | ||
/udev | /udev | ||
Line 329: | Line 235: | ||
If anything goes wrong, try to find out why and fix. If you have enough Linux experience, it can be handled. Also check out IRC and please report back on this page. | If anything goes wrong, try to find out why and fix. If you have enough Linux experience, it can be handled. Also check out IRC and please report back on this page. | ||
− | == | + | == Success Stories == |
− | + | - Debian 3.1 Sarge with MySQL, apache2, PowerDNS | |
− | + | --[[User:Stoffell|stoffell]] 08:41, 8 February 2007 (EST) | |
− | + | ||
+ | - Red Hat 7.2 with MySQL 3.23, apache, Chilisoft --[[User:Stoffell|stoffell]] 13:26, 9 February 2007 (EST) | ||
+ | |||
+ | - Gentoo with Courier, Postfix, MySQL, Apache2 | ||
+ | --[[User:bfrackie|bfrackie]] 19:00, 18 March 2007 (EST) | ||
− | + | - AltLinux Master with qmail, MySQL, Apache, etc - to Debian/testing with OpenVZ --[[User:alexkuklin|alexkuklin]] | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
[[Category:HOWTO]] | [[Category:HOWTO]] | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− |