Live (горячий) бэкап виртуальных машин kvm

Как преобразовать физические машины в виртуальные  — disk2vhd

Найти место на диске

Затем вам нужно указать путь, по которому сохранен диск вашей виртуальной машины. Каждая виртуальная машина получает файл образа диска, в котором хранится полное содержимое ее файловой системы. Можно использовать несколько форматов, включая QCOW2, VDI, VMDK и VHDX.

Большинство виртуальных машин, созданных в современной среде KVM, будут иметь образ диска QCOW2, хранящийся в телефонная книга. Имя файла будет соответствовать имени виртуальной машины, отображаемому в вывод команды.

Вы можете проверить путь к диску виртуальной машины, запустив :

$ sudo virsh domblklist ubuntu22.04 Целевой источник ----------------------------------------- ------------ sdb /var/lib/libvirt/images/ubuntu22.04.qcow2

Это подтверждает, что размер файла для этой виртуальной машины .

Изменение разделов образа диска с помощью NBD

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

$ sudo modprobe nbd max_part=10

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

$ sudo qemu-nbd -c /dev/nbd0 disk.qcow2
$ gparted /dev/nbd0

Схема раздела диска будет отображаться точно так же, как и у любого другого блочного устройства:

Образ диска qcow2 открыт в gparted

На картинке выше мы можем ясно видеть еще неиспользованные 10 ГБ пространства, которые мы ранее добавили на диск.

CentOS 8 увеличение LVM

Для использования созданного тома в LVM инициализируем его командой pvcreate:

Посмотрим название группы томов, в которою необходимо добавить раздел. Для это воспользуемся vgdisplay. По умолчанию – это cl:

Добавляем наш раздел в данную группу:

С помощью lvdisplay смотрим название и путь к логическому тому, который необходимо расширить (по умолчанию это root и /dev/cl/root):

Теперь расширим его. Для этого lvextend указываем путь к логическому тому и параметр -l +100%FREE, который говорит о том, что мы хотим использовать 100% свободного места:

Остался последний шаг – расширить файловую систему. Если у вас файловая система xfs (используется на Centos 8 по-умолчанию), то выполним xfs_growfs:

Если ext4, то воспользуемся resize2fs:

SCSI (контроллер SAS)

Контроллеры SCSI предоставляют виртуальным машинам диски SCSI, и каждый виртуальный контроллер SCSI может поддерживать до 64 устройств. Для оптимальной производительности рекомендуется подключить несколько дисков к одному виртуальному контроллеру SCSI и создать дополнительные контроллеры, только так как они необходимы для масштабирования количества дисков, подключенных к виртуальной машине. Путь SCSI не эмулируется, что делает его предпочтительным контроллером для всех дисков, кроме диска операционной системы. На виртуальных машинах поколения 2 существует единственный тип контроллера. этот контроллер, введенный в Windows Server 2012 R2, является SAS для поддержки общих VHDX-файлов.

Шаг 4: Расширить раздел VM

Теперь включите виртуальную машину
SSH к вашей виртуальной машине от имени пользователя root или от имени пользователя sudo.

Проверьте новую разметку диска.

Общая емкость моей виртуальной машины сейчас составляет 30 ГБ . Чтобы расширить раздел ОС, обратитесь к руководствам ниже.

Изменение размера виртуального диска KVM/QEMU/VirtualBox

При необходимости расширения размера виртуального диска в формате qcow2,
используемом в системах виртуализации  KVM и QEMU, можно обойтись без
клонирования и создания нового образа.

Завершаем работу виртуальной машины, связанной с изменяемым дисковым образом.

Увеличиваем размер образа. В случае использования KVM/QEMU:
qemu-img resize vm.qcow2 +5GB

В случае использования VirtualBox, потребуется дополнительный шаг с
промежуточным преобразованием VDI в qcow2 или raw-формат:

   qemu-img convert -f vdi -O qcow2 vm.vdi vm.qcow2
   qemu-img resize vm.qcow2 +5G
   qemu-img convert -f qcow2 -O vdi vm.qcow2 vm.vdi

