LVM восстановление рейда

Есть сервер на котором выполнили vgreduce —removemissing vgraid до замены диска на новый и репейра. В итоге картинка была такая

# lvs -a -o +devices
  LV                VG     Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert Devices
  lvraid            vgraid rwi-a-r---  9,98g                                    100,00           lvraid_rimage_0(0),lvraid_rimage_1(0),lvraid_rimage_2(0),lvraid_rimage_3(0)
  [lvraid_rimage_0] vgraid iwi-aor---  4,99g                                                     /dev/sdb(1)
  [lvraid_rimage_1] vgraid iwi-aor---  4,99g                                                     /dev/sdd(1)
  [lvraid_rimage_2] vgraid iwi-aor---  4,99g                                                     /dev/sde(1)
  [lvraid_rimage_3] vgraid vwi-a-r---  4,99g
  [lvraid_rmeta_0]  vgraid ewi-aor---  4,00m                                                     /dev/sdb(0)
  [lvraid_rmeta_1]  vgraid ewi-aor---  4,00m                                                     /dev/sdd(0)
  [lvraid_rmeta_2]  vgraid ewi-aor---  4,00m                                                     /dev/sde(0)
  [lvraid_rmeta_3]  vgraid ewi-a-r---  4,00m

Репейр не получалось сделать

# lvconvert --repair vgraid/lvraid /dev/sdf
Attempt to replace failed RAID images (requires full device resync)? [y/n]: y
  Unable to remove 1 images:  Only 0 devices given.
  Failed to remove the specified images from vgraid/lvraid
  Failed to replace faulty devices in vgraid/lvraid.

В итоге удалось починить таким способом. Не претендую на правильность и не мне говорить, что сперва следует протестировать.

Что хочу сделать. Обмануть рейд сказав, что у него все работает, затереть на нужном диске метадату, получив статус unknown device(1) и дальше по ману восстановить рейд.

Смотрю архив бэкапов конфигов группы.

vgcfgrestore --list vgraid

Интересует вот этот

File:         /etc/lvm/archive/vgraid_00003-2109598279.vg
VG name:      vgraid
Description:  Created *before* executing 'vgreduce --removemissing vgraid'
Backup Time:  Mon Apr 15 16:01:59 2019

Делаю на всякий случай копию этого файла

cp /etc/lvm/archive/vgraid_00003-2109598279.vg /etc/lvm/archive/vgraid_00003-2109598279.vg.orig

Редактирую /etc/lvm/archive/vgraid_00003-2109598279.vg и смотрю uuid нужного диска

# vim /etc/lvm/archive/vgraid_00003-2109598279.vg

Заменяю
device = "unknown device"       # Hint only
на
device = "/dev/sdf"     # Hint only

и
flags = ["MISSING"]
на
flags = []

Создаю PV

# pvcreate --uuid "PT8JJy-5BvS-fzCv-qO20-cwzv-FWIl-HQ83Xb" --restorefile /etc/lvm/archive/vgraid_00003-2109598279.vg /dev/sdf
  Physical volume "/dev/sdf" successfully created

Добавляю его в группу

# vgextend vgraid /dev/sdf
  Volume group "vgraid" successfully extended

Восстанавливаю групу. Теперь в ней нет информации о потерянном диске.

# vgcfgrestore -f /etc/lvm/archive/vgraid_00003-2109598279.vg vgraid
  Restored volume group vgraid
