24 дек. 2013 г.

Restore deleted virtual disks under XEN or Oracle VM

We have a high availabile Oracle VM hosts based on Oracle VM server release 3.2.2. FS - OCFS2.

Human error occured and all virtual disks from repository was deleted with 'rm' command.

All VM's remain active and continue working.

Our first proposition: find files in the /proc/PID/fd directory and copy them. Failed. We found very small amount of deleted files there.

The second way after some google-fu:

All virtual images are mounted as loopback devices, so we can see them with 'losetup -a' command

[root@t2ru-ovhost-03 recovery]# losetup -a
/dev/loop0: [fc02]:2624777 (/OVS/Repositories/0004fb00000300005652fcdd8e980259/VirtualDisk*)
/dev/loop1: [fc02]:2624776 (/OVS/Repositories/0004fb00000300005652fcdd8e980259/VirtualDisk*)
/dev/loop2: [fc02]:2624779 (/OVS/Repositories/0004fb00000300005652fcdd8e980259/VirtualDisk*)
/dev/loop3: [fc02]:2624786 (/OVS/Repositories/0004fb00000300005652fcdd8e980259/VirtualDisk*)
/dev/loop4: [fc02]:2624789 (/OVS/Repositories/0004fb00000300005652fcdd8e980259/VirtualDisk*)
/dev/loop5: [fc02]:2624790 (/OVS/Repositories/0004fb00000300005652fcdd8e980259/VirtualDisk*)
/dev/loop6: [fc02]:2624793 (/OVS/Repositories/0004fb00000300005652fcdd8e980259/ISOs/0004fb*)
/dev/loop7: [fc02]:2624792 (/OVS/Repositories/0004fb00000300005652fcdd8e980259/VirtualDisk*)
/dev/loop8: [fc02]:2624795 (/OVS/Repositories/0004fb00000300005652fcdd8e980259/VirtualDisk*)
/dev/loop9: [fc02]:2624798 (/OVS/Repositories/0004fb00000300005652fcdd8e980259/VirtualDisk*)
/dev/loop10: [fc02]:2624801 (/OVS/Repositories/0004fb00000300005652fcdd8e980259/VirtualDisk*)
/dev/loop11: [fc02]:2624802 (/OVS/Repositories/0004fb00000300005652fcdd8e980259/VirtualDisk*)
/dev/loop12: [fc02]:2624806 (/OVS/Repositories/0004fb00000300005652fcdd8e980259/VirtualDisk*)
/dev/loop13: [fc02]:2624805 (/OVS/Repositories/0004fb00000300005652fcdd8e980259/VirtualDisk*)
/dev/loop14: [fc02]:2624809 (/OVS/Repositories/0004fb00000300005652fcdd8e980259/VirtualDisk*)
/dev/loop15: [fc02]:2624813 (/OVS/Repositories/0004fb00000300005652fcdd8e980259/VirtualDisk*)
/dev/loop16: [fc02]:2624812 (/OVS/Repositories/0004fb00000300005652fcdd8e980259/VirtualDisk*)
/dev/loop17: [fc02]:2624827 (/OVS/Repositories/0004fb00000300005652fcdd8e980259/VirtualDisk*)
/dev/loop18: [fc02]:2624826 (/OVS/Repositories/0004fb00000300005652fcdd8e980259/VirtualDisk*)
/dev/loop19: [fc02]:2624836 (/OVS/Repositories/0004fb00000300005652fcdd8e980259/VirtualDisk*)
/dev/loop20: [fc02]:2624816 (/OVS/Repositories/0004fb00000300005652fcdd8e980259/VirtualDisk*)
/dev/loop21: [fc02]:2624823 (/OVS/Repositories/0004fb00000300005652fcdd8e980259/VirtualDisk*)
/dev/loop22: [fc02]:2624839 (/OVS/Repositories/0004fb00000300005652fcdd8e980259/VirtualDisk*)
/dev/loop23: [fc02]:2624837 (/OVS/Repositories/0004fb00000300005652fcdd8e980259/VirtualDisk*)
/dev/loop24: [fc02]:2624783 (/OVS/Repositories/0004fb00000300005652fcdd8e980259/VirtualDisk*)
/dev/loop25: [fc02]:2624785 (/OVS/Repositories/0004fb00000300005652fcdd8e980259/VirtualDisk*)
/dev/loop26: [fc02]:2624782 (/OVS/Repositories/0004fb00000300005652fcdd8e980259/VirtualDisk*)
/dev/loop27: [fc02]:2624842 (/OVS/Repositories/0004fb00000300005652fcdd8e980259/VirtualDisk*)
/dev/loop28: [fc02]:2624844 (/OVS/Repositories/0004fb00000300005652fcdd8e980259/VirtualDisk*)
/dev/loop29: [fc02]:2624845 (/OVS/Repositories/0004fb00000300005652fcdd8e980259/VirtualDisk*)
/dev/loop32: [fc02]:2624849 (/OVS/Repositories/0004fb00000300005652fcdd8e980259/VirtualDisk*)
/dev/loop33: [fc02]:184537605 (/OVS/Repositories/0004fb00000300005652fcdd8e980259/ISOs/0004fb*)