Другой вариант с использованием штатной утилиты VBoxManage:

   VBoxManage internalcommands converttoraw vm.vdi vm.raw
   qemu-img resize vm.raw +5G
   VBoxManage convertfromraw --format VDI --variant Standard vm.raw  vm.vdi

Также можно создать новый большой VDI-раздел и клонировать в него старое содержимое:

   VBoxManage clonehd --existing old.vdi new.vdi


Для задействования появившегося свободного пространства, необходимо расширить
размер связанной с дисковым образом файловой системы. Для расширения ФС проще
всего воспользоваться приложением gparted.
Скачиваем из сети Live-дистрибутив Parted Magic или SystemRescueCd.
Загружаем Live-дистрибутив в новой виртуальной машине, не забыв присоединить к
ней изменяемый дисковый образ.
После загрузки запускаем gparted, выбираем виртуальный диск и видим в хвосте
нераспределенную область. Кликаем правой кнопкой мыши на имеющейся ФС и
выбираем "Resize/Move", следуя дальнейшим подсказкам в интерфейсе.

После завершения расширения размера, загружаем изначальную виртуальную машину и
запускаем утилиту fsck для проверки раздела, размер которого был изменен:

   sudo fsck /dev/sda1

Как создать образ диска при помощи Daemon Tools.

1. Поместите оптический диск в соответствующий CD/DVD привод компьютера, закройте все автоматически открывшиеся окна.

2. Запустите программу Daemon Tools, в ее окне нажмите на иконку с изображением диска и дискеты (см. рис. ниже).

3. Откроется окно с названием «Создание образа» (см. рис. ниже). В этом окне в поле «Привод» нужно выбрать CD/DVD привод с диском, образ которого нужно создать. В поле «Выходной файл образа» укажите название файла образа диска, а также место для ее сохранения, после чего нажмите на кнопку «Старт».

4. По завершению процесса создания образа закройте все окна Daemon Tools и выньте оптический диск из CD/DVD привода компьютера.

6 дек. 2016 г.

Proxmox kvm — изменение размера lvm диска

Увеличение 1) увеличить размер диска виртуальной машины: — в web-интерфейсе выбрать VM, в разделе «Ресурсы» выбрать диск, нажать кнопку «Resize disk» и указать число XX Гб для увеличения (уменьшить размер lvm через web-интерфейс нельзя). — в консоли: перезагрузить ВМ, чтобы «перечитать» диск нового размера (возможно как-либо можно пересканировать диск, чтобы он увидел новый размер и не упала ФС).

2) увеличить размер раздела (онлайн):

3) увеличить размер ФС:

Увеличить оффлайн — по примеру уменьшения размера.

Уменьшение 1) выключить виртуальную машину

2) уменьшить размер ФС до минимального размера:

просмотр параметров ФС

3) уменьшить размер диска виртуальной машины:

4) уменьшить размер раздела:

5) увеличить размер ФС до максимального размера:

Powershell в Windows 2012

В ранних версиях Hyper-V функционал по уменьшению размена виртуального диска вообще отсутствовал. Начиная с Windows Server 2012 появилась штатная возможность урезания виртуальных дисков, однако воспользоваться ей по прежнему не очень просто. Дело в том, что для уменьшения размера VHD необходимо наличие внутри него свободного неразмеченного пространства. В противном случае опция Урезать (Shrink) недоступна отсутствует в графическом интерфейсе, а PowerShell при попытке урезать диск с помощью Resize-VHD выдаст ошибку.

В качестве примера возьмем виртуальную машину SRV01 с виртуальным диском 40Гб и урежем ее до 30Гб. Для этого сначала поместим ВМ в переменную и выведем свойства ее виртуального диска:

$vm = Get-VM -Name SRV01
Get-VHD -VMId $vm.VMId

В свойствах VHD нас интересуют такие параметры, как:

  1. FileSize — текущий размер файла VHD. Показывает реальный объем дискового пространства, который занимает виртуальный диск.
  2. Size — текущий размер виртуального диска. В случае с динамическим VHD показывает максимальный размер, до которого он может вырасти.
  3. MinimumSize — минимальный размер виртуального диска, или минимально возможный размер, до которого можно урезать VHD.