# lvs -a -o +devices
   LV                VG     Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert Devices
   lvraid            vgraid rwi-a-r---  9,98g                                    100,00           lvraid_rimage_0(0),lvraid_rimage_1(0),lvraid_rimage_2(0),lvraid_rimage_3(0)
   [lvraid_rimage_0] vgraid iwi-aor---  4,99g                                                     /dev/sdb(1)
   [lvraid_rimage_1] vgraid iwi-aor---  4,99g                                                     /dev/sdd(1)
   [lvraid_rimage_2] vgraid iwi-aor---  4,99g                                                     /dev/sde(1)
   [lvraid_rimage_3] vgraid iwi-a-r---  4,99g                                                     /dev/sdf(1)
   [lvraid_rmeta_0]  vgraid ewi-aor---  4,00m                                                     /dev/sdb(0)
   [lvraid_rmeta_1]  vgraid ewi-aor---  4,00m                                                     /dev/sdd(0)
   [lvraid_rmeta_2]  vgraid ewi-aor---  4,00m                                                     /dev/sde(0)
   [lvraid_rmeta_3]  vgraid ewi-a-r---  4,00m                                                     /dev/sdf(0)

Ура. Получилось.

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

Трем метадату. Одного килобайта достаточно для того, чтоб перевести его в состояние unknown device(1) Нужно для того, чтоб он заново не влетал в групу.

# dd if=/dev/zero of=/dev/sdf bs=512 count=2
# lvs -a -o +devices
  WARNING: Device for PV PT8JJy-5BvS-fzCv-qO20-cwzv-FWIl-HQ83Xb not found or rejected by a filter.
  LV                VG     Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert Devices
  lvraid            vgraid rwi-a-r-p-  9,98g                                    100,00           lvraid_rimage_0(0),lvraid_rimage_1(0),lvraid_rimage_2(0),lvraid_rimage_3(0)
  [lvraid_rimage_0] vgraid iwi-aor---  4,99g                                                     /dev/sdb(1)
  [lvraid_rimage_1] vgraid iwi-aor---  4,99g                                                     /dev/sdd(1)
  [lvraid_rimage_2] vgraid iwi-aor---  4,99g                                                     /dev/sde(1)
  [lvraid_rimage_3] vgraid iwi-a-r-p-  4,99g                                                     unknown device(1)
  [lvraid_rmeta_0]  vgraid ewi-aor---  4,00m                                                     /dev/sdb(0)
  [lvraid_rmeta_1]  vgraid ewi-aor---  4,00m                                                     /dev/sdd(0)
  [lvraid_rmeta_2]  vgraid ewi-aor---  4,00m                                                     /dev/sde(0)
  [lvraid_rmeta_3]  vgraid ewi-a-r-p-  4,00m                                                     unknown device(0)

Отключаю диск

echo 1 > /sys/block/sdf/device/delete

Ищю его заново. Здесь могут быть host, host1, host2. Смотрю lsblk когда он появится. Имя диска может измениться. На тестовом сервере три раза имя менялось на новое, на боевом осталось прежним.

echo "- - -" > /sys/class/scsi_host/host2/scan

Дальше по манам.

# pvcreate /dev/sdi
  WARNING: Device for PV PT8JJy-5BvS-fzCv-qO20-cwzv-FWIl-HQ83Xb not found or rejected by a filter.
  Physical volume "/dev/sdi" successfully created
# vgextend vgraid /dev/sdi
  WARNING: Device for PV PT8JJy-5BvS-fzCv-qO20-cwzv-FWIl-HQ83Xb not found or rejected by a filter.
  WARNING: Device for PV PT8JJy-5BvS-fzCv-qO20-cwzv-FWIl-HQ83Xb not found or rejected by a filter.
  Volume group "vgraid" successfully extended
# lvconvert --repair vgraid/lvraid /dev/sdi
  WARNING: Device for PV PT8JJy-5BvS-fzCv-qO20-cwzv-FWIl-HQ83Xb not found or rejected by a filter.
  Attempt to replace failed RAID images (requires full device resync)? [y/n]: y
  Faulty devices in vgraid/lvraid successfully replaced.

Смотрю процесс восстановления