Although losetup has truncated its output so we weren't able to see actual names.

You have 2 options to work it round:

1. run losetup -a /dev/loopNUM with strace

2. go through /sys/block and for each loopNUM directory and do 'cat loop/backing_file' to see actual filename, 'cat size' to see size and echo $base to see loopback filename.

Very fast written script to do this job:

for i in loop* ;\
do echo -n  ${i}" "; \
echo `cat ${i}/loop/backing_file | cut -f6 -d/`;\
echo -n `cat ${i}/size`; echo " ";\
done

And its result:

loop0 0004fb000012000063d6575b3f48b463.img (deleted) 62914560  +
loop1 0004fb0000120000704f06e81dea0133.img (deleted) 67108864 
loop10 0004fb0000120000c93f3e2ce72a21ea.img (deleted) 85995520 
loop11 0004fb00001200008b7ef69e390fc9db.img (deleted) 25165824  +
loop12 0004fb0000120000c7d60e7cd3729ace.img (deleted) 62914560 
loop13 0004fb00001200007884393989c691aa.img (deleted) 67108864 
loop14 0004fb00001200006fedafd936080b23.img (deleted) 25165824  +
loop15 0004fb0000120000681f43d49fcc2937.img (deleted) 62914560 
loop16 0004fb0000120000d10e9e629238e991.img (deleted) 67108864 
loop17 0004fb00001200002d4f0e853511327c.img (deleted) 31457280 
loop18 0004fb000012000085b9c867ce5e0a30.img (deleted) 25165824 
loop19 0004fb00001200000016659316b0e98f.img (deleted) 31457280 
loop2 0004fb0000120000731c98a3fa0f4f8b.img (deleted) 314572800   .
loop20 0004fb00001200008bfdb6bfe0351c53.img (deleted) 25165824 
loop21 0004fb000012000075a678efe2faefa8.img (deleted) 104857600 
loop22 0004fb0000120000262dcdd5cd17e79d.img (deleted) 146800640 +
loop23 0004fb00001200001c3ccc5104a634f8.img (deleted) 20971520 
loop24 0004fb00001200005133cf345cebce21.img (deleted) 62914560 
loop25 0004fb0000120000861c7f6996570b6e.img (deleted) 104857600 
loop26 0004fb0000120000e193db30a91f2cf1.img (deleted) 25165824 
loop27 0004fb000012000090515a0546d1eb8e.img (deleted) 104857600 
loop28 0004fb00001200001b39e9dc716b8f1b.img (deleted) 25165824   +
loop29 0004fb00001200001f205725a33a5014.img (deleted)314572800   +
loop3 0004fb0000120000f49caf272ed15c86.img (deleted) 25165824    +
loop30 cat: loop30/loop/backing_file: Нет такого файла или каталога 0 
loop31 cat: loop31/loop/backing_file: Нет такого файла или каталога 0 
loop32 0004fb000012000040a4a2afd39aa69c.img (deleted) 314572800 
loop33 0004fb0000150000710f803f79f72695.iso 1489320 
loop4 0004fb0000120000e45a30ed3d3aa2a9.img (deleted) 20971520   .
loop5 0004fb00001200006686d4461e733db8.img (deleted) 83886080   .
loop6 0004fb0000150000d7bbc124876ed5b1.iso 7178372 
loop7 0004fb00001200002e0c01393728be30.img (deleted) 8388608    .
loop8 0004fb00001200002bda771dfc94384b.img (deleted) 25165824 
loop9 0004fb00001200008b1629ee7493f640.img (deleted) 13125105 
[root@t2ru-ovhost-03 block]# 

Next time to do monkey job of block copy loopback devices. We've got a new mount point 1.4Tb and copy all loopback files into it:

[root@t2ru-ovhost-03 recovery]# dd if=/dev/loop28 of=./loop28 bs=512k 
24576+0 записей считано
24576+0 записей написано
 скопировано 12884901888 байт (13 GB), 324.303 секунд, 39.7 MB/s

After everything was copied out just cp recovered files to the old place (from backing_file) and restart VMs. Of cource, consistency of database files or FS are not guaranted.

16 янв. 2013 г.

[истории успеха]alsa -> oss v4 gentoo

Последнее время, довольно продолжительное - месяцы, стал замечать, что прослушивание музыки не приносит былого кайфа. Хотелось не продолжать слушать, а сделать потише и поскорее выключить. Так получилось, что в машине раньше была приличная акустика, а сейчас стоковое дерьмо. Дома система тоже исчерпала себя, как начальный hi-fi. Казалось, что проблема с усилителем. Переслушал в наушниках, слух явно не хуже, чем раньше, слышу всё.

