Блог об администрировании Linux, BSD и не только.

Позднее Ctrl + ↑

Перенос linux на другой диск на примере debian/ubuntu

Навеяно статьей про перенос freebsd на другой диск. Будем делать тоже самое но на linux. В linux все несколько сложнее.

Для начала нужно подсоединить новый диск и загрузится. В системе должны присутствовать 2 диска, первый с нашей системой, а второй пустой. Второй мы можем разметить по своему усмотрению или же скопировать разметку с первого диска(если второй диск идентичен первому). Как скопировать разметку можно прочесть здесь. Как разметить вручную думаю разберётесь сами, благо мануалов в интернете полно. После создания разметки разделы надо отформатировать примерно так.

# mkfs.ext4 /dev/sdb1

Затем примонтируем его в /mnt

# mount /dev/sdb1 /mnt

Теперь нам нужно создать дампы разделов, в данном случае нужно создать только дамп sda1. Установим утилиты dump/restore.

# apt-get install dump

И создаем дамп раздела в файл /mnt/root.img

# dump -0f /mnt/root.img /

Создание дампа в /mnt/root.img возможно когда на разделе используется менее 50% от /dev/sdb1. Иначе на разматывание дампа места не хватит. В остальных случаях нужно создавать дамп в другом месте, но не в разделе корня, чтобы дамп не мотал сам себя. Можно использовать раздел другой тачки примонтированный по sshfs, я проверял это прекрасно работает.
Переходим в /mnt и разматываем дамп.

# cd /mnt
# restore -rf /mnt/root.img

Как видим раздел перенесся на /dev/sdb1. Если у нас /boot на отдельном разделе, то переносим его аналогично.

Теперь нам нужно установить загрузчик.

# grub-install --root-directory=/mnt /dev/sdb

Затем если требуется правим /mnt/etc/fstab и меню grub в /mnt/boot/grub/grub.cfg.

# nano /mnt/etc/fstab
# nano /mnt/boot/grub/grub.cfg

Тут немного поясню зачем проверять и править эти файлы. У меня например в этих файлах были прописаны uuid разделов, и если мы уберем старый диск то ОС соответственно не загрузится, т.к у новых разделов у нас другие uuid. Я вместо uuid прописал реальные устройства корня и свопа /dev/sda1 и /dev/sda3. Все устройства sdb, станут у нас sda после извлечение первого диска.

Теперь выключаем тачку, отсоединяем первый диск и загружаемся с нового диска.

P.S. Утилиты dump и restore не ограничиваются переносом ОС с одного диска на другой. Таким образом можно переносить linux вообще на другую тачку с другим железом и дисками. Процедура почти такая же за небольшими изменениями.

  1. На первой тачке создаем дамп ОС;
  2. Загружаем вторую тачку с livecd;
  3. Размечаем и форматируем диски;
  4. Копируем туда дамп c первой тачки(по scp, например);
  5. Разворачиваем дамп с помощью restore;
  6. Устанавливаем загрузчик;
  7. Загружаемся.

Ошибка при установке GRUB на диск.

При установке grub получил такую ошибку.

# grub-install /dev/sdb
Searching for GRUB installation directory ... found: /boot/grub
The file /boot/grub/stage1 not read correctly.

Гугл говорит что нужно уменьшать размер инодов и проверять тип файловой системы. У меня же оказалось что установлен старый GRUB 0.97. Установил новый GRUB2 командой

# apt-get install grub-pc

И переустановил GRUB на обоих дисках без ошибок.

Простая установка FTP-сервера на FreeBSD.

На самом деле по умолчанию во freebsd уже установлен ftp-сервер, нам нужно его только сконфигурировать.
Выполняем для добавления запуска ftp в /etc/rc.conf.

# echo 'ftpd_enable="YES"' >> /etc/rc.conf
# echo 'ftpd_flags="-l -l"' >> /etc/rc.conf

Далее смотрим файл /etc/ftpusers, тут указаны пользователи которым запрещён доступ к ftp.

# cat /etc/ftpusers

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

# echo 'user /var/www/site.ru' >> /etc/ftpchroot

Где user — существующий на сервере пользователь, а  /var/www/site.ru — его каталог.
Запускаем ftp-сервер

# /etc/rc.d/ftpd start

И пробуем подключится с логином и паролем user.

Р.S.: Если у user в качестве shell используется /sbin/nologin, то подключение не произойдет. FTP-клиент сообщит что-то типа:

access denied

а в логах сервера будет:

ftpd: connection from 10.8.0.1 (10.8.0.1)
ftpd: FTP LOGIN REFUSED FROM 10.8.0.1, user

Проверить какой shell используется для юзера можно командой:

