
Лига Сисадминов
Как проверить свою удачу?
Легко! Три игры на везение — и ответ у вас в кармане.
Новый ноутбук: скорость, плюсы-минусы, DiskSPD, Hyper-V и продолжение про методику тестирование скорости
Всем спасибо, кто давал вредные и полезные советы.
Для лиги лени: привыкание к новому и бесполезные тесты часть следующая.
В предыдущих сериях :
Тестирование локальных дисков и систем хранения данных: подводные камни. Часть 1 - общая
Тестирование локальных дисков и систем хранения данных: подводные камни. Часть 2 - виртуализация
Тестирование локальных дисков и систем хранения данных: подводные камни. Часть 3 – цифры и предварительные итоги
Тестирование локальных дисков и систем хранения данных: подводные камни. Часть 4 – что там изнутри виртуализации
Итак, прикупил я два туза на мизере новый ноутбук, и пошел переезжать.
Конечно, есть масса готовых утилит для переезда профиля
Конечно, пользоваться ими я не стал. Это в корпоративной среде нужен User State Migration Tool (USMT) или forensit User Profile Wizard
Первым делом обновил Windows, конечно не забыв про
OOBE\BYPASSNRO
Вторым – выполнил скрипт DisableUnnecessaryWindowsServices. Всякие твикеры это тоже хорошо, но начать надо с простых, понятных и воспроизводимых вещей.
Со скриптом есть проблемы.
Без этого не будет звука
"Audiosrv", # Windows Audio
"AudioEndpointBuilder", # Windows Audio Endpoint Builder
Не уверен насчет задач:
"QWAVE", # Quality Windows Audio Video Experience
и без этого этого блютус работает, но не видит мышку.
"bthserv", # Bluetooth Support Service
Device Install Service почему-то устанавливается в manual, и без ручного запуска тоже не давал добавить мышь. Но все остальное вроде ок
Третьим делом выключил гибернацию.
powercfg.exe /hibernate off
Я в свое время с гибарнацией поел с лопаты, когда оперативка просто кончилась, и то, что она ушла на кеширование файла гибернации, было видно только в Sysinternals RAMmap.
И четвертым делом потыкал в Sysinternals Autoruns
И на выходе получил ошибку отсюда:
Automatic Device Encryption Support Reasons for failed automatic device encryption: PCR7 binding is not supported, Un-allowed DMA capable bus/device(s) detected
Это не про user space сервис, это про
"ShellHWDetection", # Shell Hardware Detection
Исправил и это тоже, иначе какое шифрование, какое авто монтирование.
Power plan
Оказывается, по умолчанию мне система поставила Balanced power, ну куда это годится. Пришлось покрутить ручки, но про это позже.
Hyper-V for Windows 11
Я много лет использовал VMware Workstation, но есть нюанс. У Windows есть разные режимы работы с виртуализацией, и VMware Workstation, особенно в части дисковых операций, из-за множества прокладок и трансляций, скажу так – не то чтобы не дает скорости, но становится крайне процессоро-зависима. Любой ПУК в хостовой системе, и дисковые операции в Workstation начинают думать. У ESXi такой проблемы, разумеется, нет – это абсолютно другая архитектура. В любом случае Dekiru Neko wa Kyou mo Yuuutsu
Потестирую хоть как-то.
Для процессора и памяти, конечно, берем
Free Mersenne Prime Search Software - Great Internet Mersenne Prime Search, GIMPS
Для диска берем DiskSPD последней версии, DISKSPD 2.2 – брать тут.
Конечно надо было померять скорость ДО включения Hyper-v, поскольку, если вы не знали, Hyper-V работает как нормальный гипервизор, подгружая Windows уже в виде виртуальной машины, что может быть и влияет на производительность. А может, и нет. То есть, конечно, да, но не совсем.
Что там на NTFS?
Get-CimInstance -ClassName Win32_Volume | Select-Object DriveLetter, FileSystem, BlockSize| Format-Table -AutoSize
ATTO Disk Benchmark (качать тут, статья с примером тут) показывает совсем не то, что хотелось бы. Потому что он работает в один поток, и только глубина очереди как-то регулируется.
На DiskSPD, конечно, словил ошибку:
Попутно словил ошибку -
WARNING: Could not set privileges for setting valid file size; will use a slower method of preparing the file
И решение:
OK, so that's exactly what's happening. There is certainly (always) a longer description to attach to it (see above), but DISKSPD when run w/o privilege to assert SeManageVolumePrivilege cannot invoke SetFileValidData and therefore has to write the entire file through to get it into its standard if-created-by-DISKSPD state: with valid data at the end of the file.
Решение очевидное, от админа надо запускать.
Новый диск на новом ноутбуке выдает: (Файловая система – NTFS с блоком 4k, очередь по умолчанию – 2). Файлы по 200 Гб, не похоже на тестирование кеша.
Тестирование - 60 секунд.
1 тред, 1 файл – 35.000 IOPS блоком 4к на чтение, 15.000 IOPS блоком 8к на чтение
1 тред, 1 файл – 40k IOPS блоком 4к на запись (как так вышло – не знаю), 45k IOPS блоком 8к на запись. Это как?
2 треда, 1 файл – 25.000 на поток, итого 50.000 IOPS блоком 4к на чтение, и 2 по 30.000 на запись блоком 4к
3 треда – 23.000, всего 70 на чтение, и на запись 25, 25, и 35 тысяч, итого 85k. Блоком 8к показатели аналогичны
4 треда – 4 по 22.500, всего 90к на чтение. И 4 по 23 к на запись, итого 92к.
5 тредов – 20.000 на тред, всего 100к на чтение. Аналогично при блоке на 8k, те же 20.000 IOPS на тред на чтение,
На запись – примерно 10.000 IOPS блоком 4к на тред при первом тесте, до того как я покрутил настройки баланса.
Как бы так сказать «я ничего не понял», не говоря, что ничего не понял?
Проблема тестирования дисков наглядно показывает рост времени исполнения.
Что удивительно, но тестирования изнутри виртуальной машины (Windows server 2025, STD, обновления от 07-2025) показывают цифры, схожие с работой из управляющей операционной системы. Как бы так еще понять, в какой Windows 11 добавили новый NVME обработчик – в 11h22, h23 или h24.
Пропущу длинное русское поле экспериментов, итого:
Для физики:
Размер файла имеет значение. Windows пытается максимально закешировать что можно, и в итоге, если у вас 64 Гб оперативки, а тестовые файлы по 20-40 гигабайт, то цифры будут странные.
Надо брать для тестов файлы в 3-5 раз больше размера оперативки, 200 Гб на файл, два файла, на 64 Гб памяти – уже сойдет.
Количество реальных ядер и CCX имеет значение, причем для дисковых операций на хосте «потоки» AMD работают куда лучше «потоков» Intel. И, особенно, на последних мобильных интелах без HT и с энерго сберегающими ядрами.
На этом ноутбуке 6 ядер, 12 потоков – так вот, до 12 потоков включительно нагрузка растет линейно.
Конкретно этот NVME обрабатывает :
На чтение, 8 тредов: 4 треда по 40k, 4 по 20. 10 тредов – 10 по 35k, всего 350. 12 тредов – 12 по 35, всего 400k. 14 тредов – 10 по 30k, 4 по 15. 16 тредов – 8 по 28, 8 по 12. 18 тредов – 6 по 25, 12 по 10. Максимум достигается при числе тредов DISKspd = числу тредов в CPU.
И это около 400k IOPS. На чтение. Блоком 4к. При глубине очереди 2.
На запись картина другая. Есть подозрение на гигагерце зависимость по ядрам, авторазгон я не выключил.
Максимум получен для 8 тредов – 8x32k, около 256k IOPS на запись блоком 4k.
При 10 тредах получается по 19k на запись, всего 190к. Но расхождения по тредам нет. 12 тредов – падение до 12k IOPS на запись на тред, всего 145k, но все еще нет расхождения.
14 тредов – 10 тредов по 12 к и 4 треда по 7к. Всего 155k. 16 тредов – 8 тредов по 10к и 8 тредов по 5.5k - всего 125. 18 тредов – 6 по 10к, 12 по 6.5
То есть максимальное число тредов по записи на физическом хосте в моих условиях не стоит держать выше, чем число физических ядер плюс два. При большой записи, конечно.
Изнутри виртуальной среды картина чуть другая
Тестовая виртуальная машина, 4 ядра, 8 Гб памяти, и, для начала, просто 2 файла по 20, не по 200, Гб.
Чтение, 2 треда: 24k IOPS на тред, всего 48k
Запись, 2 треда: 12k IOPS на тред при 2 тредах, всего 24k
Падение на чтение в 1.5 раза, падение на запись в 3 раза. Но, это тестирования НОУТБУКА, с домашним NVME SSD, и Windows 11. На Windows Server картина может быть абсолютно другой.
Чтение, 4 треда: 3 треда по 15K IOPS, 1 тред на 2k IOPS. Суммарно 47k
Запись, 4 треда – 3 по 8k, 1 на 5k, итого 30 (данные округлены)
Дальше начинается колдовство и магия. Файлы по 200 Гб, 2 файла.
чтение, 4 треда на файл, всего 8 тредов: 6 тредов дают по 16к, 2 треда по 2к. Итого 100k IOPS изнутри виртуалки на 4 процессора.
Чтение, 5 тредов на файл, всего 10 трелов. 7 тредов по 15к, 2 по 1к. Итого 110к
Чтение, 6/12. 9 по 18к, 3 по 2.5. Итого 170к. Идет, к слову так, блоками по 3 группы «больших» IOPS.
Чтение, 7/14. 10 по 14к, 4 по 1к. Итого 150к.
Чтение, 8/16. 12 по 20k IOPS, 4 по 2. Итого 260K IOPS на чтение изнутри VM на 4 ядра.
Чтение, 9/18. 13 по 18..22, 5 по 1.5. Итого 280k.
Чтение, 10/20. 15 по 21, 5 по 2. Итого 330k.
Чтение,11/22. 343k IOPS
Чтение, 12/24. 18 тредов по 22k IOPS, 6 тредов по 2к. Итого почти 400k IOPS на чтение.
То есть, 4 процессорная виртуальная машина на 24 треда выдала почти столько же IOPS, сколько физика при 12 тредах.
Для физики параметры были: -t6 -w0 -b4k -W10 -o2, и два файла по 200 Гб, то есть 12 тредов итого.
Файлы по 200 Гб, 1 файл. Чтение внутри виртуальной машины.
1 тред – 31k IOPS , 2 треда = 2x24 = 48, 3 треда 2x25+ 1x12 = 62(k IOPS), 4 треда – 3 по 16 и 1 тред на 2, итого 50.
5 тредов = 3 по 16 и 2 по 1.5, 6 тредов – 4 по 15 и 2 по 1.5, всего 62. ,7 тредов - 5 по 14.5 и 2 по 1.8. 8 тредов – 6 по 13 и 2 по 2.5, итого 83k
9 тредов – 6 по 12, 3 по 1.2 , итого 75. 10 – 85k IOPS, 11 – 92k IOPS, 12 – 102k IOPS
Логика какая-то странная.
Дописал текст, и увидел внутри виртуальной машины active power scheme: Balanced
Похоже, надо дополнительно смотреть на параметр:
ag Group affinity – affinitize threads in a round-robin manner across Processor Groups, starting at group 0. This is default. Use -n to disable affinity.
Или выделять не по 4 ядра на виртуальную машину, при физических 6, которые может еще надо как-то делить, а по 3. Или по 6.
Я в курсе про CCXs (Core Complex), но как-то странно это все.
Дожил, неужели NUMA имеет значение. Но не в 10 же раз разницы из-за Numa (CCX/CCD). И самое главное, не понятно, как изнутри 4 процессорной VM – дисковые задачи раскладываются на физические ядра и процессорные треды / потоки. Как 24 треда разложились на 18 быстрых и 6 медленных. И как из этой конструкции получить например 12 средних. Как вообще CPU scheduler что-то куда-то кладет в такой конфигурации. И не отпилить ли root.
Еще оказалось очень полезно посмотреть на итоговый размер файлов виртуальных машин. Поскольку тесты шли по 30-60 секунд, то максимально за это время записалось всего по 1.5 – 2 гигабайта. Но я еще посмотрю более детально.
Литература
скрипт DisableUnnecessaryWindowsServices
Windows Server 2025 Storage Performance with Diskspd
Sample command lines
Command line and parameters
Execution time longer than the parameter execution time on WSL Ubuntu #203
В следующих сериях:
Опыты на виртуальной машине на 3 ядра.
CPU affinity
Опыты на Debian внутри Hyper-V, опыты с Proxmox nested. Stay tuned!
Бонус
# 01
$pciStats = (Get-WMIObject Win32_Bus -Filter 'DeviceID like "PCI%"').GetRelated('Win32_PnPEntity') |
foreach {
# request connection properties from wmi
[pscustomobject][ordered]@{
Name = $_.Name
ExpressSpecVersion=$_.GetDeviceProperties('DEVPKEY_PciDevice_ExpressSpecVersion').deviceProperties.data
MaxLinkSpeed =$_.GetDeviceProperties('DEVPKEY_PciDevice_MaxLinkSpeed' ).deviceProperties.data
MaxLinkWidth =$_.GetDeviceProperties('DEVPKEY_PciDevice_MaxLinkWidth' ).deviceProperties.data
CurrentLinkSpeed =$_.GetDeviceProperties('DEVPKEY_PciDevice_CurrentLinkSpeed' ).deviceProperties.data
CurrentLinkWidth =$_.GetDeviceProperties('DEVPKEY_PciDevice_CurrentLinkWidth' ).deviceProperties.data
} |
# only keep devices with PCI connections
Where MaxLinkSpeed
}
$pciStats | Format-Table -AutoSize
Get-CimInstance -ClassName Win32_Volume | Select-Object DriveLetter, FileSystem, BlockSize| Format-Table -AutoSize
$Path001 = 'C:\DiskSpd\amd64\'
$Sp = $Path001 + "diskspd.exe"
cd $Path001
$Version = "007g1"
$Drives = @("C")
$FilesTemp = "Data4del"
$File001 = "deleteme_01.dm"
$File002 = "deleteme_02.dm"
$File003 = "deleteme_03.dm"
$Logs = @()
# $Threads = @("-t1","-t2", "-t3", "-t4","-t5","-t6","-t7")
$Threads = @("-t4","-t5","-t6","-t7","-t8","-t9")
# $Write = ("-w0","-w30", "-w100")
$Write = @("-w0")
#$BlockSize = ("-b4k","-b8k")
$BlockSize = @("-b4k")
# $Outstanding = @("-o2","-o4","-o8","-o16")
$Outstanding = @("-o2")
$Size = "-c200G"
$Time = "-d30"
foreach ($Drv in $Drives){
foreach ($Bl in $BlockSize) {
foreach ($Wr in $Write) {
foreach ($Outs in $Outstanding){
foreach ($T1 in $Threads){
$TimeNow = get-date -UFormat "-%d-%m-%Y-%R" | ForEach-Object {$_ -replace ":","-"}
Write-Host "TT " $TimeNow
$Out001 = $Drv + ':\' + $FilesTemp + '\' + $File001
$Out002 = $Drv + ':\' + $FilesTemp + '\' + $File002
$Out003 = $Drv + ':\' + $FilesTemp + '\' + $File003
$Stat = $Drv + ':\' + $FilesTemp + '\' + $Version + $TimeNow + "_" + $T1 + $Drv + $Outs+$T1+'.log'
$Logs += $Stat
Write-Host "testing mode " $T1 $Wr $Bl $Outs 'time' $Time
&$Sp $T1 $Wr $Bl -W10 $Outs $Time -Suw -D -L $Size $Out001 $Out002 > $Stat
}}}}}
Философия PowerShell. Части 0,1 Вступление и первый командлет
Часть 0.
Что было до PowerShell?
В 1981 году вышел MS-DOS 1.0. с командным интерпретатором COMMAND.COM. Для автоматизации задач использовались пакетные файлы (.bat) — простые текстовые файлы с последовательностью консольных команд. Удивительный аскетизм командной строки на фоне POSIX совместимых систем где уже с 1979 года существовала оболочка Борна (sh).
Состояние рынка оболочек на момент выхода MS-DOS 1.0 (август 1981)
Что такое sh, csh
sh — Bourne Shell, основной скриптовый интерпретатор UNIX с 1977 года.
csh — C Shell, улучшенная оболочка с синтаксисом, похожим на C, и удобствами для интерактивной работы.
Эти оболочки поддерживали редиректы, пайпы, переменные, функции и условия — всё, что сделало UNIX мощным инструментом автоматизации.
Microsoft ориентировалась на дешёвые 16-битные IBM PC, которые имели мало памяти (обычно 64–256 КБ),не имели многозадачности и были предназначены для домашнего и офисного использования, а не серверов. UNIX был платным, требовал сложной архитектуры и опыта, а бухгалтеры и инженеры, не системные админы, им требовалась быстрая и простая ОС
Интерфейс DOS Вместо сложного sh представлял один файл command.com с скудным набором внутренних команд (dir, copy, del и т.p.) без функций, циклов и модулей.
Были и внешние команды — отдельные исполняемые файлы (.exe или .com). Примеры: FORMAT.COM, XCOPY.EXE, CHKDSK.EXE, EDIT.COM. Сценарии исполнения записывались в текстовый файл с расширением .bat (batch file)
Примеры конфигуарционных файлов:
AUTOEXEC.BAT
CONFIG.SYS
В Майкрософт было понятно, что DOS тупиковая ветвь и они почти сразу начали разрабатывать принциально новое ядро.
Ядро Windows NT(New Technology) впервые появилось с релизом операционной системы:
Windows NT 3.1 — 27 июля 1993 года
Разработка началась: в 1988 году под руководством Дейва Катлера (бывшего инженера DEC, создателя VMS) с целью создать полностью новую, защищённую, переносимую и многозадачную ОС, не совместимую с MS-DOS на уровне ядра.
NT 3.1 — называлась так, чтобы подчеркнуть совместимость с Windows 3.1 на уровне интерфейса, но была совершенно новой архитектурой.
Что принесло ядро NT:
Линейка NT:
Ядро NT было хорошим, годным продуктом от Майкрософт, если бы не одно большое «НО!»
Но средствам автоматизации и администрирования не уделялось должного внимание вплоть до 2002 года.
Microsoft использовала совершенно разные подходы, стратегии и инструменты для администрирования. Всё это было разрозненным, часто GUI-ориентированным и не всегда автоматизируемым.
Список некоторых инструментов:
Инструменты автоматизации
VBScript-файлы (*.vbs) для администрирования пользователей, сетей, принтеров и служб. Привет✋ вирус "ILOVEYOU"
WMIC — командный интерфейс к WMI (например: wmic process list brief).
.cmd скрипты с вызовами net, sc, reg, wmic, и т.д.
Windows Scripting Host (WSH)
Впервые появился в Windows 98, активно использовался в Windows 2000 и XP.
Позволял выполнять VBScript и JScript-файлы из командной строки:
> Set objShell = WScript.CreateObject(«WScript.Shell»)
> objShell.Run «notepad.exe»
HTA (HTML Applications)
Чистое шаманство. Если кратко, то это приложения, написанные на HTML и скриптах (чаще всего VBScript или JScript), которые запускались с полноценным GUI и имели полный доступ к Windows через WSH — без ограничений, как обычные сайты в браузере.
Часть 1.
Только в 2002 году в компании сформулировался проект Monad , который позже вылился в powershell:
Начало разработки: ориентировочно в 2002 году
Публичное анонсирование: 2003 год, как «Monad Shell»
Первые бета-версии: появились к 2005 году
Финальный релиз (PowerShell 1.0): ноябрь 2006 года
Автором и главным архитектором проекта Monad / PowerShell является Джеффри Сновер (Jeffrey Snover)
Параллельно шла разработка фреймворка .NET и powershell был в нее глубоко интегрирован, в следующих частях я покажу примеры
А теперь — самое главное!
Главное преимущество PowerShell по сравнению с классическими командными оболочками — это то, что он работает с объектами, а не с текстом. Когда вы выполняете команду, она возвращает вам не просто текст, а структурированный объект (или коллекцию объектов), у которого есть четко определенные свойства (Properties) и методы (Methods).
Смотрите, как PowerShell элегантно решает задачу благодаря работе с объектами
Как было: dir и ручной парсинг
В CMD (и в старом COMMAND.COM, и в cmd.exe) команда dir возвращает результат работы как обычный текст. Пример вывода:
Допустим, вы хотите извлечь имя файла и размер каждого файла. Вам придётся парсить строки вручную:
for /f "tokens=5,6" %a in ('dir ^| findstr /R "[0-9][0-9].[0-9][0-9].[0-9][0-9][0-9][0-9]"') do @Echo %a %b
Это страшно сложно читается, зависит от локали, формата даты, шрифта. И ломается при пробелах в названиях
PowerShell: объекты вместо текста
Простой и читаемый пример:
> Get-ChildItem | Select-Object Name, Length
Результат:
Get-ChildItem возвращает массив объектов файлов/папок
Select-Object позволяет легко получить нужные свойства
Что на самом деле возвращает Get-ChildItem?
> $item = Get-ChildItem -Path .\11.md
> $item | Get-Member
Результат:
PowerShell возвращает объекты типа System.IO.FileInfo, у которых есть:
Свойства (Name, Length, CreationTime, Extension, …)
Методы (Delete(), CopyTo(), MoveTo() и т.д.)
Вы работаете с полноценными объектами, а не со строками.
Синтаксис «Глагол-Существительное»:
PowerShell использует строгий и логичный синтаксис команд:
Глагол-Существительное (Verb-Noun)
Существительное
Даже если вы не знаете точной команды, вы можете предположить её по смыслу — и почти всегда угадаете.
Командлет Get-Help — ваш главный помощник.
Получим справку о самой справке:
> Get-Help Get-Help
Получим базовую справку о команде для работы с процессами:
> Get-Help Get-Process
Посмотрим примеры использования этой команды:
> Get-Help Get-Process -Examples
Если файл `help` не найден в системе — получим такое сообщение:
Решение:
> Update-Help
Для одного языка:
> Update-Help -UICulture en-US
`-Examples` это невероятно полезный параметр, который часто дает готовые решения для ваших задач.
Получим максимально подробную информацию о команде:
> Get-Help Get-Process -FullВ следующей части: конвеер или цепочка команд (PipeLines)
Полезно? Подпишись.
Понравилось — ставь «+»
Удачи! 🚀
Нужен совет
Приветствую, старшие братья по разуму.
В тему администрирования полез недавно, менее года назад, в рамках хобби.
В итоге из желания "сделать что бы фоточки не просрались, если труба окирпичится" это переросло в нечто большее (immich, облако, smtp, пригоршня сайтов, сервер диспетчеризации и куча мелочевки, живущие на proxmox кластере за OPNsense и ASA5510).
Но тут становится вопрос организации стойки.
Хочется сделать эргономично и удобно, поэтому все шнурки с устройств не стоечного исполнения и серверов вывел на патч-панели, до этого всё было соединено соплями из плоского 6e кабеля с заводским обжимом.
Т.к. обжать многопроволочный плоский кабель я нормально не могу, выводил шнурком 5e, вроде всё разведено нормально, но пошли большие потери скорости.
Между серверами был стабильный гигабит, теперь один из серверов сам ограничил скорость до 100 мегабит, а на нём лежат все бэкапы и процесс резервного копирования стал невыносимо мучительным.
Переобжим патчкорда и смена слотов в патч-панели нифига не помогли.
Грешу еще на то что патч-панели без вывода под экран, но у шнурков 6e на разъемах тоже экрана не было.
Вся витуха проложена на максимальном отдалении от силовых кабелей.
Собственно сами вопросы:
1. Спасет ли перепрокладка с UTP 5e на S/FTP 5e ?
2. Можно ли мэнеджмент порты оставить на UTP ?
3. Можно ли вывести экраны S/FTP и заземлить их на стойку или это не сильно умный вариант?
Пока этот бомж-IT выглядит вот так:
Ввод реализован через archer 1500, с него на гигабитный свич на котором висят серверы и ПК стоящий в этой же стойке и с которого производятся все манипуляции с серверами.
На другом выходе висит умный свич, через который раздаётся интернет на второй этаж и wifi на mesh.
Все менджмент порты объединены на второй роутер, отрезанный от всех сетей, к которому, при необходимости, подключаюсь по воздуху.
На фото не все перемычки, т.к. делалось давно, от желтых вообще избавился, т.к. кабель оказался хуже некуда.
Один из симптомов, почему грешу на новый кабель, это то, что умный свич при тесте показывает длину кабеля на второй этаж +/- правильную, а длину кабеля до роутера даже не может определить, хотя там всего около 2м.
Да, надо плюнуть на всё и поднять между серверами 10G сетку, но так как это хобби, я не готов вкладываться в приобретение трёх 10G сетевух, но позже к этому обязательно вернусь (:
И снова да, коллег у которых можно это спросить, не пугая вас своей тупостью и древним железом, увы, нет. Посему, извините.
Вам сегодня везет? Предлагаем проверить!
Сразитесь в трех играх и зарядитесь удачей на весь день. Бонус победителям: промокод и награда в профиль.