Описать проблему тяжело и мало кто меня поймёт, однако наблюдалось явное урезание полосы частот. Не было слышно многих звуков, которые раньше были. Также звуковые образы имели тенденцию к уменьшению, рояль был каким-то небольшим и невесомым инструментом, без послезвучий, вокал девушки превращался в пискливое пение девочки, скрипка не походила на скрипку. Последней каплей стала попытка просмотра любимого фильма на DVD. Отлично помню, что полгода назад на нём был прекрасный отчётливый звук. Сейчас было полное впечатление от просмотра некачественной ТВ-программы. А образ DVD у меня тот самый, что и раньше. Стало очевидно, что проблема явно с софтом. И категорически не лечится старыми рецептами и шаманством с .asoundrc.

Ранее пробовал oss, но не проникся - сразу работать не хотело и удобных микшеров под это дело в пределах доступности не было. Перечитал устаревшие на 2 года wiki дистрибутивов gentoo и arch.

Оказалось, что достаточно:

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

2. добавить эти модули в blacklist, потому что они нам не нужны.

$ cat /etc/modprobe.d/alsa.conf

blacklist snd_ice1724 snd_ac97_codec snd_ice17xx_ak4xxx snd_pcm

3. откуда-нибудь поставить oss версии 4.x. Я сделал это через оверлей flora. layman -a flora; emerge oss

4. Добавить загрузку модулей и восстановление уровней в автозагрузку: rc-update add oss default

5. Очень важно апппаратно уменьшить громкость на усилителе. Там, где на alsa было -10dB, на oss играет -35dB.

6. Тестируем и смотрим, что вышло: ossdetect -v ; soundoff && soundon ; osstest

7. Пересобрать свои приложения с USE-флагами "oss -alsa"

Навскидку, плееры работают. С микшерами еще предстоит разобраться, но в OSS регулируется уровень по приложению. Полоса частот снова полная. Что было с alsa и когда оно возникло - тайна, покрытая мраком.

Апдейт, спустя неделю использования

Итак, на новой звуковой системе была детализация, но не хватало драйва и музыкальности. Голоса были какие-то хриплые, даже женские, ощущался недостаток высоких частот. После того, как я нашел новые виниловые рипы 96 kHz, а они играли как говно, это было печально...

В качестве твика был применен рецепт по изменению Sample Rate из АрчВики

Результат оказался ошеломительным. Гитара, как живая. Голоса - насколько это позволяет моя неважная акустика Monitor Audio RS1 и комната - натуральные. Верха есть. И самое главное - есть драйв!

Для моей звуковой карты, как оказалось, максимум поддерживающей 192000 Гц, оказалось достаточно выполнить команды:

sudo /usr/lib/oss/scripts/killprocs.sh
sudo vmixctl rate /dev/dsp 192000
sudo ossmix envy24.rate 192000
sudo ossmix envy24.ratelock ON
Еще не проверил, работает ли при перезагрузке, но надо добавить следующие команды
vmixctl rate /dev/dsp 192000
ossmix envy24.rate 192000
ossmix envy24.ratelock ON
в файл
/usr/lib/oss/soundon.user
и сделать его исполняемым
sudo chmod a+x /usr/lib/oss/soundon.user

Еще апдейт на следующий день

Изменения сохраняются. После перезагрузки частота дискретизации 192 kHz. Заработал звук в xbmc 12. Оказывается, он работает через libSDL. Пришлось пересобрать эту библиотеку без поддержки alsa и включив oss. Файл ~/.asoundrc следующий, но я не уверен, что он вообще задействован:

pcm.!default
 {
   type oss
   device /dev/dsp
}
mixer.!default
{
   type oss
   device /dev/dsp
}
Поиск микшера превратился в большую проблему. Всё, что есть, включая aumix и wsmixer и другие, даже декларирующие поддержку OSS, не работают. Возможно, потому что все они для oss v.3.x. Регулировка громкости по приложениям действительно есть по-умолчанию. Но мне неудобно постоянно переключаться на виртуальный экран с плеером deadbeef, а горячие клавиши на steelseries пока не поддаются настройке.

Патч для ядер >3.7.2 @ Patch for kernels >3.7.2

как применять:

cd /usr/lib/oss/build
vim patch
patch -p1 < patch
выбрать файл pci_wrapper.inc
./install для сборки и инсталляции модулей.
ossdetect -v
soundon

Для версии ядра Linux-3.14.0 применяется следующий патч для файла osscore.c:

--- setup/Linux/oss/build/osscore.c     2014-02-14 22:59:55.000000000 +0000
+++ setup/Linux/oss/build/osscore.c     2014-04-06 01:16:06.171974568 +0100
@@ -472,7 +472,9 @@
 int
 oss_get_uid (void)
 {
-#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,29)
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,14,0)
+  return __kuid_val(current->cred->uid);
+#elif LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,29)
   return current->cred->uid;
 #else
   return current->uid;