Как видно из примера, мы имеем динамически расширяемый VHD размером 40Гб, из которых на данный момент занято чуть больше 20Гб. Свободное место имеется, однако текущий и минимальный размеры практически одинаковы, поэтому урезать диск не получится.

Для последующих манипуляций ВМ должна быть выключена, поэтому проверяем ее состояние и, если надо, выключаем:

$vm.State $vm | Stop-VM -Force

Затем подмонтируем VHD к родительской системе и выведем свойства получившегося диска:

Mount-VHD -Path $vm.HardDrives.Path -Passthru | Get-Disk

Берем полученный номер диска и выводим все имеющиеся на нем разделы:

Get-Partition -DiskNumber 3

Если на диске вдруг оказалось несколько мелких непонятных разделов, не стоит их трогать. Они содержат важную информацию, необходимую системе для загрузки и восстановления. Нам нужен раздел, имеющий букву диска. Урежем его до 30Гб и проверим, что получилось:

Resize-Partition -DriveLetter E -Size 30GB
Get-Partition -DriveLetter E

Dismount-VHD -Path $vm.HardDrives.Path

И урезаем его до минимально-возможного значения:

Resize-VHD -Path $vm.HardDrives.Path -ToMinimumSize

Как видите, все получилось, виртуальный диск урезан до 30Гб. Остается только запустить ВМ.

13.03.2014

Важно.
Данная инструкция не является официально поддерживаемым решением по сжатию vmdk дисков, однако автором статьи в продуктивной среде применялась уже не раз. При написании этой статьи использовалась версия ESXi 5.1

Перед осуществлением процедуры уменьшения размера виртуального диска на VMWare ESXi необходимо обязательно:

  • Удалить все снапшоты виртуальной машины, в противном случае вы можете повредить виртуальный диск
  • Создайте полную резервную копию виртуальной машины или же просто сделайте копию уменьшаемого vmdk файла с помощью команд: cp vmname.vmdk backup_vmname.vmdk

    Cp vmname-flat.vmdk backup_vmname-flat.vmdk

Процедура уменьшения размера виртуального диска состоит из двух этапов:

Уменьшение томов

Размер некоторый файловых систем, например, XFS уменьшить нельзя. Из положения можно выйти, создав новый уменьшенный том с переносом на него данных и последующим удалением.

LVM также позволяет уменьшить размер тома. Для этого необходимо выполнить его отмонтирование, поэтому для уменьшения системного раздела безопаснее всего загрузиться с Linux LiveCD. Далее выполняем инструкцию ниже.

Отмонтируем раздел, который нужно уменьшить:

umount /mnt

Выполняем проверку диска:

e2fsck -fy /dev/vg01/lv01

resize2fs /dev/vg01/lv01 500M

Уменьшаем размер тома:

lvreduce -L-500 /dev/vg01/lv01

На предупреждение системы отвечаем y:

  WARNING: Reducing active logical volume to 524,00 MiB.
  THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce vg01/lv01? [y/n]: y

Готово.

Очень важно, чтобы сначала был уменьшен размер файловой системы, затем тома. Также важно не уменьшить размер тома больше, чем файловой системы

В противном случае данные могут быть уничтожены. Перед выполнением операции, обязательно создаем копию важных данных.

Требования

Ниже приведены требования к компьютеру, на котором будет развернут VHDX-файл:

  • на локальном диске должно быть по крайней мере два раздела: системный раздел, содержащий файлы среды загрузки Windows и хранилище данные конфигурации загрузки (BCD), а также раздел для хранения VHDX-файла. Дополнительные сведения о добавлении среды загрузки для загрузки в собственном формате VHDX см. в разделе Загрузка в VHDX (Встроенная загрузка). Добавьте виртуальный жесткий диск в меню загрузки.

  • Раздел локального диска, содержащий VHDX-файл, должен иметь достаточно свободного дискового пространства для расширения динамического VHDX до максимального размера и для файла подкачки, созданного при загрузке виртуального жесткого диска. Файл подкачки создается за пределами VHDX-файла, в отличие от виртуальной машины, в которой файл подкачки находится внутри виртуального жесткого диска.