# lvs -a -o +devices
  WARNING: Device for PV PT8JJy-5BvS-fzCv-qO20-cwzv-FWIl-HQ83Xb not found or rejected by a filter.
  LV                VG     Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert Devices
  lvraid            vgraid rwi-a-r---  9,98g                                    28,13            lvraid_rimage_0(0),lvraid_rimage_1(0),lvraid_rimage_2(0),lvraid_rimage_3(0)
  [lvraid_rimage_0] vgraid iwi-aor---  4,99g                                                     /dev/sdb(1)
  [lvraid_rimage_1] vgraid iwi-aor---  4,99g                                                     /dev/sdd(1)
  [lvraid_rimage_2] vgraid iwi-aor---  4,99g                                                     /dev/sde(1)
  [lvraid_rimage_3] vgraid Iwi-aor---  4,99g                                                     /dev/sdi(1)
  [lvraid_rmeta_0]  vgraid ewi-aor---  4,00m                                                     /dev/sdb(0)
  [lvraid_rmeta_1]  vgraid ewi-aor---  4,00m                                                     /dev/sdd(0)
  [lvraid_rmeta_2]  vgraid ewi-aor---  4,00m                                                     /dev/sde(0)
  [lvraid_rmeta_3]  vgraid ewi-aor---  4,00m                                                     /dev/sdi(0)

Убираю хвосты

# vgreduce --removemissing vgraid
  WARNING: Device for PV PT8JJy-5BvS-fzCv-qO20-cwzv-FWIl-HQ83Xb not found or rejected by a filter.
  WARNING: Device for PV PT8JJy-5BvS-fzCv-qO20-cwzv-FWIl-HQ83Xb not found or rejected by a filter.
  Wrote out consistent volume group vgraid

Postfix: Illegal address syntax

Редко, но бывает вижу в логах постфикса такие ошибки:

Nov  6 17:22:44 mx postfix/smtpd[22836]: warning: Illegal address syntax from unknown[192.168.XX.XX] in RCPT command: <'email_1@example.com'>
Nov  6 17:22:45 mx postfix/smtpd[22836]: warning: Illegal address syntax from unknown[192.168.XX.XX] in RCPT command: <'email_2@example.com'>
Nov  6 17:22:46 mx postfix/smtpd[22836]: warning: Illegal address syntax from unknown[192.168.XX.XX] in RCPT command: <'email_3@example.com'>
Nov  6 17:22:48 mx postfix/smtpd[22836]: too many errors after RCPT from unknown[192.168.XX.XX]

Проблема в одинарных кавычках ’email’ которых не должно быть и которые появляются, как правило, у пользователей Outlook. Лечится вот таким вот фильтром в постификсе:

В main.cf добавляем

smtpd_command_filter = pcre:/etc/postfix/command_filter.regex

в /etc/postfix/command_filter.regex

/^RCPT\s+TO:\s*<'([^[:space:]]+)'>(.*)/		RCPT TO:<$1>$2

Спасибо extremeshok.com

K3b: cdrecord has no permission to open the device

Первый раз за пару лет понадобилось записать пару файлов на CD диск и получил ошибку «cdrecord has no permission to open the device (cdrecord не имеет прав на открытие устройства)» Как оказалось лечится довольно легко. В K3b заходим в Настройки K3b — Программы — Права доступа.

Там у меня была такая картинка:

Правим права на те, что предлагает программа.

sudo chmod 4711 /usr/bin/cdrdao
sudo chmod 4711 /usr/bin/wodim

Получается так:

После этого запись идет нормально.

добавляем в vim синтаксис для nginx

Качам синтаксис

mkdir -p ~/.vim/syntax/
wget http://www.vim.org/scripts/download_script.php?src_id=19394 -O ~/.vim/syntax/nginx.vim

Указываем где находятся конфиги nginx

