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 7: | Line 7: | ||
To make things easier you may like to first follow the basic instructions elsewhere and create a dummy container based on the same Linux distribution you want to migrate. That way you can take that dummy as a template and then copy to your new migrated container and modify. You can later discard this dummy. | To make things easier you may like to first follow the basic instructions elsewhere and create a dummy container based on the same Linux distribution you want to migrate. That way you can take that dummy as a template and then copy to your new migrated container and modify. You can later discard this dummy. | ||
− | |||
== Prepare a new “empty” container == | == Prepare a new “empty” container == | ||
For OpenVZ this would mean the following (assume you chose CT ID of 123): | For OpenVZ this would mean the following (assume you chose CT ID of 123): | ||
− | + | ||
mkdir /vz/root/123 /vz/private/123 | mkdir /vz/root/123 /vz/private/123 | ||
− | cat /etc/vz/conf/ve-basic.conf-sample > /etc/vz/conf/123.conf | + | cat /etc/vz/conf/ve-vps.basic.conf-sample > /etc/vz/conf/123.conf |
− | |||
− | + | Hint: Now comes the dummy container handy mentioned above: Simply copy the xxx.conf file of the dummy to your new yyy.conf and modify it. | |
− | |||
== Copying the data == | == Copying the data == | ||
Line 25: | Line 22: | ||
=== rsync === | === rsync === | ||
− | + | rsync example (run from the new HN): | |
− | + | rsync -arvpz --numeric-ids --exclude=/dev --exclude=/proc --exclude=/tmp -e ssh 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. | ||
− | {{Note| | + | {{Note|Do decrease the downtime, you can use double rsync approach. Run rsync for the first time before stopping most of the services, and then for the second time after stopping services. That way most of the data will be transferred while your server is fully working, and the second rsync will just "catch the latest changes" which is faster.}} |
=== Live CD === | === Live CD === | ||
Line 81: | Line 57: | ||
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. | ||
− | + | If you copied from the dummy container then this step is already accomplished. | |
=== IP address(es) === | === IP address(es) === | ||
Line 100: | Line 76: | ||
A container 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>). | A container 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 '/getty/d' /vz/private/123/etc/inittab | |
− | sed -i -e ' | ||
=== /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 container's root filesystem (<code>/</code>) is mounted not from the container itself, but rather from the host system. That leaves <code>/etc/mtab</code> in container 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 container. | {{out|The problem here is container's root filesystem (<code>/</code>) is mounted not from the container itself, but rather from the host system. That leaves <code>/etc/mtab</code> in container 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 container. | ||
Line 114: | Line 90: | ||
=== /etc/fstab === | === /etc/fstab === | ||
Since you do not have any real disk partitions in a container, /etc/fstab (or most part of it) is no longer needed. Empty it (excluding the lines for <code>/dev/pts</code>, <code>/proc</code>, <code>/sys</code> and such): | Since you do not have any real disk partitions in a container, /etc/fstab (or most part of it) is no longer needed. Empty it (excluding the lines for <code>/dev/pts</code>, <code>/proc</code>, <code>/sys</code> and such): | ||
− | + | ||
− | + | cp /vz/private/123/etc/fstab /vz/private/123/etc/fstab.old | |
egrep '/dev/pts|/dev/shm|/proc|/sys' /vz/private/123/etc/fstab.old > /vz/private/123/etc/fstab | egrep '/dev/pts|/dev/shm|/proc|/sys' /vz/private/123/etc/fstab.old > /vz/private/123/etc/fstab | ||
− | |||
You can also mount a devpts in a running (but not fully functional) container: | You can also mount a devpts in a running (but not fully functional) container: | ||
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 ==== | ||
Line 145: | Line 110: | ||
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. | ||
− | + | Hint: | |
+ | Now comes the dummy container handy mentioned above: Simply copy the entire /dev directory of the dummy to your new migrated container - worked in my case at least with Debian Etch. | ||
==== tty device nodes ==== | ==== tty device nodes ==== | ||
Line 182: | Line 148: | ||
CentOS 5 can run in a container with udev enabled. You need to create /etc/udev/devices, containing the above device nodes. Also, the following will create the extra device nodes you need | CentOS 5 can run in a container with udev enabled. You need to create /etc/udev/devices, containing the above device nodes. Also, the following will create the extra device nodes you need | ||
mkdir /vz/private/123/etc/udev/devices | mkdir /vz/private/123/etc/udev/devices | ||
− | /sbin/MAKEDEV -d /vz/private/123/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 | + | /sbin/MAKEDEV -d /vz/private/123/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 urandom zero ram0 |
− | /sbin/MAKEDEV -d /vz/private/123/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 | + | /sbin/MAKEDEV -d /vz/private/123/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 urandom zero ram0 |
===/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 160: | ||
=== /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) | ||
Line 208: | Line 172: | ||
* lm_sensors (container does not have access to hardware sensors) | * lm_sensors (container does not have access to hardware sensors) | ||
* microcodectl (container can not update CPU microcode) | * microcodectl (container can not update CPU microcode) | ||
− | * netplugd (container does not have real Ethernet device | + | * netplugd (container does not have real Ethernet device) |
− | |||
− | |||
− | |||
− | |||
To see which services are enabled: | To see which services are enabled: | ||
Line 221: | Line 181: | ||
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 251: | Line 211: | ||
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 294: | Line 254: | ||
Now check that everything works fine. If not, see [[#Troubleshooting]] below. | Now check that everything works fine. If not, see [[#Troubleshooting]] below. | ||
− | |||
== Troubleshooting == | == Troubleshooting == | ||
Line 328: | Line 287: | ||
=== Other problems === | === Other problems === | ||
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 == | == Success stories == | ||
Line 362: | Line 316: | ||
* Fedora 3 x32 with Plesk -- 23 October 2010 --[[User:Rexwickham|Rex Wickham (2020media.com)]] 13:15, 23 October 2010 (UTC) | * Fedora 3 x32 with Plesk -- 23 October 2010 --[[User:Rexwickham|Rex Wickham (2020media.com)]] 13:15, 23 October 2010 (UTC) | ||
[[Category:HOWTO]] | [[Category:HOWTO]] | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− |