Настройка хранилища с iSCSI для VMware

Не нашел нормальной статьи как из говна и палок собрать СХД для ESXI от вмвари, так что распишу сам как же это делается.

Для начала нужно СХД.

Подготовка iSCSI-хранилища

Назовем это сервер-хранилище, чтобы не путать с серверами вмвари.

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

Сразу хинт: в рабочей обстановке на сервере скорее всего не будет интернета, поэтому для установки софта лучше развернуть  отдельный дебиан на сервере (виртуалке) с доступом и в инет и в локалку, поставить на него apt-cacher-ng, а на нашей разворачиваемой хранилке создать файл «/etc/apt/apt.conf.d/66proxy» с содержимым

 
 
  1. Acquire::http { Proxy "http://IP:3142"; }

 Тогда конкретно apt будет качать все через этот «прокси» и не придется настраивать настоящую проксю, которая скорее всего не нужна а может и противоречить безопасности.

Однако про iSCSI. Ставим единственный необходимый пакет:

apt update && apt install tgt

После этого добавляем конфиг

/etc/tgt/conf.d/storage_target.conf:
 
  1. <target iqn.2019-10.server1.domain.local:lun1>
  2. scsi_id IET 00010001
  3. controller_tid 1
  4. lun 1
  5. backing-store /dev/mapper/server1-storage
  6. </target>

 

Что тут почем:

iqn.2019-10.server1.domain.local:lun1 — тут iqn.2019-10 — это стандартное начало с указанием даты создания луна  например; storage1.server1.local — адрес нашего сервера; lun1 — первый (и единственный) лун. Фактически во всей этой строке можно писать значения от балды, они несут скорее идентификационное значение для нас.

«scsi_id IET 00010001» , «controller_tid 1» и «lun 1» —  айдишник луна,  айдишник контроллера луна и номер луна, все идут в связке и имеют важное значение, если в планах подключение нескольких импровизированных серверов-хранилищ к серверу с вмварью. Чтобы вмварь не подумала что ваши два (три, пять, двадцать два) сервера-хранилища содержат один и тот же лун,  все эти номера должны быть уникальны. Если у вас по одному луну на хранилище — просто нумеруйте их последовательно: 00010001, 1, 1 — для первого сервера-хранилища; 00020001, 2, 2 — для второго; 00030001, 3, 3 — для третьего и т.д.

backing-store — неотформатированное  блочное устройство, в моем случае том LVM. Имя должно быть уникально, разумеется, в пределах сервера-хранилища.

В моем случае я настраиваю два хранилища, так что вот конфиг второго

/etc/tgt/conf.d/storage_target.conf:
 
  1. <target iqn.2019-10.server2.domain.local:lun1>
  2. scsi_id IET 00020001
  3. controller_tid 2
  4. lun 2
  5. backing-store /dev/mapper/server2-storage
  6. </target>

 

Собственно, всё. Стоит только уточнить — сервер-хранилище и esxi-сервер должны быть в одной подсети, по крайней мере если у вас ESXI не одной из последних версий, которые научились в машрутизируемый iSCSI. Я буду использовать старенький уже ESXI 5, так что для моего случая это замечание справедливо.

Настройка сервера ESXI

Итак, у меня отдельно стоящий сервер ESXI без — это важно — железного iSCSI-адаптера. Если у вас они есть и вмварь их видит (как на картинке ниже) — стоит использовать их, если нет — нажимайте синюю ссылку Add над списком:

После нажатия, вам должны предложить добавить софтварный iSCSI-адаптер

Окей, добавили

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

Дальше переходим на вкладку Dynamic Discovery и добавляем айпишники серверов-хранилищ (порт по умолчанию)

Закрываем окна, соглашаемся обновить список лунов и вуаля — видим по два имени на одно однолунное хранилище (имя луна имя контроллера). Обратите внимание — айдишники луна и контроллера входят в имя (к id контроллера дописывается «0000»), а номер луна — показывается в графе LUN.

 

Теперь остается через Storage — Add storage превратить луны в хранилища VMware

Debian Installer: Detect network hardware, missing firmware BNX2

При установке дебиана на сервера подобные IBM x3650 можно столкнуться с ошибкой определения сетевых драйверов: «Some of your hardware needs non-free firmware files to operate», что означает необходимость подсунуть инсталлятору несвободные драйвера, указанные ниже.

В данном случае это «bnx2/bnx2-mips-09-6.2.1b.fw», но может быть и другой в зависимости от железа. Необходимые драйвера можно скачать вот тут: https://github.com/cernekee/linux-firmware/tree/master/bnx2. Их нужно положить на съемный носитель как предписывает инсталлятор (то есть, в данном случае, в папку bnx2 в корне флешки) и нажать YES. Вполне возможно, что операцию придется провести несколько раз, если в сервере несколько сетевых карт, требующих разных драйверов — в таком случае можно скачать их все сразу, или подсовывать по мере необходимости. Отмонтировать или монтировать флешку не нужно — можно смело втыкать и вытыкать из порта сколько понадобится.