# pw usershow user

В этом случае нам нужно создать /sbin/nologin-ftp и прописать его у пользователя вместо /sbin/nologin. Делается это очень просто:

# echo '/sbin/nologin-ftp' >> /etc/shells
# ln -s /usr/sbin/nologin /sbin/nologin-ftp
# pw usermod user -s /sbin/nologin-ftp

Теперь подключение должно происходить без проблем.

Обзор бесплатной панели управления хостингом VestaCP

Сегодня я хочу рассказать о панели хостинга VestaCP. Это бесплатная легкая панель, которая несмотря на минимализм обладает почти всем необходимым для хостинга функционалом. Распространяется по лицензии GPLv3.
На текущий момент поддерживаются дистрибутивы: RHEL 5, RHEL 6, CentOS 5, CentOS 6, Debian 7, Ubuntu 12.04, Ubuntu 12.10, Ubuntu 13.04, Ubuntu 13.10, Ubuntu 14.04.
Начнем с установки, заходим на сервер по ssh и выполняем:

# curl -O http://vestacp.com/pub/vst-install.sh
# bash vst-install.sh

Установочный скрипт спросит хотим ли мы установить панель и все ПО к ней, попросит указать адрес электронной почты администратора и hostname сервера.

После всех вопросов система сообщит что установка займет около 15 минут. Об окончании установки мы можем узнать по сообщению в консоли, а также по письму на электронную почту указанную нами в установочном скрипте.

Открываем ссылку указанную в сообщении и логинимся.

Видим интерфейс панели, сменим язык интерфейса. Для этого кликнем по «admin» в правом верхнем углу. Откроется профиль пользователя, выбираем «Language» ru и жмем Save. И видим русский интерфейс панели.

После установки панели мы получаем готовое к работе и настроенное ПО: веб-сервер(nginx сразу устанавливается фронтэндом к апачу), почтовый сервер, сервер баз данных, ftp-сервер и сервер DNS. Т.е сразу после установки панели мы можем создавать пользователей, загружать на сервер свои сайты и разворачивать их. Интерфейс панели интуитивно понятен и не вызывает затруднений в работе.

Есть возможность добавлять дополнительные ip на сервер, редактировать cron и правила iptables. Также присутствуют шаблоны пользователей.

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

На мой взгляд, vestacp идеальный вариант для веб-мастера за счет своей бесплатности, открытости и богатого функционала. Для полноценного хостинга не хватает только жесткого разграничения ресурсов сервера(процессорного времени, памяти и т. д.).

Это обзор основных возможностей данной панели, подробнее ознакомится можно на официальном сайте. Там же есть форум с русскоязычной веткой, где можно обсудить панель и получить помощь.

Установка облака mail.ru в linux

Теперь облако mail.ru распространяется не бинарником, как я описывал в предыдущей статье, а установочными файлами под разные дистрибутивы. Список дистрибутивов и ссылки на установочные файлы здесь.

Установка теперь очень простая. Например под Ubuntu 14.04 LTS скачиваем установочный .deb пакет и выполняем в консоли
$ sudo dpkg -i mail.ru-cloud_15.04.0021-trusty_amd64.deb

Или просто запускаем через центр приложений ubuntu.
После установки бинарник будет находится в /usr/bin/cloud, приложение будет в меню Dash, а после запуска иконка появится в трее.

Уменьшаем сайт путем отдачи статического контента с облака.

Допустим у нас есть сайт на котором очень много графики, картинок и т.д, а места на хостинге мало и платить за его увеличение не хочется. Тем более сейчас многими компаниями место предоставляется совершенно бесплатно в облаках, таких как: яндекс диск, google drive, облако mail.ru и т. д. Я расскажу как с минимальными трудозатратами залить весь статический контент в облако mail.ru и отдавать его от туда.

Допустим у нас движок вордпресс, соответственно у нас статика лежит по ссылке:

http://site.name/wp-content/uploads/...

Заходим в http://cloud.mail.ru, создаем каталог, куда мы будем заливать статику сайта. Настраиваем к каталогу общий доступ и получаем ссылку для общего доступа.

Теперь после создания каталога заливаем туда папку uploads из каталога wp-content. Затем пройдя по полученой ссылке на папку и открыв прямую ссылку на любое изображение мы увидим, что ссылки на наши файлы имеют вид типа такого:

https://cloclo17.cloud.mail.ru/weblink/thumb/XXX/XXXXXXXX/site.name/uploads/...

Т.е структура каталогов в URL сохраняется и чтобы отдавать контент с облака нам нужно все ссылки на сайте заменить с

http://site.name/wp-content/

на