Настройки виртуальной машины в VirtualBox

В главном окне VirtualBox выделите виртуальную машину (если их несколько), а затем нажмите на кнопку «Настроить» для входа в настройки этой конкретной виртуальной машины.

В разделе «Общие», во вкладке «Дополнительно» вам нужно будет выбрать папку хранения для снимков системы (очень полезная функция). По умолчанию снимки системы будут сохраняться в папке «Snapshost» в профиле пользователя на системном диске «С». Вы можете создать папку с таким именем в том месте, где вы храните файлы этой виртуальной машины, для того, чтобы не потерять снимки при переустановке системы.

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

  • Выключен — настройка по умолчанию
  • Из основной в гостевую ОС — вы можете перемещать информацию из основной системы в виртуальную ОС
  • Из гостевой в основную ОС — вы можете перемещать данные из виртуальной ОС в основную систему
  • Двунаправленный — данными можно будет обмениваться в обоих направлениях

Есть смысл выбрать двунаправленный общий буфер обмена для наибольшего удобства при работе.

Далее включите функцию Drag’n’Drop для того, чтобы включить возможность перетаскивания данных из окна одной системы, в окно другой при помощи мыши. Здесь также будет лучше выбрать двунаправленный вариант.

В разделе «Система», во вкладке «Материнская плата» можно будет настроить порядок загрузки виртуальной машины. С помощью кнопочек со стрелками вверх и вниз, выберите последовательность загрузки виртуальной машины. Имеет смысл сделать первым загрузочным устройством оптический диск, с гибкого диска можно будет вообще снять галочку из-за неактуальности такого способа.

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

После применения новых настроек, не забывайте нажимать на кнопку «ОК».

Во вкладке «Процессор» вы можете включить дополнительные ядра, в том случае, если процессор вашего компьютера многоядерный.

В разделе «Дисплей», во вкладке «Экран» вы можете выбрать объем видеопамяти, которую будет использовать виртуальная машина. Здесь вы можете включить 2D (необходимо) и 3D (необязательно) ускорение.

Во вкладке «Захват видео» вы можете включить функцию захвата видео в виртуальной машине.

В разделе «Носители» нужно будет выбрать виртуальный привод. Здесь уже отображается файл виртуального диска, но он почти пустой, так как операционная система еще не была установлена. Поэтому для установки системы нужно будет выбрать ISO файл образа с операционной системой.

Нажмите на «Пусто», в правой части окна напротив пункта «Оптический привод» нажмите на кнопку с изображением диска, а затем в контекстном меню выберите пункт «Выбрать образ оптического диска…». С помощью Проводника найдите на своем компьютере нужный образ операционной системы.

В разделах «Аудио», «Сеть», «COM-порты», «USB» можно оставить настройки по умолчанию, во многом эти настройки зависят от аппаратной части вашего компьютера.

В разделе «Общие папки» пока ничего нет, так как гостевая система еще не была установлена. Для функционирования общих папок понадобиться установка Дополнений для гостевой ОС (VirtualBox Guest Additions). Подробнее об установке системы в виртуальную машину, и об установке дополнений можно будет прочитать здесь.

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

Далее можно будет приступить к установке операционной системе на виртуальную машину VirtualBox.

Импорт диска из другой системы

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

Если есть возможность, сначала нужно на старом компьютере отмонтировать том и сделать его экспорт:

umount /mnt

* предположим, что диск примонтирован в /mnt.

Деактивируем группу томов:

vgchange -an vg_test

* в данном примере наша группа называется vg_test.

Делаем экспорт:

vgexport vg_test

После переносим диск на новый компьютер.

На новой системе сканируем группы LVM следующей командой:

pvscan

… система отобразит все LVM-тома (подключенные и нет), например:

  PV /dev/sdb    VG vg_test         lvm2 [1020,00 MiB / 0    free]
  PV /dev/sda5   VG ubuntu-vg       lvm2 [11,52 GiB / 0    free]
  Total: 2 / in use: 2 / in no VG: 0