vim ~/.vim/filetype.vim
au BufRead,BufNewFile /etc/nginx/*,/etc/nginx/conf.d/*,/usr/local/etc/nginx/* if &ft == '' | setfiletype nginx | endif

namei

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

При указании с параметром -l показывает права доступа, владельца и группу каждой директории указанного пути.

namei -l /var/spool/mail/vmail/trap/new
f: /var/spool/mail/vmail/trap/new
dr-xr-xr-x root  root  /
drwxr-xr-x root  root  var
drwxr-xr-x root  root  spool
drwxrwxr-x root  mail  mail
drwxr-xr-x vmail vmail vmail
drwx------ vmail vmail trap
drwx------ vmail vmail new

добавляем поддержку H.264 в Vivaldi browser

Если у вас убунта, то устанавливаем пакет chromium-codecs-ffmpeg-extra

sudo apt-get install chromium-codecs-ffmpeg-extra

Если же не убунта, как и у меня, то скачиваем пакет

wget http://security.ubuntu.com/ubuntu/pool/universe/c/chromium-browser/chromium-codecs-ffmpeg-extra_64.0.3282.119-0ubuntu1_amd64.deb

Дальше достаем из скачанного пакета файл libffmpeg.so и копируем его в .local/lib/vivaldi/

mkdir -p ~/.local/lib/vivaldi
cp libffmpeg.so ~/.local/lib/vivaldi/

Проверяем поддерживает ли теперь Vivaldi H.264 и MSE & H.264 на страничке https://www.youtube.com/html5?hl=ru&gl=RU

Mutt: отключить sent файл

По умолчанию, Mutt сохраняет каждое отправленное письмо в файл sent в директории пользователя. Как следствие файл может разрастись до неимоверных размеров. Отключить это можно создав файл /home/<user>/.muttrc и добавив в него

set copy=no

Уведомление о завершении команды в консоли

Скрипт для zsh позволяющий вывести уведомление о завершений команды, если терминал не открыт и команда выполнялась больше 10 секунд.

function active-window-id {
echo `xprop -root | awk '/_NET_ACTIVE_WINDOW\(WINDOW\)/{print $NF}'`
}

# end and compare timer, notify-send if needed
function notifyosd-precmd() {
if [ ! -z "$cmd" ]; then
cmd_end=`date +%s`
((cmd_time=$cmd_end - $cmd_start))
fi
if [ ! -z "$cmd" -a $cmd_time -gt 10 -a "$window_id_before" != "$(active-window-id)" ]; then
kdialog --title "$cmd_basename completed" --passivepopup "\"$cmd\" took $cmd_time seconds"
unset cmd
fi
}

# make sure this plays nicely with any existing precmd
precmd_functions+=( notifyosd-precmd )

# get command name and start the timer
function notifyosd-preexec() {
window_id_before=$(active-window-id)
cmd=$1
cmd_basename=${cmd[(ws: :)1]}
cmd_start=`date +%s`
}

# make sure this plays nicely with any existing preexec
preexec_functions+=( notifyosd-preexec )

Скрипт для КДЕ, т.к. используется kdialog для вывода уведомления. Оригинал на гитхабе. Там же для гнома.

Код сохраняем в файл .notifyosd.zsh и добавляем в .zshrc строку

[ -e ~/.notifyosd.zsh ] && . ~/.notifyosd.zsh

Автозапуск виртуальной машины в Citrix XenServer 6.2

Кратенько. Для 6 версии из XenCenter настроить автозапуск уже не получится, однако можно сделать из консоли.

Для начала добавляем эту возможность для пула.

# xe pool-list
uuid ( RO)                : ...
# xe pool-param-set uuid=... other-config:auto_poweron=true

Теперь для виртуалок, которым требуется автозапуск.

Список виртуальных машин с uuid-ами

# xe vm-list

Включаем автозапуск

# xe vm-param-set  uuid=... other-config:auto_poweron=true

Проверяем

# xe vm-param-list uuid=... | grep auto_poweron

Ищем auto_poweron, должно быть что-то вроде:

other-config (MRW): auto_poweron: true; ...

Выключаем автозапуск

# xe vm-param-set  uuid=... other-config:auto_poweron=false