Включение mod_rewrite в Nginx

При переносе сайта на свой хостинг столкнулся с такой проблемой, что не работает mod rewrite в связке nginx+apache, убил несколько часов на гугл, однако, решение как всегда оказалось банально и в принципе попадало мне на глаза ни один раз, но я с упорством достойным лучшего из твердолобых продолжал поиски решения на просторах этих ваших интернетов 🙂
В общем то все просто, как только мы прописываем в .htaccess Rewrite Rule (правила преобразования) и включаем их на сайте, то наш доблестный nginx сразу же выдает нам ошибку 404, лечим это очень просто в секцию «location /» добавляем try_files
В итоге получаем что-то вида:

        location / {
                root   /var/www/example.com;
                index  index.php;
                try_files $uri $uri/ /index.php;
        }

Для apache 2 это решается это при помощи добавления .htaccess в корень сайта.

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index.php$ - [L]
RewriteCond %{REQUESTFILENAME} !-f
RewriteCond %{REQUEST
FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

Все работает, теперь можно использовать ЧПУ, например в WordPress, Joomla, Drupal, ну и пользоваться другими возможностями Rewrite Rules.

Скачиваем сайты целиком — утилита wget

wget — это утилита, которая предназначена для загрузки файлов по сети (из интернета). Я расскажу, как использовать wget, чтобы скачивать сайты из интернета целиком и затем просматривать их в автономном режиме.

С помощью wget можно скачивать сайты, включая картинки, всего лишь указав адрес сайта и определенные параметры. wget будет автоматически переходить по ссылкам на сайте и скачивать страницу за страницей. Рассмотрим несколько примеров от простых к более сложным использования wget для скачивания сайтов.

Чтобы скачать сайт целиком с помощью wget нужно выполнить команду:

wget -r -k -l 7 -p -E -nc http://site.com/

После выполнения данной команды в директорию site.com будет загружена локальная копия сайта http://site.com. Чтобы открыть главную страницу сайта нужно открыть файл index.html.

Рассмотрим используемые параметры:

-rуказывает на то, что нужно рекурсивно переходить по ссылкам на сайте, чтобы скачивать страницы.
-kиспользуется для того, чтобы wget преобразовал все ссылки в скаченных файлах таким образом, чтобы по ним можно было переходить на локальном компьютере (в автономном режиме).
-pуказывает на то, что нужно загрузить все файлы, которые требуются для отображения страниц (изображения, css и т.д.).
-lопределяет максимальную глубину вложенности страниц, которые wget должен скачать (по умолчанию значение равно 5, в примере мы установили 7). В большинстве случаев сайты имеют страницы с большой степенью вложенности и wget может просто «закопаться», скачивая новые страницы. Чтобы этого не произошло можно использовать параметр -l.
-Eдобавлять к загруженным файлам расширение .html.
-ncпри использовании данного параметра существующие файлы не будут перезаписаны. Это удобно, когда нужно продолжить загрузку сайта, прерванную в предыдущий раз.

Мы рассмотрели лишь одно из возможных применений утилиты wget. На самом деле область применения wget значительно шире и wget обладает большим числом дополнительных параметров. За более подробной информацией обращайтесь к руководству, выполнив в командной строке: man wget. По материалам pingvinus.ru/note/wget-download-sites

Исправляем зависшие оповещения в ISPmanager

ISPmanager в нашей всеми любимой панели управления серверами, иногда случается такое что в столбце (фоновые задания) на главной странице ISPmanager Lite, оповещение о невыполненном фоновом задание не удаляются и продолжают там находится всегда. Причину появления предупреждения я думаю объяснять не нужно, а вот по какой причине оно не удаляется, или почему его нельзя удалить после перехода непосредственно в него из интерфейса самой панели ISPmanager , это для меня непонятно.

Чтобы удалить это предупреждение достаточно зайти по пути:

/usr/local/mgr5/var/run/

далее найти папку под одноименным названием задания, пройти в нее и удалить оттуда PID файл.
После этого назойливое предупреждение пропадет.

Успехов.

Источник: bloguser.ru/ispmanager-zavislo-opoveshhenie.html

MySQL ошибка: #1273 — Unknown collation: ‘utf8mb4_unicode_520_ci’

Решение ошибки, которая возникала при импорте базы данных MySQL в панели управления phpMyAdmin.

При переносе базы данных WordPress с одного хостинга на другой возникла ошибка:#1273 — Unknown collation: ‘utf8mb4_unicode_520_ci’

В целом сообщение об ошибке было таким:Ошибка
SQL запрос:
— Структура таблицы `wp_subscribe_reloaded_subscribers`

CREATE TABLE `wp_subscribe_reloaded_subscribers` (
  `stcr_id` int(11) NOT NULL,
  `subscriber_email` varchar(100) COLLATE utf8mb4_unicode_520_ci NOT NULL,
  `salt` int(15) NOT NULL,
  `subscriber_unique_id` varchar(50) COLLATE utf8mb4_unicode_520_ci DEFAULT NULL,
  `add_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_520_ci

Ответ MySQL:
#1273 — Unknown collation: ‘utf8mb4_unicode_520_ci’

Причина оказалась в том, что таблица в базе данных MySQL плагина Subscribe To Comments Reloaded находилась в кодировке utf8mb4_unicode_520_ci. А для верной работы необходима кодировка utf8mb4_unicode_ci.

Ошибка Unknown utf8mb4_unicode_520 может возникнуть из-за неверного формата таблицы любого другого плагина. Например, в одном из случаев, у меня такая ошибка возникала сразу во многих других таблицах (не только относящихся к плагинам), например:— Структура таблицы `wp_commentmeta`

CREATE TABLE `wp_commentmeta` (
  `meta_id` bigint(20) UNSIGNED NOT NULL,
  `comment_id` bigint(20) UNSIGNED NOT NULL DEFAULT ‘0’,
  `meta_key` varchar(255) COLLATE utf8mb4_unicode_520_ci DEFAULT NULL,
  `meta_value` longtext COLLATE utf8mb4_unicode_520_ci
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_520_ci

Любая ошибка такого рода (не важно что за таблица или плагин) исправляется одинаково. Причем операции со вкладкой «Структура» можно и пропускать и делать только «Операции» (об этом ниже). Но чтобы всё точно работало, лучше сделать и то и другое.

Если ИМЕЕТСЯ доступ к базе данных старого хостинга

Заходим в эту базу через phpMyAdmin.

В колонке слева выбираем таблицу wp_subscribe_reloaded_subscribers. Сверху панели выбираем вкладку «Структура».

Нажимаем изменить и меняем сравнение utf8mb4_unicode_520_ci на utf8mb4_unicode_ci.

Затем выбираем вкладку «Операции», снова выбираем кодировку utf8mb4_unicode_ci, отмечаем галочку Change all column collations. Нажимаем вперед, подтверждаем, что хотим выполнить эту операцию.

После этого можно экспортировать свою базу данных и импортировать на новый хостинг. На этот раз всё должно пройти гладко.

Если доступа к базе данных старого хостинга НЕТ

В этом случае надо открыть базу данных через специализированные программы, например, Notepad++ или Transmit в Mac OS. Там найти строчки utf8mb4_unicode_520_ci и заменить их на utf8mb4_unicode_ci. Сохранить и дальше импортировать к себе на хостинг.

Если ошибку вызывает другой плагин, не обязательно wp_subscribe_reloaded_subscribers или какая иная таблица, то действовать нужно по аналогии с этой инструкцией, но уже для другой таблицы.

По материалам ploshadka.net/mysql_error_1273

ISPmanager 5 на домене

Скопировано отсюда чтоб не забыть

https://doc.ispsystem.ru/index.php/Настройка_адреса_панели_управления
Ответ от поддержки
Для ISPmanager Lite можно настроить проксирование вручную при помощи следующей документации:
https://doc.ispsystem.ru/index.php/Настройка_адреса_панели_управления

Для ISPmanager Business начиная с версии 5.138 это можно сделать в настройках www-домена, включив у него "Nginx-прокси" и "Проксировать запросы в панель":
https://doc.ispsystem.ru/index.php/Nginx-прокси#.D0.9E.D0.B1.D0.BD.D0.BE.D0.B2.D0.BB.D0.B5.D0.BD.D0.B8.D0.B5_ISPmanager_.D0.B4.D0.BE_.D0.B2.D0.B5.D1.80.D1.81.D0.B8.D0.B8_5.138.0


Настройка адреса панели управления

Иерархия:COREmanager

Программные продукты ISPsystem 5-го поколения работают через встроенный веб сервер — ihttpd. ihttpd не имеет понятия «виртуальный сервер», то есть не может различать запросы по полю “Host” заголовка запроса. Все полученные запросы ihttpd передает ядру программного продукта.

За счет этого панель управления будет доступна по любому домену, который разрешается в ip адрес, где слушает ihttpd.

Например, на сервере ihttpd прослушивает адрес 10.10.10.10 и порт 1500. Если направить домен domain.com в днс на 10.10.10.10, то по адресу https://domain.com:1500/ будет открываться панель управления.

Nginx

При необходимости можно настроить чтобы панель управления работала через связку Nginx + ihttpd.

Для этого в файл конфигурации nginx добавляем server.

server {
	listen 10.10.10.10:443;
	server_name 10.10.10.10;
	ssl on;
	ssl_certificate /usr/local/mgr5/etc/manager.crt;
	ssl_certificate_key /usr/local/mgr5/etc/manager.key;
        client_max_body_size 20m;
 
	set $mgr_proxy "https://10.10.10.10:1500";
 
        location ^~ /manimg/ {
 		alias /usr/local/mgr5/skins/;
 	}
 	location / {
 		proxy_pass $mgr_proxy;
 		proxy_redirect $mgr_proxy /;
 		proxy_set_header Host $host:$server_port;
 		proxy_set_header X-Forwarded-For $remote_addr;
 		proxy_set_header X-Forwarded-Proto $scheme;
 		proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forwarded-Secret <произвольный набор символов>;
  		chunked_transfer_encoding off;
  	}
 
 	location ^~ /mancgi/ {
 	        proxy_pass $mgr_proxy;
 	        proxy_redirect $mgr_proxy /;
 	        proxy_set_header Host $host:$server_port;
 	        proxy_set_header X-Forwarded-For $remote_addr;
 	        proxy_set_header X-Forwarded-Proto $scheme;
 	        proxy_set_header X-Real-IP $remote_addr;
 	        proxy_set_header X-Forwarded-Secret <произвольный набор символов>;
 	        chunked_transfer_encoding off;
 	}
 }

Директива client_max_body_size указывает, какого размера файла nginx сможет передать в панель (например это нужно для работы «Менеджера файлов» в ISPmanager). Укажите здесь нужное значение

В файл конфигурации COREmanager и в файл конфигурации панели управления следует добавить директиву ForwardedSecret.

Например:

ForwardedSecret mary123

ForwardedSecret — набор букв и цифр, которые представляют собой ключ, необходимый для того, чтобы ihttpd доверял запросам от nginx`у и писал в лог панели IP адрес клиента, а не сервера. Без данной директивы, любой будет иметь возможность подключиться к ihttpd и указать произвольный адрес клиента в запросе. Другими словами, ForwardedSecret необходим для защиты от подмены ip адреса клиента.

Обратите внимание, секретная фраза, указанная в файле конфигурации nginx (директива proxy_set_header X-Forwarded-Secret) должна совпадать с фразой, указанной в файлах конфигурации панелей управления (директива ForwardedSecret).

После выполнения изменений не забудьте перезапустить nginx и панель управления. Перезапустить панель управления можно командой

killall core

SPDY

Если используется spdy протокол, то для корректной работы следует добавить директивы

proxy_set_header User-Agent $http_user_agent;
proxy_set_header Accept $http_accept;
proxy_set_header Accept-Language $http_accept_language;
proxy_set_header ISP-Client $http_isp_client;
proxy_set_header Referer $http_referer;
proxy_set_header Content-Type $http_content_type;
proxy_set_header Cookie $http_cookie;
proxy_set_header Pragma $http_pragma;
proxy_set_header Cache-Control $http_cache_control;
proxy_set_header Accept-Encoding $http_accept_encoding;
RAW Paste Data

Apache

Возможно настроить работу панели управления через Apache с проксированием на ihttpd.

В Apache должны быть подключены модули:

  • proxy_module
  • proxy_connect_module
  • proxy_http_module

В файле конфигурации Apache создаем VirtualHost:

<VirtualHost 10.10.10.10:80>
        ServerName domain.com
        ServerAlias www.domain.com
        Redirect / https://domain.com/
</VirtualHost>
 
<VirtualHost 10.10.10.10:443>
        ServerName domain.com
        ServerAlias www.domain.com
 
        SSLProxyEngine on
        SSLProxyVerify none
        SSLProxyCheckPeerCN off
        SSLProxyCheckPeerName off
 
        SSLEngine On
        SSLCertificateFile /usr/local/mgr5/etc/manager.crt
        SSLCertificateKeyFile /usr/local/mgr5/etc/manager.key
 
        ProxyRequests Off
        ProxyPreserveHost On
        ProxyVia full
 
        RequestHeader set X-Forwarded-Secret <произвольный набор символов>
        RequestHeader set X-Forwarded-For $remote_addr
 
        <proxy *>
        Order deny,allow
        Allow from all
        </proxy>
 
        ProxyPass / https://10.10.10.10:1500/
        ProxyPassReverse / https://10.10.10.10:1500/
</VirtualHost>

Чтобы применить конфигурацию Apache:

 apachectl graceful

В файл конфигурации COREmanager и панели упавления добавляем директиву ForwardedSecret.

Например:

ForwardedSecret mary123

Значение ForwardedSecret в файле конфигурации панели и COREmanager должно совпадать со значением, указанным в директиве RequestHeader set X-Forwarded-Secret , что в файле конфигурации Apache.

После изменений в файлах конфигурации COREmanager и панели управления, необходимо перезапустить панель командой

killall core

Для правильной работы с SSL-сертификатом панели в конфигурационном файле /usr/local/mgr5/etc/ihttpd.conf нужно прописать информацию о сертификате:

listen {
        ip 10.10.10.10
        redirect
        sni {
                domain_cert /usr/local/mgr5/etc/manager.crt
                domain_key /usr/local/mgr5/etc/manager.key
                domains domain.com
        }
}

По материлам syrog.ru

Ошибка 404 при заходе на phpmyadmin nginx

Нужно добавить в конфигурацию домена


include /etc/nginx/vhosts-includes/*.conf;
include /etc/nginx/vhosts-resources/домен.info/*.conf;

Команды FreeBSD

Здесь представленны основные команды FreeBSD для мониторинга системы и не только.


Информация о дисках

mount — показывает смонтированные подразделы и флаги из монтирования
df — показывает смонтированные подразделы, их размер и свободное место на них
fdisk /dev/ad0 — показывает информацию о диске ad0 и разделах на нем
disklabel /dev/ad0s1 — показывает список подразделов в первом разделе диска ad0
swapinfo — показывает список подразделов свопинга на дисках и их использование
fstat — показывает список открытых файлов (имена файлов не выводятся)
pstat -f — выводит список открытых файлов (имена файлов не выводятся)
systat -vmstat n — каждые n секунд выводит количество транзакций с диском в секунду, объем записанных/считанных данных на диск в секунду, средний размер транзакции и процент времени в течение которого диск был занят работой.
iostat — выводит информацию, аналогичную systat -vmstat, но не выводит занятости диска по времени и может выводить среднюю статистику с момента загрузки.
vmstat — выводит количество операций на диске в секунду
/stand/sysinstall — можно посмотреть и изменить разметку диска и монтирование
less /etc/fstab — таблица монтирования при загрузке
du -h /путь к каталогу — выводит размер каталога
gstat — выводит статистику о записи на диски(очередь) очень удобно!!!

Ремонт файловой системы

fsck — проверка диска на ошибки

Информация о процессоре и памяти

systat -vmstat n(systat -v 1) — вывод показателей загрузки (number of jobs in the run queue averaged over 1, 5 and 15 min), состояния памяти (в страницах), количества процессов в группах, количество вызовов специальных функций ядра (traps, interrupts, system calls, network software interrupts), использование процессора, трансляции имен, активность свопа, прерывания, а также информацию по использованию диска (см)
top — аналогичная информация в сокращенном виде + использование памяти и свопа в мегабайтах, список процессов, отсортированных по использованию процессора.
ps afx — список запущенных процессов и время процессора на каждый

Информация о сети

ifconfig — список сетевых интерфейсов с ip-адресами, масками, mac-адресами, типами карт и их статусами (названия карточек можно посмотреть в файле конфигурации ядра)
systat -ifstat n — объем трафика за n секунд на всех сетевых интерфейсах
netstat — вывод активных сетевых соединений (сокетов)
systat -netstat n — аналог netstat в реальном времени
systat -ip n — таблица IP-пакетов и ошибок по типам за n секунд
systat -tcp n — таблица TCP-пакетов и ошибок по типам за n секунд
systat -icmp n — таблица ICMP-пакетов и ошибок по типам за n секунд
netstat -ibt — список интерфейсов, разбитых по ip-адресам (!) с объемом трафика на каждом, количеством ошибок, коллизий, значением watchdog-таймера
netstat -r — таблица маршрутизации
arp -a — таблица ARP
tcpdump -i rl0 host 192.168.61.20 and port 80 — сниффер пакетов на интерфейсе rl0, фильтрующий пакеты, содержащие адрес 192.168.61.20 и порт 80
trafshow -i rl0 — программа для сортировки и вывода сетевых потоков (устанавливается дополнительно пакетом или из портов)

Службы времени

date — выводит текущее время и дату
date 201010012312 — устанавливает время 23:12 01-10-2010
— выводит, сколько времени назад система загрузилась и залогиненных пользователей
last — выводит историю перезагрузок и входов пользователей

Работа над файлами
tar -xzf archive.tgz — разархивировать архив *.tar.gz
unzip archive.zip — разархивировать архив *.zip

Поиск файлов
find /etc -name «*.conf» -найти в каталоге /etc все файлы с расширением .conf
find /etc -name «moy_f*» -найти в каталоге /etc все файлы имя которого начинается с moy_f

По материалам syscentr

Исправляем в ISPmanager зависло оповещение

ISPmanager в нашей всеми любимой панели управления серверами, иногда случается такое что в столбце (фоновые задания) на главной странице ISPmanager Lite, оповещение о невыполненном фоновом задание не удаляются и продолжают там находится всегда. Причину появления предупреждения я думаю объяснять не нужно, а вот по какой причине оно не удаляется, или почему его нельзя удалить после перехода непосредственно в него из интерфейса самой панели ISPmanager , это для меня непонятно.

Чтобы удалить это предупреждение достаточно зайти по пути:

/usr/local/mgr5/var/run/

далее найти папку под одноименным названием задания, пройти в нее и удалить оттуда PID файл.
После этого назойливое предупреждение пропадет.

По материалам bloguser.ru

Копирование файлов и запуск команд через ssh утилитой scp

Используем следующий формат команд

scp [модификатор] [источник] [место_назначения]

Если в качестве источника или места назначения указывается удаленный сервер, то формат параметра такой:

После запуска команды потребуется ввести пароль от указанной учетной записи удаленного сервера.

Если собрать все вместе, то скопировать локальный файл /home/user/file.tgz в домашний каталог пользователя root удаленного сервера 0.0.0.0 можно командой:

scp /home/user/file.tgz root@0.0.0.0:/root

Чтобы скачать этот же файл с удаленного сервера:

scp root@0.0.0.0:/root/file.tgz /home/user

За одну операцию можно скопировать несколько файлов, для этого необходимо указать их в качестве источника, разделив пробелом – местом назначения будет считаться последний указанный параметр. Например, загрузить файлы file1.tgz и file2.tgz из локального каталога на удаленный сервер позволит команда:

scp file1.tgz file2.tgz root@0.0.0.0:/root

Для копирования каталога потребуется задействовать модификатор команды –r. Копируем локальный каталог /home/user/dir на удаленный сервер:

scp –r /home/user/dir root@0.0.0.0:/root

В тех случаях, когда SSH-сервер работает на нестандартном порту, поможет опция –P. Если нужно подключиться через порт 10022:

scp –P 10022 /home/user/file.tgz root@0.0.0.0:/root

Перенос FreeBSD сервера с ZFS root файловой системой на новый pool

Попались мне под руку пара винтов побольше и еще один компьютер. Наслышан я о чудесах и простоте переноса ZFS и решил попробовать.

Задача перенести сервер под FreBSD, что уже работает, на новый сервер с помощью ZFS.

Ну и так сказать своеобразный бекап.

Бекап это сомнительно. Потому как на исходном тоже стоит всё на «мирроре»

Создаем ключ

# ssh-keygen

# cat /root/.ssh/id_rsa.pub | ssh root@127.0.0.1 ‘cat >> /root/.ssh/authorized_keys’

[root@server ~]# zpool list -v

NAME                                     SIZE  ALLOC   FREE    CAP  DEDUP  HEALTH  ALTROOT

Грузимся с CD и работаем в Live-режиме mfsBSD

# mkdir /root/.ssh

# camcontrol devlist

vi /etc/ssh/sshd_config 

В конфиге разрешаем root-у логиниться. 

Отключаем DNS проверку, чтобы побыстрее было немного. 

PermitRootLogin yes 

UseDNS no 

Задаем пароль для пользователя root: 

# passwd root 

Указываем интерфейсу нужный IP адрес 

ifconfig re0 add 127.0.0.0.1/24 

или dhclient re0

запускаем sshd: /etc/rc.d/sshd onestart

Далее создаём разделы…

# gpart create -s gpt ada0

# gpart add -b 40 -s 512k -t freebsd-boot ada0

# gpart add -s 8g -t freebsd-swap ada0

# gpart add -t freebsd-zfs ada0

[root@mfsbsd ~]# gpart show

=>        40  1953522976  ada0  GPT  (932G)

          40        1024     1  freebsd-boot  (512K)

        1064    16777216     2  freebsd-swap  (8.0G)

    16778280  1936744736     3  freebsd-zfs  (924G)

Создаем пул:

# zpool create -f tank /dev/ada0p3

Пул готов к приёму данных.

Переходим на сервер-источник. 

Создаем рекурсивный снапшот, который и будем передавать:

# zfs snapshot -r tank@21-04-13 

Передаем его на сервер приемник:

# screen

# zfs send -vR tank@21-04-13 | ssh 127.0.0.0.1 zfs recv -F tank

Ждем окончания передачи. У меня примерно 213 GB передавалось около 12 часов.

Переходим опять на сервер-приемник root@mfsbsd:~ 

# csh

# zfs list -t snapshot 

# zpool list

# mkdir /tmp/tank

# mount -t zfs tank/root /tmp/tank

# gpart bootcode -b /tmp/tank/boot/pmbr -p /tmp/tank/boot/gptzfsboot -i 1 ada0

# chroot /tmp/tank

Ввиду того, что с сервера-источника нам передалось всё, то поправим немного /etc/fstab. Дело в том, что своп на источнике подключен в fstab по меткам gpt. 

Настройка по меткам

# cat /etc/fstab

/dev/gptid/dadde41e-913d-11eb-92f9-ac1f6bd74a62 none swap sw 0 0

# gpart list

2. Name: ada0p2

   Mediasize: 8589934592 (8.0G)

   Sector Size: 512

   Stripe Size: 4096

   Stripe Offset: 0

   Mode: r0w0e0

   defimedia: HD(2,GPT,fffe5673-d7ad-11dd-a24d-50465d8ab2bb,0x428,0x1000000)

   rawuuid: fffe5673-d7ad-11dd-a24d-50465d8ab2bb

   rawtype: 516e7cb5-6ecf-11d6-8ff8-00022d09712b

   label: (null)

   length: 8589934592

   offset: 544768

   type: freebsd-swap

   index: 2

   end: 16778279

   start: 1064

# vi /etc/fstab 

/dev/gptid/dadde41e-913d-11eb-92f9-ac1f6bd74a62 none swap sw 0 0 >

fffe5673-d7ad-11dd-a24d-50465d8ab2bb

Второй вариант без меток

[root@msfbsd ~]# cat /etc/fstab 

# Device Mountpoint FStype Options Dump Pass#

### /dev/gpt/swap0 none swap sw 0 0

>

/dev/ada0p2 none swap sw 0 0

Правим файлы в скопированной системе.

[root@mfsbsd ~]#

# zfs umount -a

# exit

Скажем кто у нас bootfs и сделаем экспорт:

# zpool set bootfs=tank/root tank

# zpool export tank

# shutdown -r now

На источнике можно удалить ненужный снапшот: 

# zfs destroy -r tank@move

Взял на afabla немного подправил на свой лад. Автору респект!