* в данном примере найдено два диска с томами LVM — /dev/sdb (группа vg_test) и /dev/sda5 (группа ubuntu-vg).

В моем примере новый диск с группой vg_test — будум импортировать его. Вводим команду:

vgimport vg_test

Возможны два варианта ответа:

1) если мы экспортировали том:

Volume group «vg_test» successfully imported

2) если не экспортировали:

Volume group «vg_test» is not exported

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

vgdisplay

… мы должны увидеть что-то на подобие:

  — Volume group —
  VG Name               vg_test
  System ID             
  Format                lvm2
  …

Активируем его:

vgchange -ay vg_test

Готово. Для монтирования раздела, смотрим его командой:

lvdisplay

… и монтируем в нужный каталог, например:

mount /dev/vg_test/lvol0 /mnt

* в данном примере мы примонтируем раздел lvol0 в группе томов vg_test к каталогу /mnt.

Руководство по преобразованию P2V с помощью Disk2VHD

Перейдите на страницу Windows Sysinternals и скачайте программу.

Программа Disk2vhd v2.01.

Шаг 2. Запустите Disk2vhd на физическом сервере, который необходимо преобразовать

Просто распакуйте ее и запустите на сервере. Как показано на рисунке, интерфейс программы очень простой. Чтобы создать диск VHDX, поставьте флажок Use Vhdx (Использовать Vhdx).

ПРИМЕЧАНИЕ. VHDX — это формат диска, появившийся в Windows Server 2012. По сравнению с традиционным VHD, в VHDX был внесен ряд изменений: появился специальный внутренний журнал, снижающий вероятность повреждения данных, увеличилась емкость (до 64 ТБ), добавлены некоторые другие функции. Я рекомендую по возможности использовать формат VHDX.

Выберите Use VSS (Использовать VSS), если вы хотите получить копию диска, согласованную на уровне транзакций, а не сбоев. Выберите место, где будет находиться файл VHDX (если оно будет расположено на том же диске, возможно «поглощение», поэтому для хранения образа лучше использовать другой жесткий диск). Выберите любой диск/том, который нужно виртуализовать. Если вы хотите сделать этот диск загрузочным, необходимо включить туда системный диск и область загрузки (поставьте флажок System Reserved (Зарезервировано системой)). Нажмите Create (Создать), чтобы начать преобразование.

Запустите Disk2vhd на физическом сервере, который необходимо преобразовать.

Шаг 3. Преобразуйте диск(и) в формат VHDX и скопируйте на хост Hyper-V

Во время этой операции вы увидите примерное время, оставшееся до ее завершения.

Преобразуйте диск(и) в формат VHDX и скопируйте на хост Hyper-V.

После ее завершения вы получите файл/диск VHDX, который можно скопировать на сервер Hyper-V и поместить в папку, где находятся диски ВМ.

Преобразуйте диск(и) в формат VHDX и скопируйте на хост Hyper-V.

Шаг 4. Создайте новую ВМ на хосте Hyper-V

Чтобы использовать созданный диск, необходимо создать ВМ. Запустите мастер (New → Virtual Machine (Создать → Виртуальная машина)) в Менеджере Hyper-V и настройте ее в соответствии со своими требованиями. Параметры настройки очень просты, за исключением выбора поколения ВМ (появился только в Windows Server 2012 R2).

Создайте новую ВМ на хосте Hyper-V.

ПРИМЕЧАНИЕ. Необходимо внимательно подойти к выбору поколения ВМ. Начиная с Windows 2012 R2, в Hyper-V появился новый параметр:Generation 2 virtual machine (Виртуальная машина 2 поколения). Речь идет о втором поколении встроенного ПО для ВМ с обновленным набором виртуального аппаратного обеспечения и новыми возможностями для пользователей, такими как загрузка с устройства, подключенного по iSCSI.   Но ВМ 2 поколения имеют существенные ограничения, например, они поддерживают гостевые ОС, только начиная с Windows 8, а семейство Unix не поддерживают совсем. Таким образом, на практике этот вариант следует выбирать только для Windows 8/8.1 или Windows Server 2012/2012 R2 и только для 64-разрядных версий.