https://cloclo17.cloud.mail.ru/weblink/thumb/XXX/XXXXXXXX/site.name/

Это можно сделать двумя способами:

  1. Либо импортировать базу данных сайта к себе на компьютер, открыть любым редактором и сделать массовую замену указанного выше текста, сохранить и закачать изменённую базу назад на хостинг.(тут важно следить чтобы не изменилась кодировка при сохранении).
  2. Либо зайти в phpmyadmin. Затем выбрать нужную нам базу данных слева, выбрать закладку SQL и выполнить код типа такого:
UPDATE wp_posts SET post_content = REPLACE(post_content, 'http://site.name/wp-content/', 'https://cloclo17.cloud.mail.ru/weblink/thumb/XXX/XXXXXXXX/site.name/');

где wp_posts — таблица, post_content — поле таблицы.
По своему опыту скажу что лучше использовать первый способ, чтобы гарантированно заменить все ссылки в базе, а не только в постах.

После всех этих манипуляций нужно удостоверится что все наши картинки грузятся с облака и можно удалить содержимое папки uploads с хостинга.
При добавлении нового материала со статическим содержимым на сайт, он будет снова добавлятся в папку uploads, поэтому стоит регулярно выкачивать её содержимое в нашу папку в облаке и заменять ссылки в базе, если сайт часто обновляется. Таким образом наш сайт будет весить не более чем весит движок и база, все остальное будет отдаваться с облака.

Ошибка при запуске apf-firewall

Если при запуске apf получаем ошибку:

apf(23061): {glob} activating firewall
libkmod: ERROR ../libkmod/libkmod-module.c:1567 kmod_module_new_from_loaded: could not open /proc/modules: No such file or directory
Error: could not get list of modules: No such file or directory

или

kmod_module_new_from_loaded: could not open /proc/modules: No such file or directory

то в файле /etc/apf-firewall/conf.apf надо изменить значение директивы с

SET_MONOKERN="0"

на

SET_MONOKERN="1"

После этого apf-firewall должен запустится без ошибок.

Модуль remoteip в ubuntu 14.04

Почему-то с модулем mod_rpaf для apache2 в ubuntu 14.04 у меня не срослось. Не хотел он нормально работать и все. Поэтому было решено использовать модуль remoteip, который, собственно, выполняет те же функции.
Подключаем модуль.

# a2enmod remoteip

Создаем конфигурационный файл

# nano /etc/apache2/conf-available/remoteip.conf
RemoteIPHeader X-Forwarded-For
RemoteIPTrustedProxy 127.0.0.1 ip_сервера

Применяем конфиг

# a2enconf remoteip

Перезапускаем apache2

# service apache2 restart

Изменение размера раздела в linux без потери данных.

Условие: диск размечен так

Number  Start   End     Size    File system     Name  Flags
 1      1049kB  2097kB  1049kB                        bios_grub
 2      2097kB  514MB   512MB   ext2                  boot
 3      514MB   8706MB  8193MB  linux-swap(v1)
 4      8706MB  2000GB  1992GB  ext4

Раздел 4 это корень установленной на сервере ОС, требуется уменьшить этот раздел до 1000GB не поломав установленуую ОС и данные на разделе.

Для решения этой проблемы нам поможет утилита resize2fs, но для начала нам требуется чтобы модифицируемый раздел был отмонтирован. Поэтому загружаем сервер в recovery/rescue, т. е. с LiveCD.
В LiveCD выполняем

root@server:~# resize2fs /dev/sda4 1000G
resize2fs 1.42 (29-Nov-2011)
Please run 'e2fsck -f /dev/sda4' first.

В первый раз у меня программа ругнулась, что сначала нужно сделать e2fsck, делаем

root@server:~# e2fsck -f /dev/sda4
e2fsck 1.42 (29-Nov-2011)
/dev/sda4: recovering journal
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
Free blocks count wrong (478307399, counted=478307291).
Fix<y>? yes

Free inodes count wrong (121507397, counted=121507389).
Fix<y>? yes


/dev/sda4: ***** FILE SYSTEM WAS MODIFIED *****
/dev/sda4: 61891/121569280 files (0.1% non-contiguous), 7945765/486253056 blocks

Теперь повторно запускаем resize2fs

root@server:~# resize2fs /dev/sda4 1000G
resize2fs 1.42 (29-Nov-2011)
Resizing the filesystem on /dev/sda4 to 262144000 (4k) blocks.
The filesystem on /dev/sda4 is now 262144000 blocks long.

На этот раз все выполнилось успешно и раздел уменьшился. Грузимся в нормальный режим, проверяем что все работает. А освобожденное на диске место размечаем по своему усмотрению.

Ранее Ctrl + ↓