Это кажется простым делом, если бы он работал только так, как описано в документации. Однако это не работает из-за некоторой ошибки в процессе перемещения zoneadm. Иди разбери. Во-первых, позвольте мне показать, что говорится в тривиальной документации:
http://docs.oracle.com/cd/E19455-01/817-1592/gcgnc/index.html
Что ж, это говорит о том, что команда для перемещения неглобальной зоны из одного места в другое на одном сервере просто
zoneadm -z zonename move /some/new/pathname
Это выглядит чертовски тривиально ... однако, если в неглобальной зоне есть какое-либо содержимое, в котором каталог имеет специальные (не совсем тривиальные ascii) символы в именах файлов, тогда процесс взрывается. Позвольте мне продемонстрировать:
Шаг первый: выключите зону. Обеспечили остановку таким образом:
# zlogin -C -e\@ z_001
[Connected to zone 'z_001' console]
node002 console login: root
Password:
Last login: Sun Jul 21 05:12:17 on console
Jul 25 17:50:06 node002 login: ROOT LOGIN /dev/console
Oracle Corporation SunOS 5.10 Generic Patch January 2005
node002-sparc-SunOS5.10 # shutdown -g0 -y -i0
Shutdown started. Thu Jul 25 17:51:06 GMT 2013
Changing to init state 0 - please wait
Broadcast Message from root (console) on node002 Thu Jul 25 17:51:07...
THE SYSTEM node002 IS BEING SHUT DOWN NOW ! ! !
Log off now or risk your files being damaged
node002-sparc-SunOS5.10 # showmount: node002: RPC: Program not registered
svc.startd: The system is coming down. Please wait.
svc.startd: 70 system services are now being stopped.
syslogd: /dev/sysmsg: I/O error
svc.startd: The system is down.
[NOTICE: Zone halted]
@.
[Connection to zone 'z_001' console closed]
#
Отлично ... теперь идет движение zoneadm:
# zoneadm -z z_001 move /zones/z_001
Moving across file-systems; copying zonepath /zone/z_001...zoneadm: zone 'z_001': 'copy' failed with exit code 5.
The copy failed.
More information can be found in /var/log/zoneAAAcwaOwX
Cleaning up zonepath /zones/z_001...
#
Не смогли? Посмотрим почему:
# cat /var/log/zoneAAAcwaOwX
cpio: Error with fstatat() of "", errno 2, No such file or directory
cpio: Error with fstatat() of "root/usr/local/build/automake-1.13_SunOS5.10_sparcv9/t/instspc.dir/a", errno 2, No such file or directory
cpio: Cannot open directory b, errno 2, No such file or directory
cpio: Error with fstatat() of "root/usr/local/build/automake-1.13_SunOS5.10_sparcv9/t/instspc.dir/a", errno 2, No such file or directory
cpio: Error with fstatat() of "b", errno 2, No such file or directory
62026208 blocks
5 error(s)
#
Ошибка, потому что cpio (то, что используется в zoneadm move) не может обрабатывать специальные символы. Если вы загрузите архив исходных текстов GNU automake и выполните конфигурацию, а затем выполните проверку с помощью make, вы увидите груды специальных символов в области набора тестов. Это приведет к сбою cpio в Solaris.
Так что я надеюсь, что есть какой-нибудь гуру Solaris, который может подтвердить мне две вещи:
1) the only zone config file I need to edit is in /etc/zones
2) I can edit that one file myself and do the move of the zone
filesystem myself also.
Я прав ?
ИЗМЕНИТЬ ---- это каталог и символы, которые cpio не может правильно обработать:
# ls -lapb /zone/z_001/root/usr/local/build/automake-1.13_SunOS5.10_sparcv9/t/instspc.dir
total 1398
drwxr-xr-x 2 gnuism other 3 Dec 31 2012 `/
drwxr-xr-x 2 gnuism other 2 Dec 31 2012 \012/
drwxr-xr-x 64 gnuism other 74 Dec 31 2012 ./
drwxr-xr-x 42 gnuism other 4045 Dec 31 2012 ../
drwxr-xr-x 2 gnuism other 3 Dec 31 2012 '/
drwxr-xr-x 2 gnuism other 3 Dec 31 2012 "/
drwxr-xr-x 2 gnuism other 3 Dec 31 2012 $/
drwxr-xr-x 2 gnuism other 3 Dec 31 2012 \/
drwxr-xr-x 2 gnuism other 3 Dec 31 2012 &/
drwxr-xr-x 2 gnuism other 3 Dec 31 2012 #/
drwxr-xr-x 2 gnuism other 3 Dec 31 2012 a\012b/
-rw-r--r-- 1 gnuism other 38455 Dec 31 2012 aclocal.m4
lrwxrwxrwx 1 gnuism other 59 Dec 31 2012 ar-lib -> /usr/local/build/automake-1.13_SunOS5.10_sparcv9/lib/ar-lib
drwxr-xr-x 2 gnuism other 7 Dec 31 2012 autom4te.cache/
drwxr-xr-x 3 gnuism other 6 Dec 31 2012 build-a_lf_b/
.
.
.
drwxr-xr-x 2 gnuism other 2 Dec 31 2012 dest-tab/
drwxr-xr-x 2 gnuism other 2 Dec 31 2012 dest-tilde/
-rwxr-xr-x 1 gnuism other 13997 Dec 31 2012 install-sh
-rw-r--r-- 1 gnuism other 1395 Dec 31 2012 Makefile.am
-rw-r--r-- 1 gnuism other 39656 Dec 31 2012 Makefile.in
-rwxr-xr-x 1 gnuism other 6873 Dec 31 2012 missing
-rw-r--r-- 1 gnuism other 49 Dec 31 2012 source.c
drwxr-xr-x 2 gnuism other 8 Dec 31 2012 sub/
drwxr-xr-x 2 gnuism other 3 Dec 31 2012 @&t@/
#
Примечание от OP: очень плохо, что проект OpenSolaris был убит Oracle, поскольку мы могли легко увидеть, как zoneadm вызывает использование cpio и изменил его, чтобы использовать что-то гораздо более подходящее для этой задачи. Я решил эту проблему, выполнив перемещение самостоятельно, и использовал "звезду" или POSIX Standard TAR от Йорга Шиллинга для выполнения перемещения по зоне.
Solution :
1 - Manually do the copy with a better tool from the source to dest.
1.1 - get sources for star from ftp://ftp.berlios.de/pub/schily/
1.2 - extract them
1.3 - cd into the extracted star sources and run /usr/xpg4/bin/make
1.4 - once that ends just run /usr/xpg4/bin/make install
you now have star and it can handle anything that lives on a filesystem
1.5 - do a copy from source to dest path with star
/opt/schily/bin/star -copy -p -acl -sparse -dump -C source . dest
2 - cd to /etc/zones and edit the zonefile xml to use the new zonepath
3 - edit the "index" file in /etc/zones to use the new zonepath
Special Detail to note :
1 - if you edit the zone XML file but do not edit the zonepath in the
index file you will get a warning message when you try to boot the zone :
# zoneadm -z z_001 boot
The XML repository has zonepath '/z/001',
but the index file has zonepath '/zone/z_001'.
These must match, so fix the incorrect entry.
Альтернатива: вместо этого скопируйте через ZFS, а затем измените путь к зоне.
Используя ваши параметры:
У нас есть следующая процедура:
zfs snapshot zone/z_001@premove
zfs send zone/z_001@premove | zfs recv zones/z_001
zoneadm -z z_001 detach
zonecfg -z z_001 set zonepath=/zones/z_001
zoneadm -z z_001 attach
Шаги 4-6 изменяют / etc / zone / index за вас.
Ты не иметь сначала выключить зону; вы можете сделать и отправить снимок, затем выключить его, а затем взять и отправить второй снимок, который будет инкрементальным, намного меньше и быстрее: zfs send -i zone/z_001@premove zone/z_001@snap2 | zfs recv zones/z_001
В конечном итоге вы получите снимок в целевом zpool, который вы можете сохранить или удалить по своему усмотрению.