Из моих наблюдений: драйвера не подцеплялись со съемного диска Zalman VE200, эмулирующего CD-привод с ISO-образом инсталлятора. Может особенность конкретного устройства, но скорее потому что сам диск был отформатирован в NTFS, так что флешку под дрова лучше сразу форматнуть в FAT32.

Если бы линукс был популярен — были бы и вирусы!

В очередной раз услышал этот боян. Честно говоря не слышал его уже давно, но, оказывается, за последние 15-20 лет мало что поменялось — удивительно [сарказм].

Странны тут две вещи. Во-первых, что люди с поразительной стабильностью верят в одни и те же утверждения, хотя за последние даже 10 лет IT-сфера значительно перетряхнулась благодаря тем же мобилочкам и облачным сервисам, что, как мне кажется, напрямую влияет и на вирусописателей. Появление таких сущностей как ботнеты и вирусы-шифровальщики говорит о развитии как современного IT в целом, так и адаптации вирусов к этим изменениям.

И из этого вытекает второе удивительное: несмотря на очевидное развитие IT во всех — как положительных так и отрицательных — областях, люди считают что линукс — совершенно неинтересная платформа для вирусописателей только потому, что его процент на десктопах все еще низок. Это при том что линуксы до сих пор занимают доминирующее положение на всех серверах имеющих отношение к интернет-службам, при том что на линуксовом ядре работают эти наши андроиды (а значит как минимум ядерные уязвимости там могут присутствовать вплоне), медиацентры, телевизоры и чуть ли не холодильники. И это все — масса сетевых устройств, которая не может не являться офигенным лакомым кусочком для организаторов тех же ботнетов, с которых можно ДДоСить ресурсы за бабло, или заниматься противоправными вычислениями чего-либо. И, мне кажется, ушли уже времена, когда кто-то посерьезке атаковал конечные компы пользователя, засылая кейлоггеры и прочее такое, что могло бы стырить пользовательские данные. Те же шифровальщики теперь просто «берут в заложники» ваши данные и вымогают бабло за расшифровку. Но в остальном, кмк, вирусы превратились скорее в сервисы предоставления ресурсов миллионов компов, и те же вебсервера сейчас бы пачками складывались и агонизировали без антивирусов, держись защита линукса лишь на его «неинтересности». Странно что люди в современном мире этого все еще не понимают.

LVM: шпаргалка

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

Перво-наперво

У нас должно быть свободное место в Volume Group.  Нет смысла без особой необходимости забивать все свободное место логическими томами, когда их свободное место будет использовано не до конца. Если у нас один хард на 500 гиг, мы делаем группу на весь этот объем, а дальше, например, делаем один том в 1G под swap, другой — в 9G под /, и, например, третий — на 50G под /home. У нас остается  440G свободного места, которое мы в любой момент можем докинуть в любой раздел, а также использовать под снапшоты. Соу…

Как добавить места на Logical Volume

Увеличение можно проделывать на смонтированной файловой системе.

Допустим, у нас есть LVM-том с линуксовым корнем /dev/mypc/root, содержащий на себе линуксовый корень. Докинуть 100 мегабайт можно командой:

 
 
  1. lvextend -L +100m /dev/mypc/root
  2. resize2fs /dev/mypc/root

 

Первая команда увеличит том, вторая — распространит на него файловую систему.

 

Как сделать и откатить снапшот

Допустим, у нас все еще есть LVM-том /dev/mypc/root, содержащий на себе линуксовый корень. Если нам нужно, например, накатить новые дрова для видюхи и мы боимся все сломать, делаем снапшот:

 
 
  1. lvcreate -L2G -s -n rootsnapshot /dev/mypc/root

 

Эта команда сделает снапшот /dev/mypc/rootsnapshot, который будет содержать состояние на момент создания снапшота. При этом есть ограничение в 2 гига на изменения в нашем корне, если превысим — снапшот перестанет быть валидным и его можно будет только удалить:

 
 
  1. lvremove /dev/mypc/rootsnapshot

 

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

 

Автоматическое увеличение размера снапшота LVM

Тут все просто, но не так просто, как часто пишут в интернетах. Нужно:

  1. Изменить файлик /etc/lvm/lvm.conf:
    snapshot_autoextend_threshold = 80
    snapshot_autoextend_percent = 20
    monitoring = 1Эти опции включают мониторинг, а так же увеличивают размер снапшота на 20% (от текущего размера) каждый раз, когда он оказывается занят изменениями на 80%.
  2. Установить dmeventd, который может не стоять, но который нужен чтобы все работало!

Теперь, когда наш снапшот умеет расти в размере и ему почти ничего не страшно, можно поиздеваться над корнем и откатить все изменения командой:

 
 
  1. lvconvert --merge  /dev/mypc/rootsnapshot

 

Вообще эта команда должна производиться при отмонтированном разделе, но так как в нашем случае это корень, то отмонтировать его не получится, и lvconvert скажет, что сделает все в лучшем виде при следующей активации тома — то есть при перезагрузке.

 

Как смигрировать на другой физический диск

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

