Перенос 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 немного подправил на свой лад. Автору респект!

Как добавить нового пользователя в FreeBSD и поставить ему sudo (root) права

Для выполнения некоторых команд в системе FreeBSD требуется повышенные права (sudo). Разберемся, как создать пользователя во FreeBSD и выдать ему sudo права.

Содержание:

1. Создание пользователя во FreeBSD

2. Настройка sudo (root права) пользователю во FreeBSD

Я думаю что это не сильно сложные шаги, но все же рассмотрим их более подробно.

1. Создание пользователя во FreeBSD

Для начала нам необходимо получить повышенные права (root). Для этого выполним команду su и введем пароль от пользователя root:

su
Password:
root@freebsd:/home/username #

Теперь переходим к созданию пользователя. Для это воспользуемся командой adduser:

# adduser

Рассмотрим поля, которые нам далее придется заполнять:

Username: sysadmin
имя создаваемого пользователя
Full name: Ivan Ivanov
полное имя, можно оставить пусты, просто нажать Enter
Uid (Leave empty for default):
user id, можно ввести самому, начиная с номера 1001, либо нажать Enter, система выберет сама
Login group [sysadmin]:
группа в которую входит создаваемый пользователь, по умолчанию совпадает с именем
Login group is sysadmin. Invitesysadmin into other groups? []:
включить-ли пользователя в другие группы, если нет, жмем Enter
Login class [default]:
класс пользователя, о них поговорим чуть позже, на данном этапе, жмем Enter
Shell (sh csh tcsh nologin) [sh]: sh
здесь предлагается выбрать системную оболочку, если вы не собираетесь давать данной учетной записи, 
удаленный доступ к системе, например через SSH, вписываем nologin, 
либо выбираем из предложенных вариантов, я обычно ставлю sh
Home directory [/home/sysadmin]:
назначаем домашнюю директорию, если значение по-умолчанию устраивает, жмем Enter
Home directory permissions (Leave empty for default):
права доступа на домашнюю директорию, что-бы оставить по-умолчанию, жмем Enter
Use password-based authentication? [yes]:
использовать-ли авторизацию по паролю
Use an empty password? (yes/no) [no]:
можно-ли использовать пустые пароли
Use a random password? (yes/no) [no]:
система предлагает сгенерировать вам пароль, если вы хотите согласиться, нужно написать yes 
на заключительном этапе создания учетной записи, будет показан сгенерированный пароль
если предпочитаете ставить пароль вручную, жмите Enter
Enter password:
вводим пароль, имейте в виду, программа не покажет, что вы вообще что-либо вводите
так что будьте внимательны
Enter password again:
повторный ввод пароля
Lock out the account after creation? [no]:
заблокировать-ли учетную запись после создания

Если Вы планируете выдать в дальнейшем данному пользователю повышенные права, то сразу можно его при создании поместить в группу wheel.
В принципе создание пользователя на этом завершено

2. Настройка sudo (root права) пользователю во FreeBSD

Для начала нам необходимо установить sudo. Устанавливать будем из пакетов. Для начала обновим пакеты:

pkg update

Теперь установим сам пакет sudo

pkg install sudo

После установки у нас появится файл sudoers в директории /usr/local/etc. Давайте проверим, появился ли он?:

# cd /usr/local/etc
# ls -l sudoers
-r--r----- 1 root wheel 3646 20 авг. 21:36 sudoers

Да, файл есть, все хорошо. Данный файл создается с атрибутами «только чтение». Нам необходимо разрешить его редактирование:

# chmod u+w /usr/local/etc/sudoers

Давайте теперь отредактируем файл:

# mcedit /usr/local/etc/sudoers

находим файле строку root ALL=(ALL) ALL и под ней добавим нашего созданного пользователя:

...
##
## Runas alias specification
##

##
## User privilege specification
##
root ALL=(ALL) ALL
 sysadmin ALL=(ALL) ALL

## Uncomment to allow members of group wheel to execute any command
# %wheel ALL=(ALL) ALL

## Same thing without a password
# %wheel ALL=(ALL) NOPASSWD: ALL

## Uncomment to allow members of group sudo to execute any command
# %sudo ALL=(ALL) ALL

Для того, чтобы разрешить всей группе права суперпользователя, необходимо просто раскомментировать строчку %wheel ALL=(ALL) NOPASSWD: ALL Если вы ее расскоментируете в том виде, в котором она есть, то при вызове команды от суперпользователя пароль запрашиваться не будет. Чтобы пароль запрашивался, уберите надпись NOPASSWD. На этом все. Теперь, для того, чтобы вызвать команду с повышенными правами необходимо вначале набрать su. Например:

$ su service zabbix-server restart

Вроде бы мы подробно рассмотрели, как создать нового пользователя в операционной системе FreeBSD и как добавить ему права суперпользователя. Если у Вас что-то не получается или остались вопросы — задавайте их в комментариях, постараемся ответить и помочь.

По материалам sysadmin-note.ru