Клочки бумаги, на которых обычно ведутся записи, имеют обыкновение теряться, если их вовремя не подшить. Мысли на тему линукса, а может и не только его, - чтоб не забыть.
Это вольный перевод найденного в инете комментария. В ubuntu синтаксис немного отличается в части указания названия томов, например не "lvrename lvm root root-old", а "lvrename /dev/lvm/root /dev/lvm/root-old". В остальном все соответствует.
Потребуется
несколько перезагрузок.
Для начала
переименуем оригинальный root во что-то
новое, чтобы дать это имя снапшоту.:
# lvrename lvm root
root-old
# lvcreate -n root
-s lvm/root-old -L 10G
Перезагрузимся,
чтобы «новый» root смонтировался и мы
могли произвести изменения. После этого
мы можем их протестировать, а также
вернуться к старой системе.
# lvrename lvm root
root-new
# lvrename lvm
root-old root
# reboot
Если мы хотим
откатить изменения и вернуть все как
было, выполняем (из старой системы)
# lvremove
lvm/root-new
Если мы хотим
применить изменения, выполняем (из
старой истемы)
# lvconvert --merge
lvm/root-new
или из новой
системы
# lvrename lvm root
root-new
# lvconvert --merge
lvm/root-new
# lvrename lvm
root-old root
# reboot
Система
откажется применять изменения на
открытых томах, так что мердж произойдет
во время загрузки.
Сегодня я бы хотел поговорить о такой серьезной с точки зрения надежности вещи, как линуксовый софтварный рейд. А, вернее, показать, как можно спасти систему, которая требует замены дисков, на которых она и была установлена. Я рассмотрю 2 дистрибутива линукса - CentOS 7 и Debian 8 - которые будут поставлены в идентичные исходные условия. Также, так как тема мне кажется достойной лишней наглядности, помимо традиционных скриншотов и текста, в конце я оставлю ссылки на видео, в которых полностью показана вся процедура: от момента установки исходной системы, до восстановления ее работоспособности на новых дисках.
Общая часть: приготовление и восстановление бэкапа
В качестве исходной системы у нас Дебиан/Центось, установленные на один ext4-раздел, который зеркалится на 2 физических диска (скриншоты с центоси).
Легким движением руки выдираем один из дисков, создавая деградацию рейда.
Время делать бэкап =)
Конечно лучше если бэкап уже есть, но в нашем простом случае сделать бэкап также легко:
tar -czpvf /mnt/backup.tgz --exclude=/dev --exclude=/proc --exclude=/sys --exclude=/mnt /
Эта команда создаст сжатую копию всего корня, за исключением трех директорий содержимое которых регенерируется автоматически, и директории /mnt, в которой у нас в данном случае нет ничего, кроме файла бэкапа.
Когда бэкап приготовился, гасим машину и устанавливаем 2 новых харда, которые составят новое зеркало.
Также я использую убунтовый live cd "Boot-Repair" для дальнейших операции, но, собственно, встроенной функцией автоматического восстановления пользоваться не буду. Так что на месте этого диска может быть любой другой Live CD, главное чтобы совпадала архитектура и были доступны утилиты mdadm, chroot, и parted (в моем случае он идет с GUI)
Итак, теперь у нас есть машинка с тремя дисками: половинка бывшего рейда, от которой нам нужен только файл бэкапа; и два новых неотформатированных диска.
После загрузки с лайва, закрываем все выплывающие окошки и открываем редактор разделов. sda1 - бэкап, sdb и sdc - пустые
На дисках sdb и sdc создаем таблицу разделов (Device -> Create Partition Table). Я использую GPT, потому что она подразумевает возможность использования разделов большого объема, а также создает дополнительные сложности для восстановления системы.
После создания таблицы, на обоих дисках создаем симметричную конфигурацию: 2 неотформатированных раздела - первый большой под систему, второй маленький (я оставил буквально 10 мегабайт в конце диска).
Второй раздел нужен для установки загрузчика GRUB2 на GPT. Также необходимо этим разделам добавить флаг. После применения разметки, нужно кликнуть правой мышкой по разделу, выбрать Manage Flags и отметить флаг bios_grub. Это необходимо сделать также на обоих новых дисках.
Теперь, когда разделы подготовлены, открываем терминал и первым делом я устанавливаю mdadm, так как его нет на этом Live CD.
1
2
sudo bash
apt install mdadm
Так как архив у нас лежит не на простом диске, а диске, который некогда был частью рейда, необходимо этот самый рейд обнаружить.
(Warning! Обратите внимание, что в результате выполнения первой команды, при восстановлении центоси создается устройство /dev/md127, а при восстановлении дебиана - /dev/md0. Нижеследующий блок справедлив для центоси)
1
2
3
4
5
6
7
# сканируем систему на наличие рейдов# эта команда создаст устройство, в моем случае /dev/md127 - нашу # половинку зеркала с бэкапом
mdadm --assemble --scan
# создаем папку /mnt/backup и монтируем в нее найденный рейд
mkdir /mnt/backup
mount /dev/md127 /mnt/backup
Файлик бэкапа у нас в каталоге /mnt/backup/mnt/, теперь нужно приготовить новый рейд и залить на него бэкап.
1
2
3
4
5
6
7
8
9
10
11
12
13
# создаем новое устройство рейда# имя может быть любым незанятым, # например /dev/md1# --level=1 - зеркало# --raid-devices=2 - 2 диска в рейде
mdadm --create /dev/md1 --level=1 --raid-devices=2 /dev/sdb1 /dev/sdc1
# форматируем новый рейд
mkfs.ext4 /dev/md1
# создаем директорию и монтируем рейд в нее
mkdir /mnt/root
mount /dev/md1 /mnt/root
# распаковываем архив
tar -xpvf /mnt/backup/mnt/backup.tgz -C /mnt/root/
После распаковки нужно чрутнуться в корень восстанавливаемой системы.
1
2
3
4
5
6
7
8
9
10
11
# создаем недостающие директории
mkdir /mnt/root/dev
mkdir /mnt/root/proc
mkdir /mnt/root/sys
mkdir /mnt/root/mnt
# к первым трем монтируем рабочие директории лайва
mount -o bind /dev/ /mnt/root/dev/
mount -o bind /proc/ /mnt/root/proc/
mount -o bind /sys/ /mnt/root/sys/
# чрутимся
chroot /mnt/root/
С этого момента пути восстановления дебиана и центоси расходятся
Debian
После чрута выполняем команду
blkid
Она покажет ID нашего рейда /dev/md1.
Этот ID нужно прописать в /etc/fstab вместо имеющегося там.
Далее выполняем
1
2
3
4
5
6
7
8
9
10
# прописываем в конфиг данные актуального рейда
mdadm --detail --scan | grep md1 > /etc/mdadm/mdadm.conf
# пересобираем initrd
update-initramfs -u
# обновляем конфиг загрузчика
update-grub2
# устанавливаем загрузчик на оба # физических диска
grub-install /dev/sdb
grub-install /dev/sdc
Собственно всё. Вытаскиваем старые диски, отключаем сидиром, перезагружаемся и видим наш дебиан в целости и сохранности.
CentOS
С центосью возни чуть больше, чем с дебианом, но ненамного.
После чрута правим /etc/fstab, заменяя айдишник корня на имя устройства. В нашем случае /dev/md1
(Attention! на картинках ниже везде используется /dev/md0 - не обращайте внимания, просто я его так назвал во время экспериментов с центосью)
После этого правим /etc/dracut.conf, раскомментируем параметр mdadmconf и присвоим ему значение yes.
Далее выполняем
mdadm --detail --scan | grep md1
Эта команда выдаст ID нашего нового рейда.
Этот ID нужно указать в файлике /etc/default/grub вместо старого
Теперь
1
2
3
4
5
6
7
8
9
10
11
12
13
14
# прописываем в конфиг данные актуального рейда
mdadm --detail --scan | grep md1 > /etc/mdadm.conf
# пересобираем initrd, # смотрим на ВАШ файлик *.img в директории /boot # и меняем версию по аналогии, если она отлична от моей
dracut /boot/initramfs-3.10.0-514.el7.x86_64.img 3.10.0-514.el7.x86_64 --force
# обновляем конфиг загрузчика
grub2-mkconfig -o /boot/grub2/grub.conf
# устанавливаем загрузчик на оба # физических диска
grub2-install /dev/sdb
grub2-install /dev/sdc
# создаем специальный файлик, без которого магии не случится
touch /.autorelabel
Перезагружаемся (один раз система перезагрузится автоматически - это нормально) и радуемся ожившей системе.
Работая с записями игровых стримов, столкнулся с необходимостью склеивать небольшие их кусочки в одно видео. Обычно с этим не возникает проблем, но в некоторых случаях приходится иметь дело с кусками, которые были записаны в разном разрешении, или разной частотой кадров, не говоря о разных кодеках. Обрабатывать видео в avidemux, в котором я это обычно делал, конечно было можно, но хотелось максимально автоматического решения. Оказалось что собрать такое самому не очень сложно, более того решение основано на совершенно бесплатных и мультиплатформенных утилитах: avconv (форк ffmpeg) и MP4Box.
Как же склеить разное видео? Алгоритм обработки следующий: привести исходные видеофрагменты к общему формату и характеристикам, затем собрать воедино. В качестве формата видеопотока был выбран H264, для аудио - mp3. Стоит учесть, что для успешного склеивания фрагментов, требуется не только общий формат, но и характеристики, такие как частота кадров или частота аудиопотока. Также надо иметь в виду, что в процессе видео подвергаются перекодированию, что не может не сказаться на качестве. Впрочем, для того видео, с которым нужно работать мне, это не критично, и вообще avconv весьма хорошо справляется с кодированием.
Итак, как же это юзать. Предположим мы имеем 2 видео: S1.flv и S2.flv. Переконвертим их командой:
avconv -i S1.flv -map 0 -vf "scale=iw*sar*min(1280/(iw*sar)\,720/ih):ih*min(1280/(iw*sar)\,720/ih),pad=1280:720:(ow-iw)/2:(oh-ih)/2" -c:a libmp3lame -ar 48000 -c:v libx264 -r 30 -bf 2 -g 30 -profile:v high -preset veryfast -level 42 O1.mp4 avconv -i S2.flv -map 0 -vf "scale=iw*sar*min(1280/(iw*sar)\,720/ih):ih*min(1280/(iw*sar)\,720/ih),pad=1280:720:(ow-iw)/2:(oh-ih)/2" -c:a libmp3lame -ar 48000 -c:v libx264 -r 30 -bf 2 -g 30 -profile:v high -preset veryfast -level 42 O2.mp4
Выглядит устрашающе, но на выходе мы получим 2 ролика с одинаковыми характеристиками и, даже, растянутых (или ужатых) до одинакового разрешения - 1280x720 - с добавленными черными полосами там, где это нужно. Последнее нужно для склеивания видео в один ролик, поэтому с черными полосами так или иначе придется смириться, а за процесс "скейлинга" отвечает замечательный параметр -vf, значение для которого вывел некто Kevin Locke, оно является практически ключевым местом всех преобразований и я очень рад что кто-то проделал эту работу за меня =). Параметры, с которыми можно попробовать поиграться:
-ar 48000 - частота аудиопотока -r 30 - частота кадров видео -g30 - частота ключевых кадров -preset veryfast - скорость кодирования, для улучшения качества можно выбрать veryslow или один из прочих пресетов H264.
После конвертации мы получим два файла: O1.mp4 и O2.mp4, контейнер выбран не случайно и заточен под утилиту MP4Box. Синтаксис объединения таков:
MP4Box -add O1.mp4 -cat O2.mp4 out.mp4
Стоит отметить, что параметр -add указывается для первого файла, для всех последующих справедлив параметр -cat.
На выходе получаем out.mp4, содержащий в себе все видеофрагменты в порядке их указания.
Разумеется данное решение не совсем автоматично без скрипта, а так как хотелось еще и платформонезависимого решения, то пришлось навая скрипт на питоне. Да, питон не входит в дитрибутив винды, но и avconv с MP4Box (входит в пакет GPAC) поставить придется (http://win32.libav.org/win64/ и http://gpac.wp.mines-telecom.fr/downloads/) зато после этого выходит действительно "однокнопочное" решение - стоит в консоли зайти в директорию с набором flv-файлов (формат можно указать в начале скрипта) и выполнить: python путь_к_скрипту
дальше можно откинуться на спинку кресла =)
Инструкция проверена на Linux Mint 12, в случае с другими дистрибутивами возможны нюансы в 8-м пункте, остальное вроде должно подойти к большинству популярных дистров использующих GRUB2.
Загрузиться с Live CD той же архитектуры, что и основная система
Смонтировать корневой раздел (в примере - sda1) в /mnt mount /dev/sda1 /mnt
При вынесенном в отдельный раздел каталоге /boot (в примере - sda2), смонтировать его в /mnt/boot mount /dev/sda2 /mnt/boot
Смонтировать каталоги/dev, /proc и /sys на их места в/mnt
mount --bind /dev /mnt/dev
mount --bind /proc /mnt/proc
mount --bind /sys /mnt/sys
Чрутнуться в /mnt chroot /mnt
Убедиться что существует файл /boot/grub/grub.cfg (если заведомо не известно, что он был удален), забэкапить cp /boot/grub/grub.cfg /boot/grub/grub.cfg.bak
Сгенерировать новый конфиг grub-mkconfig -o /boot/grub/grub.cfg
Заинсталлить загрузчик на диск (в примере - sda) grub-install.real /dev/sda
Убедиться что операция прошла успешно (читать консоль)
Установленный с установочными опциями LAMP (Apache+MySQL+PHP) Ubuntu Server 12.04.
Набор дополнительных пакетов для сборки:
aptitude install build-essential checkinstall libmysqlclient-dev libcurl4-openssl-dev libsnmp-dev libopenipmi-dev libiksemel-dev
(для 16.04 также: libxml2-dev php-mbstring php-bcmath php-xml )
Распакованный архив с заббиксом (все команды далее исполняются внутри корневой папки с исходниками).
Правка /etc/php5/apache2/php.ini:
post_max_size = 16M (или больше) max_execution_time = 300 (или больше) max_input_time = 300 (или больше) date.timezone = 'Etc/GMT-4' (для МСК)
Установка базы данных.
shell> mysql -u -p
mysql> create database zabbix character set utf8;
mysql> quit;
shell> mysql -u -p zabbix < database/mysql/schema.sql
# stop here if you are creating database for Zabbix proxy
shell> mysql -u -p zabbix < database/mysql/images.sql
shell> mysql -u -p zabbix < database/mysql/data.sql
Создание пользователя для работы сервиса.
groupadd zabbix ; useradd -g zabbix zabbix
Конфигурационные ключи и установка.
Для сервера: ./configure --enable-server --enable-agent --with-mysql --enable-ipv6 --with-net-snmp --with-libcurl --with-openipmi
Для агента: ./configure --enable-agent --enable-static
make
checkinstall
Кофигурационные файлы Zabbix.
Сервер: /usr/local/etc/zabbix_server.conf (DB, username, password. Остальные параметры в зависимости от нагрузки)
На данный момент Хром использует системные настройки прокси, и через интерфейс прописать отличный прокси нельзя. Однако, можно заставить хром использовать не системный прокси, указав его параметром командной строки при запуске:
Давненько я не писал ничего. Однако пару лет назад мне довелось с проблемой поиска потерянного среди цисок компа, которую мне удалось для себя приемлемо решить. Так как полный текст был написан в гуглодоксах и не захотел легко, просто и без потерь перекопироваться сюда, просто оставлю ссылку на гуглодок.
Устанавливаем memcached и пару нужностей для eaccelerator: aptitude install memcached php5-dev make
Устанаваливаем eaccelerator: cd /tmp/ wget http://bart.eaccelerator.net/source/0.9.5.3/eaccelerator-0.9.5.3.tar.bz2 tar xvjf eaccelerator-0.9.5.3.tar.bz2 cd eaccelerator-0.9.5.3 phpize ./configure --enable-eaccelerator=shared make make install
[PHP] ; eAccelerator configuration ; Note that eAccelerator may also be installed as a PHP extension or as a zend_extension ; If you are using a thread safe build of PHP you must use ; zend_extension_ts instead of zend_extension extension = "eaccelerator.so" eaccelerator.shm_size = "16" eaccelerator.cache_dir = "/var/cache/eaccelerator" eaccelerator.enable = "1" eaccelerator.optimizer = "1" eaccelerator.check_mtime = "1" eaccelerator.debug = "0" eaccelerator.filter = "" eaccelerator.shm_max = "0" eaccelerator.shm_ttl = "0" eaccelerator.shm_prune_period = "0" eaccelerator.shm_only = "0" eaccelerator.compress = "1" eaccelerator.compress_level = "9" eaccelerator.allowed_admin_path = "/var/www/eaccelerator"
Захотелось связать несколько удаленных компьютеров в одну локальную сеть. Сказано - сделано.
Настройка сервера.
Берем сервер с ubuntu (или debian), доступный для клиентов через интернет. Ставим необходимое:
sudo aptitude install ppp pptpd
Приводим следующие файлы к подобному виду:
/etc/pptpd.conf ~~~~~~~~~~~~~~~~~~~~~~~~~~ option /etc/ppp/pptpd-options logwtmp localip 10.1.1.1 # адрес сервера в создаваемой виртуальной сети remoteip 10.1.1.50-59 # адреса, раздаваемые клиентам
(диапазоны адресов не должны пересекаться с уже используемыми клиентами в их реальных сетях)
/etc/ppp/pptpd-options ~~~~~~~~~~~~~~~~~~~~~~~~~~ lock name pptpd nodefaultroute refuse-pap refuse-mschap require-mschap-v2 #require-mppe-128 # шифрование. В теории должно работать, на практике у меня не вышло его завести proxyarp nodefaultroute
cat /etc/ppp/chap-secrets ~~~~~~~~~~~~~~~~~~~~~~~~~~ # Secrets for authentication using CHAP # client server secret IP addresses user pptpd password * user2 pptpd password2 10.1.1.54
(заводим пользователей, указываем пароли и, опционально, айпишники, которые они будут получать)
После настройки перезапускаем демона: sudo /etc/init.d/pptpd restart Настройка клиентов.
XP:
Открываем список сетевых соединений и запускаем мастера создания подключений:
Выбираем подключение использующее VPN или модемное соединение
Выбираем VPN
Вбиваем имя для соединения
Опциональный шаг - если есть вручную устанавливаемые соединения типа модемного, указываем надо ли устанавливать такое соединение (ну, если оно и ведет в интернет, например) перед нашим
Указываем адрес сервера
Удобства ради добавляем ярлык соединения на рабочий стол и закрываем мастера
Далее открывается окно с вводом имени и пароля. Перед этим заходим в свойства:
На вкладке безопасности снимаем галку шифрования:
Если не предполагается использование клиентами интернета через наш сервер, на вкладке открываем свойства TCP/IP, в новом окне открываем дополнительные настройки и снимаем галку использования маршрута по умолчанию:
Для друга, имеющего Eee PC 701, заснял пару скринкастов с установкой и первичным допиливанием Lubuntu. Слабо представляю возможную целевую аудиторию, но может кому и будет полезно залицезреть процесс. Снимался каст с виртуалбокса, разумеется предварительно все было проверено на целевой ееешке.
Часть первая: установка оси (67.9 МБ) Использовался DVD убунты. Неграфическая установка системы в режиме "хочу консоль онли", с последующим натягиванием lubuntu-desktop и gdebi. Разбиение диска "все под root".
Часть вторая: допиливание (53.9 МБ) Установка обновленного pcmanfm для исправления бага с ассоциациями приложений. Установка gXneur и Google Chrome. Добавление русской раскладки (тут меня можно отдельно покусать за решение). Поверхностная пробежка по фейсу, панелькам.
В целом, как я сказал, писалось для друга-эдвансд-виндузядника, имевшего дело с убунту но не переустанавливавшего ее самостоятельно, так что этот скринкаст определенно будет слишком сложен для кого-то одного, и слишком скучен для кого-то другого - я гарантирую это =)
Для начала немного о моем домашнем интернете. У меня их два: 1. первый (Inet1) - обычный домашний интернет через локалку 2. Yota, втыкаемая в ноутбук
Схема:
Notebook - Yota | Inet1 - Router - Srv | PS3
Ноут связан с домашним сервером через роутер, но инет обычно получает от йоты. PS3 инетится от роутера, но качество интернета у моего провайдера оставляет желать лучшего.Отсюда справедливое желание: оставить домашнего провайдера для торентов, а PS3 подключить к йоте, сотворив из линуксового ноута простейший шлюз.
Итак, на повестке дня 2 вопроса: 1. Как из компа под линуксом сделать простеший шлюз? 2. Как настроить PS3 для работы через шлюз в целом, и через Yota-инет в частности?
Ответы на оба вопроса элементарны. Чтобы линуксовый комп стал шлюзом, достаточно выполнить: # echo 1 > /proc/sys/net/ipv4/ip_forward # iptables -P FORWARD ACCEPT # iptables -t nat -A POSTROUTING -j MASQUERADE
Разумеется, все интерфейсы, которые предполагается использовать, должны быть настроены. В моем случае одним интерфейсом является подключенная Yota, а второй имеет адрес (192.168.1.5) внутри локальной сети (192.168.1.0/24).
Теперь о PS3. Заходим в настройки сети и вбиваем все руками. Отмечу стратегически важное: IP - 192.168.1.50 (свободный айпишник внутри локальной сети) Маска - 255.255.255.0 (используемая в локальной сети) Шлюз - 192.168.1.5 (локальный адрес йотового компа-шлюза) DNS - 8.8.8.8 (гугловский DNS-сервер) DNS - 8.8.4.4 (еще гугловский DNS-сервер) MTU - 1400 (с другими работать отказалась, возможно тут скрывается йота-особенность) UPnP - выключить Прокси - не использовать
С такими настройками приставка радостно ломится в ноут за инетом и получает его от йоты, гип-гип ура и все такое =)
Бывает возникает желание сохранить все, что происходит в терминале. Вывод одной программы, конечно, можно перенаправить в файл, а небольшой кусочек просто скопипастить. Но если коннектишься к удаленному серваку (в моем случае вообще - циске) и долго и упорно его конфигуришь, эти подходы могут быть не очень подходящими. На эти случаи есть замечательная команда «script». Формат:
scriptимя_файла_лога
после выполнения скрипт начинает сохранять все вводимые комманды и ответ терминала на них. Для окончания записи нужно ввести просто
Сидя в линуксе, я использую DameWare Remote Control из-под виртуалбокса для управления вин-машинами. Начиная с какой-то версии VirtualBox начал подвисать как только я коннектился к удаленной машине. Решение оказалось простым: чтобы избежать подвисания следует зайти в меню «View» и, выбрав пункт «Local Global Options...», снять галку «Warning Border on Connect» — во всем виновато анимированное обрамление окна удаленной машины.