Допустим у нас есть диск /dev/sda. На его разделе /dev/sda1 у нас покоится Volume Group «mypc» с нашими логическими томами:

  1. root — с корнем линукса (/),
  2. home — с домашними  каталогами (/home),
  3. swap — с разделом подкачки.

И нам нужно все это добро перенести на новый хард — /dev/sdb, который гол как сокол и ничего ж там нет.

Готовим новый диск

 
 
  1. # Создаем раздел на новом диске:
  2. parted -a opt /dev/sdb mkpart primary 0% 100%
  3. # Создаем физический том LVM:
  4. pvcreate /dev/sdb1
  5. # Расширяем Volume Group на новый физический том:
  6. vgextend mypc /dev/sdb1

 

Сдвигаем наши три логических тома со старого физического тома на новый:

 
 
  1. pvmove -n /dev/mypc/root /dev/sda1 /dev/sdb1
  2. pvmove -n /dev/mypc/home /dev/sda1 /dev/sdb1
  3. pvmove -n /dev/mypc/swap /dev/sda1 /dev/sdb1

 

Избавляемся от старого харда

 
 
  1. # Удаляем физический том LVM из группы "mypc":
  2. vgreduce mypc /dev/sda1
  3. # Удаляем физический том LVM:
  4. pvremove /dev/sda1

 

Устанавливаем загрузчик на новый диск и обновляем его конфиг:

 
 
  1. grub-install /dev/sdb
  2. update-grub

 

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

Как сделать клон логического тома

Два хороших источника по этим операциям: www.voleg.info (archive.org) и redhat.com (archive.org)

Сначала делаем зеркальный рейд из тома, который хотим склонировать

 
 
  1. lvconvert --type mirror --alloc anywhere -m1 /dev/mypc/root
  2. # или, если хотим указать конкретный физически том для расположения клона
  3. lvconvert --type mirror -m1 /dev/mypc/root /dev/sdb1

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

 
 
  1. # отрезаем от зеркала том с именем rootcopy, состоящий из 1 копии, лежащей на PV /dev/sda1
  2. lvconvert --splitmirrors 1 --name rootcopy /dev/mypc/root /dev/sda1
  3. # более общий случай: если у нас зеркало составлено из более чем двух копий:
  4. # отрезаем от зеркала том с именем rootcopy, который сам будет являться зеркалом из томов, лежащих на PV /dev/sda1 и /dev/sdс1
  5. lvconvert --splitmirrors 2 --name rootcopy /dev/mypc/root /dev/sd[ac]1

В chrome под linux не работает встроенный чат twitch

Столкнулся с фантастической проблемой на одном из своих компов. Встроенные в сайты чаты твича перестали работать, выдавая или стандартную заглушку:

Или показывая чат, иногда с его содержимым, но с «колесиком» загрузки поверх и без возможности что-либо писать:Такая проблема проявлялась только в хроме (вернее в хромиуме, но не суть) и только на одном из двух аналогичных в плане софта компов. Также проблема возникала только если чат был встроен по ссылке вида «http://www.twitch.tv/channelname/chat» и не проявлялась при встраивании по ссылке вида «https://www.twitch.tv/embed/channelname/chat».

Так как на втором компе с той же версией линукса (Linux Mint 17.3) и Chromium ( 64.0.3282.140) проблемы не наблюдалось, я заглянул в консоль (CTRL   Shift I) и сравнил ошибки. И действительно, на «нерабочем» компе наблюдалась ошибка «Uncaught RangeError: Unsupported time zone specified undefined» Оказалось, что на этом компе у меня выставлена таймзона «-3», соответствующая Москве, а не зона с названием «Москва». Не знаю какого рожна хром решил к этому придраться, но выставление зоны на «именную» решило данную дикую проблему.

Напомню, что в этих наших debian-like дистрах зона меняется командой:

 
 
  1. dpkg-reconfigure tzdata

 

Второй вариант где может не работать

Идем в настройки хрома:
«Настройки контента» -> «Файлы Cookie», убеждаемся что снят флаг «Блокировать сторонние файлы cookie»

Поправить пакет *.deb на скорую руку

Столкнулся с банальной задачей — после быстрого формирования пакета (агента системы мониторинга) при помощи checkinstall, захотелось дополнить его правильным конфигом и стартовыми скриптами. На скорую руку это делается примерно так:

  1. Распаковываем пакет:
    dpkg-deb -R zabbix-agent.deb extracted/
  2. Внутри каталога extracted/DEBIAN создаем исполняемый файл postinst с требуемым скриптом:
     
     
    1. #!/bin/bash
    2. #
    3. #тело скрипта
    4. #
    5. exit 0
  3. Докладываем в extracted/ все необходимые файлы, размещая по нужным путям. Не забываем о правах доступа при создании каталогов, если софт будет работать не от рута.
  4. Собираем пакет обратно:
    dpkg-deb -b extracted
    mv extracted.deb  zabbix-agent-new.deb

Источники гуглинга:
https://askubuntu.com/questions/825321/
https://askubuntu.com/questions/62534/