Поэтому к выбору поколения ВМ нужно отнестись внимательно, и если вы не уверены на 100%, что вам необходимо Поколение 2, выбирайте поколение 1.

Создайте новую ВМ на хосте Hyper-V.

Шаг 5. Подключите созданный диск

Дойдя до шага Connect Virtual Hard Disk (Подключение виртуального жесткого диска), необходимо настроить виртуальный жесткий диск. Найдите уже созданный диск и выполните оставшиеся действия с помощью мастера.

Подключите виртуальный жесткий диск.

Шаг 6. Запустите ВМ и приступайте к работе

Щелкните правой кнопкой мыши на ВМ, выберите Run (Запустить), затем еще раз щелкните правой кнопкой и подключитесь к ней.

Запустите ВМ.

Загрузка ВМ может занять некоторое время, поскольку конфигурация аппаратного обеспечения будет отличаться. Но через несколько минут вы увидите экран приветствия и сможете войти в систему. Готово!

Запустите ВМ.

Вот и все!
Наслаждайтесь преимуществами своих ВМ и не забудьте их защитить, используя бэкап виртуальной инфраструктуры с помощью Veeam!

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

  • Скачать пробную версию Veeam Availability Suite v9 бесплатно
  • Бесплатный бэкап виртуальных машин Hyper-V
  • Как выполнить миграцию работающей ВМ в Hyper-V
  • Как защитить виртуальные машины Hyper-V

Как создать, подключить и отключить VHD?

Самое интересное заключается в том, что операционная система Windows умеет создавать и работать с виртуальными дисками. Для этого в окне «Управлении дисками» (нажмите горячие клавиши Win+R -> введите команду: diskmgmt.msc -> нажмите клавишу Enter) в верхнем пункте меню «Действие» необходимо выбрать пункт «Создать виртуальный жесткий диск».

Виртуальный диск может быть динамическим и фиксированным. Фиксированный диск имеет заданный размер и не может увеличиваться. Динамический диск расширяет свой объем по мере появления в нем новых данных и является по своей сути «резиновым» (см. рис. выше).

После создания нового диска он сразу появляется в списке доступных дисков, но его не видно в Проводнике. Чтобы он появился, его необходимо сначала инициализировать. Для этого нажмите по нему правой кнопкой мыши и выберите пункт «Инициализировать диск» (см. рис. выше).

После чего нужно создать новый том. Для этого также нажмите по диску правой кнопкой мыши и в контекстном меню выберите пункт «Создать простой том». И лишь после этого он появится в системе и будет виден в Проводнике (см. рис. выше).

Если у вас уже имеется такой диск, то в том же меню «Действие» нужно выбрать пункт «Присоединить виртуальный жесткий диск» для подключения его к системе в качестве диска (см. рис. выше).

Отключается диск так же просто, как подключается – в один клик через контекстное меню. Если диск больше не нужен, то после отключения также необходимо и удалить сам VHD-файл.

Заключение

В начале статьи я сказал, что не встретил готового решения по живому бэкапу kvm. (upd. Уже после публикации статьи мне подсказали готовое решение kvmBackup.) На самом деле это не совсем верно. Есть хорошая готовая сборка на основе kvm — proxmox. Я подробно рассматривал ее в отдельном материале — Установка и настройка proxmox. Но все же это решение конкретного коллектива разработчиков со своими возможностями и ошибками. В проксмокс реализован живой бэкап виртуальных машин из коробки. К сожалению, я не смог быстро найти техническую реализацию их решения. Возможно, все было бы еще проще. Но так тоже ничего получилось.

Важное дополнение в самом конце. Не забывайте проверять возможность восстановления систем из ваших резервных копий

Ведь конечная цель не сделать бэкап, а восстановиться из него!!!

Понравилась статья? Поделиться с друзьями:
Быть в курсе нового
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: