<?xml version="1.0" encoding="utf-8" ?><rss version="2.0" xmlns:tt="http://teletype.in/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:media="http://search.yahoo.com/mrss/"><channel><title>@maxadmin</title><generator>teletype.in</generator><description><![CDATA[@maxadmin]]></description><image><url>https://img2.teletype.in/files/15/c3/15c34446-03f1-463f-ab85-ea85323ea45e.png</url><title>@maxadmin</title><link>https://maxadmin.ru/</link></image><link>https://maxadmin.ru/?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=maxadmin</link><atom:link rel="self" type="application/rss+xml" href="https://teletype.in/rss/maxadmin?offset=0"></atom:link><atom:link rel="next" type="application/rss+xml" href="https://teletype.in/rss/maxadmin?offset=10"></atom:link><atom:link rel="search" type="application/opensearchdescription+xml" title="Teletype" href="https://teletype.in/opensearch.xml"></atom:link><pubDate>Wed, 08 Apr 2026 03:16:30 GMT</pubDate><lastBuildDate>Wed, 08 Apr 2026 03:16:30 GMT</lastBuildDate><item><guid isPermaLink="true">https://maxadmin.ru/SQL_backup_to_network_dirve</guid><link>https://maxadmin.ru/SQL_backup_to_network_dirve?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=maxadmin</link><comments>https://maxadmin.ru/SQL_backup_to_network_dirve?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=maxadmin#comments</comments><dc:creator>maxadmin</dc:creator><title>Резервное копирование MS SQL баз в сетевой каталог </title><pubDate>Tue, 25 Feb 2025 12:34:32 GMT</pubDate><category>MS SQL</category><description><![CDATA[Для начала нужно сделать пользователя для SQL Server Agent для того чтобы монтировать сетевой диск.]]></description><content:encoded><![CDATA[
  <p id="yrfB"><strong>Для начала нужно сделать пользователя для SQL Server Agent для того чтобы монтировать сетевой диск. </strong></p>
  <ul id="EQUq">
    <li id="SBbc">Активируйте <code>xp_cmdshell</code> в SQL Server run script (один раз):</li>
  </ul>
  <pre id="iSgT">EXEC sp_configure &#x27;show advanced options&#x27;, 1; RECONFIGURE; EXEC sp_configure &#x27;xp_cmdshell&#x27;, 1; RECONFIGURE;</pre>
  <ul id="MaJD">
    <li id="eQ0h"><strong> Далее идём в SSMS -&gt; SQL server agent -&gt; Jobs</strong></li>
    <li id="Qm8A">Смонтируйте сетевой диск:</li>
  </ul>
  <pre id="ovdZ">EXEC xp_cmdshell &#x27;net use X: \\u443481.your-storagebox.de\u443481-sub1 /user:username password&#x27;;</pre>
  <ul id="dXmi">
    <li id="WadM">После успешного монтирования выполните резервное копирование:</li>
  </ul>
  <pre id="64mq">BACKUP DATABASE [boykomtest] TO DISK = &#x27;X:\backup\boykomtest.bak&#x27; WITH INIT, COMPRESSION, CHECKSUM;</pre>
  <ul id="Vl6r">
    <li id="fTPB">По завершении работы отключите сетевой диск:</li>
  </ul>
  <pre id="Wmty">EXEC xp_cmdshell &#x27;net use X: /delete&#x27;;</pre>
  <p id="LL3l">Если хочется копировать все пользовательские базы данных то скрипт будет выглядеть вот так: </p>
  <pre id="Dm06">DECLARE @BackupPath NVARCHAR(255) = &#x27;\\u443481.your-storagebox.de\u443481-sub1\backup\&#x27;
DECLARE @DatabaseName NVARCHAR(255)
DECLARE @BackupFile NVARCHAR(500)
DECLARE @SQL NVARCHAR(MAX)

-- Курсор для перебора всех пользовательских баз данных
DECLARE db_cursor CURSOR FOR
SELECT name FROM sys.databases
WHERE database_id &gt; 4 -- Исключаем системные базы данных
AND name NOT IN (&#x27;CompressionSetting&#x27;) -- Исключаем определённые базы

OPEN db_cursor
FETCH NEXT FROM db_cursor INTO @DatabaseName

WHILE @@FETCH_STATUS = 0
BEGIN
    -- Формируем имя файла бэкапа с полным путем
    SET @BackupFile = @BackupPath + &#x27;full_&#x27; + @DatabaseName + &#x27;_&#x27;
                      + REPLACE(CONVERT(NVARCHAR, GETDATE(), 120), &#x27;:&#x27;, &#x27;-&#x27;) + &#x27;.bak&#x27;
    
    -- Формируем SQL-запрос для выполнения бэкапа
    SET @SQL = &#x27;BACKUP DATABASE [&#x27; + @DatabaseName + &#x27;] TO DISK = &#x27; + QUOTENAME(@BackupFile, &#x27;&#x27;&#x27;&#x27;) + &#x27;
                WITH INIT, COMPRESSION, CHECKSUM, FORMAT;&#x27;
    
    -- Логируем SQL-запрос для отладки
    PRINT &#x27;Executing: &#x27; + @SQL

    -- Выполняем бэкап
    EXEC sp_executesql @SQL

    -- Переход к следующей базе данных
    FETCH NEXT FROM db_cursor INTO @DatabaseName
END

CLOSE db_cursor
DEALLOCATE db_cursor
or
db_cursor
DEALLOCATE db_cursor
</pre>

]]></content:encoded></item><item><guid isPermaLink="true">https://maxadmin.ru/external-ip-mikrotik</guid><link>https://maxadmin.ru/external-ip-mikrotik?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=maxadmin</link><comments>https://maxadmin.ru/external-ip-mikrotik?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=maxadmin#comments</comments><dc:creator>maxadmin</dc:creator><title>Определение внешнего ip mikrotik из командной строки</title><pubDate>Sun, 13 Oct 2024 08:54:30 GMT</pubDate><category>Mikrotik</category><description><![CDATA[<img src="https://img3.teletype.in/files/ef/6c/ef6c1213-c438-446d-8447-20380c9374cc.png"></img>Команда для командной строки микрота чтобы узнать внешний айпи
/tool fetch url=&quot;https://trackip.net/ip&quot; mode=https output=user]]></description><content:encoded><![CDATA[
  <p id="HI5R">Команда для командной строки микрота чтобы узнать внешний айпи<br /><code>/tool fetch url=&quot;<a href="https://trackip.net/ip" target="_blank">https://trackip.net/ip</a>&quot; mode=https output=user</code></p>
  <figure id="pazf" class="m_original">
    <img src="https://img3.teletype.in/files/ef/6c/ef6c1213-c438-446d-8447-20380c9374cc.png" width="557" />
  </figure>

]]></content:encoded></item><item><guid isPermaLink="true">https://maxadmin.ru/how-to-update</guid><link>https://maxadmin.ru/how-to-update?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=maxadmin</link><comments>https://maxadmin.ru/how-to-update?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=maxadmin#comments</comments><dc:creator>maxadmin</dc:creator><title>обновление ESXI</title><pubDate>Sat, 28 Sep 2024 17:24:04 GMT</pubDate><category>VMware ESXI</category><description><![CDATA[just upgrade in place, no download needed]]></description><content:encoded><![CDATA[
  <p id="AtU5">just upgrade in place, no download needed</p>
  <p id="xPuw"><code>esxcli network firewall ruleset set -e true -r httpClient</code></p>
  <p id="l8oQ"><code>esxcli software profile update -p ESXi-6.7.0-20201104001-standard \<br />-d https://hostupdate.vmware.com/software/VUM/PRODUCTION/main/vmw-depot-index.xml</code></p>
  <p id="7uWZ"><code>esxcli network firewall ruleset set -e false -r httpClient</code></p>
  <p id="ZfC8"><br /></p>
  <p id="B4rb">номер обновления берём тут</p>
  <p id="pOV1"> <a href="https://docs.vmware.com/en/VMware-vSphere/6.7/rn/esxi670-202111001.html" target="_blank">https://docs.vmware.com/en/VMware-vSphere/6.7/rn/esxi670-202111001.html</a></p>
  <p id="wC0V"></p>
  <figure id="xEpK" class="m_original">
    <img src="https://img4.teletype.in/files/34/d1/34d1788b-e972-4017-9c7b-90e016b210ff.png" width="291" />
  </figure>

]]></content:encoded></item><item><guid isPermaLink="true">https://maxadmin.ru/about-nebula</guid><link>https://maxadmin.ru/about-nebula?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=maxadmin</link><comments>https://maxadmin.ru/about-nebula?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=maxadmin#comments</comments><dc:creator>maxadmin</dc:creator><title>Что такое Nebula и зачем она нужна?  </title><pubDate>Sat, 14 Sep 2024 20:15:09 GMT</pubDate><media:content medium="image" url="https://img1.teletype.in/files/cc/28/cc28f166-2049-4c18-a94c-b03d756fdc64.png"></media:content><category>Linux</category><description><![CDATA[<img src="https://img2.teletype.in/files/18/b2/18b29cc0-f029-40cb-acc5-531cb8a9a048.png"></img>Nebula — это оверлейная сеть, которая позволяет создавать зашифрованные, безопасные соединения между узлами (компьютерами, серверами, устройствами) через существующие IP-сети, такие как Интернет. Основное назначение Nebula — это создание частных виртуальных сетей, которые могут работать поверх любых IP-сетей, включая сети с ограниченным доступом за NAT или брандмауэрами. Этот инструмент был разработан компанией Slack и открыт как проект с открытым исходным кодом.]]></description><content:encoded><![CDATA[
  <figure id="HBA5" class="m_column">
    <img src="https://img2.teletype.in/files/18/b2/18b29cc0-f029-40cb-acc5-531cb8a9a048.png" width="838" />
  </figure>
  <p id="SpQd"><strong><br />Nebula</strong> — это оверлейная сеть, которая позволяет создавать зашифрованные, безопасные соединения между узлами (компьютерами, серверами, устройствами) через существующие IP-сети, такие как Интернет. Основное назначение Nebula — это создание частных виртуальных сетей, которые могут работать поверх любых IP-сетей, включая сети с ограниченным доступом за NAT или брандмауэрами. Этот инструмент был разработан компанией Slack и открыт как проект с открытым исходным кодом.</p>
  <p id="YkDS">Nebula работает по модели P2P (peer-to-peer) и использует <strong>сертификаты </strong>для аутентификации и авторизации узлов, что обеспечивает высокий уровень безопасности и контроля над сетью.</p>
  <h2 id="siPV">Основные компоненты сети Nebula</h2>
  <p id="FZgF">1. <strong>Центр сертификации (CA)</strong>: <br />   Это ключевой элемент для управления узлами в сети Nebula. Центр сертификации используется для генерации и подписания сертификатов узлов, которые позволяют им участвовать в сети. Сертификаты содержат информацию о каждом узле, включая его IP-адрес и группы безопасности (т.н. &quot;группы&quot;). Все узлы доверяют одному центру сертификации, что обеспечивает их взаимную аутентификацию.</p>
  <p id="kJte">2. <strong>Узлы (Nodes)</strong>:<br />   Узлы — это устройства (сервера, компьютеры, устройства IoT и т.д.), которые участвуют в оверлейной сети Nebula. Каждый узел использует зашифрованное соединение для общения с другими узлами, и каждый узел имеет уникальный сертификат для аутентификации.</p>
  <p id="sTuJ">3. <strong>Маяки (Lighthouses)</strong>:<br />   Маяки служат для обнаружения узлов в сети и помогают узлам найти друг друга, особенно если они находятся за NAT или брандмауэром. Маяки не маршрутизируют трафик, а только сообщают узлам, как установить соединение между собой. Маяки играют важную роль в обеспечении работы сети, но они не участвуют в передаче данных напрямую.</p>
  <h2 id="aH7i">Принцип работы Nebula</h2>
  <p id="6WZt">Nebula использует криптографические протоколы для шифрования трафика между узлами, включая <strong>Elliptic-curve Diffie-Hellman (ECDH)</strong> для обмена ключами и <strong>AES-256-GCM</strong> для шифрования данных. Все узлы используют сертификаты, которые подписаны одним центром сертификации, что гарантирует, что все узлы доверяют друг другу.</p>
  <p id="sA9c">Когда узел хочет установить соединение с другим узлом, он обращается к маякам (lighthouses) для получения информации об IP-адресах других узлов. После этого узлы могут установить прямое P2P-соединение через зашифрованные туннели.</p>
  <h2 id="35HD">Сертификаты и центр сертификации (CA)</h2>
  <p id="1Uhs">Одним из ключевых аспектов работы Nebula является управление сертификатами. Для настройки сети необходимо:<br />1. Создать <strong>центр сертификации (CA)</strong>, который будет генерировать сертификаты для всех узлов.<br />2. Для каждого узла (маяков и узлов сети) необходимо создать сертификат, подписанный центром сертификации. Сертификат содержит информацию об IP-адресе узла и его принадлежности к определённой группе безопасности.</p>
  <p id="8MWU">Сертификаты позволяют контролировать, какие узлы могут общаться друг с другом и какие права доступа есть у каждого узла.</p>
  <h2 id="fRjt">Группы безопасности и файерволл</h2>
  <p id="SM9V">Nebula использует концепцию <strong>групп безопасности</strong>, которые определяют, какие узлы могут взаимодействовать друг с другом. Например, вы можете разделить сеть на несколько групп (например, &quot;network1&quot;, &quot;network2&quot;, &quot;servers&quot;, &quot;clients&quot;) и настроить правила файерволла, которые будут управлять доступом между узлами.</p>
  <p id="BFFI">Пример правил файерволла:</p>
  <pre id="tBxL">firewall:
  inbound:
    - port: any
      proto: any
      groups:
        - network1  # Разрешить входящий трафик только от узлов из группы network1
  outbound:
    - port: any
      proto: any
      host: any</pre>
  <p id="UL7x">Эти правила позволяют ограничить доступ к узлам на основе их принадлежности к группам безопасности.</p>
  <h2 id="EB9Z">Настройка нескольких маяков</h2>
  <p id="b36h">Для повышения отказоустойчивости и производительности рекомендуется настроить несколько маяков в разных частях мира. Если один маяк выйдет из строя, другие маяки смогут продолжать работу, помогая узлам находить друг друга.</p>
  <h2 id="SHDi">Сервер генерации сертификатов и резервирование данных</h2>
  <p id="7u6J">Для управления сертификатами обычно используется отдельная машина — <strong>сервер центра сертификации (CA)</strong>. На этом сервере хранятся:<br />- <strong>Закрытый ключ центра сертификации (ca.key)</strong> — самый важный файл, который нужно защитить. Без него невозможно будет создать новые сертификаты.<br />- <strong>Сертификат центра сертификации (ca.crt)</strong> — этот файл распространяется среди узлов для их аутентификации друг с другом.</p>
  <p id="UxLP">Если сервер центра сертификации выйдет из строя или потеряет доступ, вам потребуется восстановить его с помощью резервной копии файла &#x60;ca.key&#x60;. Без этого файла вы не сможете создать новые сертификаты для узлов.</p>
  <h2 id="vqR2">Автоматизация и управление сетью</h2>
  <p id="OGDF"><strong>Автоматизация </strong>управления сетью Nebula может быть достигнута с помощью инструментов конфигурации, таких как <strong>Ansible</strong>, <strong>Puppet </strong>или <strong>Chef</strong>, которые позволяют автоматизировать развертывание узлов и обновление конфигурационных файлов. Эти инструменты помогают централизованно управлять сертификатами и обновлениями для всех узлов в сети.</p>
  <p id="boZT">На текущий момент официального <strong>web-GUI</strong> для управления Nebula нет, однако с помощью CLI и вышеупомянутых инструментов можно автоматизировать многие процессы. При необходимости можно разработать собственный веб-интерфейс для управления сетью на основе существующих скриптов.</p>
  <h2 id="enWB">Масштабирование сети Nebula</h2>
  <p id="3Q6d">Nebula легко масштабируется, что позволяет добавлять новые узлы и сети (сегменты) в существующую инфраструктуру. Для этого достаточно создать сертификаты для новых узлов с помощью центра сертификации, настроить конфигурационные файлы и подключить узлы к маякам. Сетевые сегменты можно разделить на группы безопасности для ограничения доступа между различными сетями.</p>
  <p id="mQpN">Заключение</p>
  <p id="sIOc">Nebula — это мощное решение для создания защищённых виртуальных сетей поверх существующих IP-сетей. Она обеспечивает высокий уровень безопасности, гибкости и масштабируемости благодаря использованию сертификатов, шифрования и централизованного управления доступом. Несмотря на отсутствие официального веб-интерфейса, Nebula позволяет эффективно управлять большими распределёнными сетями с помощью инструментов автоматизации и центра сертификации.</p>
  <p id="GTSG">Это делает Nebula отличным выбором для компаний, которые хотят создать собственную VPN-сеть с высокой степенью контроля и безопасности.</p>
  <p id="gf9Y"><a href="https://linuxblog.xyz/posts/slack-nebula/" target="_blank">https://linuxblog.xyz/posts/slack-nebula/</a><br />Вот отличная статья по настройке</p>
  <p id="lyRb"><a href="https://hub.docker.com/r/renehonig/nebula" target="_blank">https://hub.docker.com/r/renehonig/nebula</a><br />докер контейнер для быстрого старта</p>

]]></content:encoded></item><item><guid isPermaLink="true">https://maxadmin.ru/vps-bench</guid><link>https://maxadmin.ru/vps-bench?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=maxadmin</link><comments>https://maxadmin.ru/vps-bench?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=maxadmin#comments</comments><dc:creator>maxadmin</dc:creator><title>Тестирование производительности VPS сервера LINUX (debian/ubuntu)</title><pubDate>Sat, 07 Sep 2024 07:43:01 GMT</pubDate><media:content medium="image" url="https://img1.teletype.in/files/cd/de/cdde4006-3985-4086-9f7b-38517cb1f452.png"></media:content><category>Linux</category><description><![CDATA[<img src="https://img1.teletype.in/files/4e/e9/4ee91f57-7015-4d34-8d47-52a9b9be9fa4.png"></img>Тесты производительности VPS необходимы для объективной оценки вычислительных ресурсов серверов. В вашем случае, проведение таких тестов помогает сравнить различные виртуальные серверы по ключевым параметрам: производительности процессора (CPU), скорости работы с памятью (RAM), пропускной способности дисковой системы и скорости интернет-соединения. Это позволяет выбрать оптимальный сервер для конкретных задач, будь то хостинг приложений, базы данных или вычислительные задачи. С помощью таких бенчмарков, как Geekbench, можно легко получить результаты в виде баллов и сравнить VPS по объективным метрикам.]]></description><content:encoded><![CDATA[
  <figure id="ayoP" class="m_retina">
    <img src="https://img1.teletype.in/files/4e/e9/4ee91f57-7015-4d34-8d47-52a9b9be9fa4.png" width="479" />
  </figure>
  <p id="3Txm">Тесты производительности VPS необходимы для объективной оценки вычислительных ресурсов серверов. Проведение таких тестов помогает сравнить различные виртуальные серверы по ключевым параметрам: производительности процессора (CPU), скорости работы с памятью (RAM), пропускной способности дисковой системы и скорости интернет-соединения. Это позволяет выбрать оптимальный сервер для конкретных задач, будь то хостинг приложений, базы данных или вычислительные задачи. С помощью таких бенчмарков, как Geekbench, можно легко получить результаты в виде баллов и сравнить VPS по объективным метрикам.</p>
  <hr />
  <h3 id="6dWd">Способ №1 - быстрый</h3>
  <p id="xtiw">С помощью инструментов <strong>sysbench</strong> и <strong>Ookla Speedtest CLI</strong> можно легко протестировать ключевые параметры сервера: процессор (CPU), оперативную память, дисковую систему и скорость интернет-соединения.</p>
  <p id="GJ49">Эти тесты позволяют объективно оценить, насколько VPS отвечает требованиям пользователя по производительности. Результаты записываются в текстовый файл и могут быть использованы для сравнения различных серверов, что упрощает принятие решения о выборе подходящего хостинга.</p>
  <p id="KYqm">Для автоматизации процесса создан скрипт, который выполняет все тесты, сохраняет результаты в файл и загружает их на FTP-сервер для дальнейшего анализа.</p>
  <p id="Svr6">Как использовать:</p>
  <p id="E61L">Создайте скрипт:</p>
  <pre id="WZPt">nano boyko_it_linux_server_benchmark.sh</pre>
  <pre id="S1X4">#!/bin/bash

# Установка sysbench
echo &quot;Установка sysbench...&quot;
sudo apt update &amp;&amp; sudo apt install -y sysbench

# Установка Ookla Speedtest CLI
echo &quot;Установка Ookla Speedtest CLI...&quot;
sudo apt install -y gnupg1 apt-transport-https dirmngr
curl -s https://packagecloud.io/install/repositories/ookla/speedtest-cli/script.deb.sh | sudo bash
sudo apt install -y speedtest

# Получаем IP-адрес сервера
IP_ADDRESS=$(hostname -I | awk &#x27;{print $1}&#x27;)

# Получаем имя хоста
HOST_NAME=$(hostname)

# Формируем имя файла с результатами, включающее IP-адрес и имя хоста
RESULTS_FILE=&quot;sysbench_speedtest_${IP_ADDRESS}_${HOST_NAME}.json&quot;

# Очистка файла перед началом тестов
&gt; $RESULTS_FILE

# Переменные для хранения значений
CPU_EVENTS=&quot;&quot;
MEMORY_TRANSFERED=&quot;&quot;
MEMORY_SPEED=&quot;&quot;
DISK_READ=&quot;&quot;
DISK_WRITE=&quot;&quot;
INTERNET_DOWNLOAD=&quot;&quot;
INTERNET_UPLOAD=&quot;&quot;

# Тест CPU
CPU_EVENTS=$(sysbench cpu --cpu-max-prime=20000 run | grep &quot;events per second&quot; | awk &#x27;{print $4}&#x27;)

# Тест памяти (правка для удаления скобки)
MEMORY_RESULTS=$(sysbench memory run | grep &quot;transferred&quot;)
MEMORY_TRANSFERED=$(echo $MEMORY_RESULTS | awk &#x27;{print $1}&#x27;)
MEMORY_SPEED=$(echo $MEMORY_RESULTS | awk &#x27;{print $4}&#x27; | sed &#x27;s/[()]//g&#x27;)

# Тест дисковой системы (подготовка файлов для теста и результаты)
sysbench fileio --file-total-size=2G prepare
DISK_READ=$(sysbench fileio --file-total-size=2G --file-test-mode=rndrw run | grep &quot;read, MiB/s&quot; | sed &#x27;s/[^0-9.]//g&#x27;)
DISK_WRITE=$(sysbench fileio --file-total-size=2G --file-test-mode=rndrw run | grep &quot;written, MiB/s&quot; | sed &#x27;s/[^0-9.]//g&#x27;)
sysbench fileio --file-total-size=2G cleanup

# Тест скорости интернета
INTERNET_DOWNLOAD=$(speedtest --accept-license --accept-gdpr | grep &quot;Download&quot; | awk &#x27;{print $3}&#x27;)
INTERNET_UPLOAD=$(speedtest --accept-license --accept-gdpr | grep &quot;Upload&quot; | awk &#x27;{print $3}&#x27;)

# Создание JSON-выхода с именем сервера и IP
echo &quot;{
  \&quot;server_name\&quot;: \&quot;$HOST_NAME\&quot;,
  \&quot;server_ip\&quot;: \&quot;$IP_ADDRESS\&quot;,
  \&quot;cpu\&quot;: $CPU_EVENTS,
  \&quot;memory\&quot;: {
    \&quot;transfered\&quot;: $MEMORY_TRANSFERED,
    \&quot;speed\&quot;: $MEMORY_SPEED
  },
  \&quot;disk\&quot;: {
    \&quot;read\&quot;: $DISK_READ,
    \&quot;write\&quot;: $DISK_WRITE
  },
  \&quot;internet\&quot;: {
    \&quot;download\&quot;: $INTERNET_DOWNLOAD,
    \&quot;upload\&quot;: $INTERNET_UPLOAD
  }
}&quot; &gt; $RESULTS_FILE

echo &quot;Результаты тестов сохранены в $RESULTS_FILE в формате JSON&quot;

# Загрузка файла на FTP сервер
echo &quot;Загрузка файла на FTP сервер...&quot;
curl -T $RESULTS_FILE ftp://user:password@ftp.server.com/linux_bench/ --ftp-create-dirs

echo &quot;Файл загружен на FTP сервер: $RESULTS_FILE&quot;

# Отправка JSON на вебхук
WEBHOOK_URL=&quot;WEBHOOK_URL&quot;
echo &quot;Отправка данных на вебхук: $WEBHOOK_URL&quot;
curl -X POST -H &quot;Content-Type: application/json&quot; \
  -d @&quot;$RESULTS_FILE&quot; \
  $WEBHOOK_URL

echo &quot;Данные отправлены на вебхук: $WEBHOOK_URL&quot;
</pre>
  <p id="HrJR">Не забудьте заменить логин и пароль и пусть ftp сервера на свои чтобы файлы с результатами сразу загрузились к вам на сервер.</p>
  <p id="MXs6">Сделайте скрипт исполняемым:</p>
  <pre id="xPyj">chmod +x boyko_it_linux_server_benchmark.sh</pre>
  <p id="eoA7">Запустите скрипт:</p>
  <pre id="6RdX">./boyko_it_linux_server_benchmark.sh</pre>
  <p id="YuIz">Этот скрипт выполнит тесты, сохранит результаты в файл с именем, содержащим IP-адрес и имя хоста, а затем загрузит файл на ваш FTP-сервер и отправит данные на вебхук для дальнейшей автоматизиции.</p>
  <hr />
  <h3 id="tLdv">Способ №2 - медленный и не на всех VPS работает, однако более детализированный. </h3>
  <p id="8ynT">Тест делается примерно минут 10-15</p>
  <p id="ijKs">Для установки <strong>Geekbench</strong> через командную строку сервера (без доступа к графическому интерфейсу), выполните следующие команды для загрузки и установки бенчмарка на вашем сервере с <strong>Ubuntu</strong> или <strong>Debian</strong>.</p>
  <p id="Ob21"></p>
  <p id="j46V">Шаги установки и запуска Geekbench:</p>
  <p id="xsxC"><strong>1. Перейдите в рабочую директорию</strong>:</p>
  <pre id="xvTn">cd /tmp</pre>
  <p id="Jyod"><strong>2. Скачайте последнюю версию Geekbench для Linux</strong>: Используйте команду <code>wget</code>, чтобы загрузить архив</p>
  <pre id="0q7P">wget https://cdn.geekbench.com/Geekbench-6.2.0-Linux.tar.gz</pre>
  <p id="YooI"><strong>3. Распакуйте архив</strong>: Используйте команду <code>tar</code>, чтобы распаковать загруженный файл:</p>
  <pre id="myH7">tar -xvzf Geekbench-6.2.0-Linux.tar.gz</pre>
  <p id="wufG"><strong>4. Перейдите в распакованную директорию</strong>:</p>
  <pre id="bSLZ">cd Geekbench-6.2.0-Linux</pre>
  <p id="4SPX"><strong>5. Запустите тест производительности</strong>: Для запуска теста просто выполните:</p>
  <pre id="e6yb">./geekbench6</pre>
  <p id="oVBZ"><strong>6. Просмотр результатов</strong>: После завершения теста Geekbench покажет вам ссылку на результаты на своём сайте, где вы сможете увидеть подробные данные по вашему тесту и сравнить их с другими системами.</p>
  <h3 id="4k6j">Результаты тестирования</h3>
  <figure id="FgnM" class="m_column">
    <img src="https://img4.teletype.in/files/33/32/33324a87-8fe7-4771-8237-aa24f6c49eda.png" width="849" />
  </figure>
  <figure id="nbfe" class="m_column">
    <img src="https://img2.teletype.in/files/9f/4c/9f4cdfc5-d438-4308-aafd-cb3a833709b3.png" width="879" />
  </figure>
  <figure id="sDsb" class="m_column">
    <img src="https://img3.teletype.in/files/22/da/22daffb5-606c-4649-be8c-96385dfbf3f9.png" width="873" />
  </figure>
  <p id="IO7p">Зарегистрировавшись на сайте geekbench вы сможете сохранять результаты тестирования своих серверов и сравнивать их.</p>
  <h3 id="9aiz">Команды для удаления ненужных файлов после теста:</h3>
  <p id="X5Tq">Перейдите в директорию, где были загружены и распакованы файлы:</p>
  <pre id="V2P4">cd /tmp</pre>
  <p id="fiMU">Удалите скачанный архив и распакованную папку:</p>
  <pre id="JReC">rm -rf Geekbench-6.2.0-Linux.tar.gz Geekbench-6.2.0-Linux</pre>
  <p id="EAic">Да прибудет с вами сила!</p>

]]></content:encoded></item><item><guid isPermaLink="true">https://maxadmin.ru/-lpecpdBifj</guid><link>https://maxadmin.ru/-lpecpdBifj?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=maxadmin</link><comments>https://maxadmin.ru/-lpecpdBifj?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=maxadmin#comments</comments><dc:creator>maxadmin</dc:creator><title>Резервное копирование Docker контейнеров </title><pubDate>Wed, 31 Jul 2024 05:43:34 GMT</pubDate><media:content medium="image" url="https://img4.teletype.in/files/31/81/3181fc1c-b0a4-4801-aea8-8893c41f1eca.png"></media:content><category>Linux</category><description><![CDATA[<img src="https://img3.teletype.in/files/69/d3/69d33ecb-2c2d-4fab-ab10-2e6eded49f31.png"></img>Эта статья была создана с помощью Chat GPT-4, а затем отредактирована мной. Я добился рабочего результата, но это касается только моего конкретного случая. В статье могут быть ошибки, поэтому, пожалуйста, не рассматривайте её как единственно верное решение или истину в последней инстанции.]]></description><content:encoded><![CDATA[
  <figure id="xpKu" class="m_column">
    <img src="https://img3.teletype.in/files/69/d3/69d33ecb-2c2d-4fab-ab10-2e6eded49f31.png" width="1687" />
    <figcaption>Предисловие</figcaption>
  </figure>
  <p id="CfPQ">Эта статья была создана с помощью Chat GPT-4 на основе моей большой беседы с ней и отладки скрипта, а затем отредактирована мной. Я добился рабочего результата, но это касается только моего конкретного случая. Эта статья в первую очередь для того чтобы я сохранил свой собственный best way для достижения результата В статье могут быть ошибки, поэтому, пожалуйста, не рассматривайте её как единственно верное решение или истину в последней инстанции.</p>
  <p id="dW8X"><strong>Введение</strong></p>
  <p id="Ij0U">Резервное копирование Docker контейнеров является критически важным для обеспечения сохранности данных и конфигураций ваших приложений. В этой статье мы рассмотрим, как настроить автоматическое резервное копирование Docker контейнеров и конфигурационных файлов, используя скрипт bash и <code>docker-backup</code>. Также включим шаги по загрузке резервных копий на FTP-сервер для дополнительной безопасности.</p>
  <p id="hLqI">Подготовка:<br /><a href="true">Docker Installation Guide</a><br /><a href="true">Docker Compose Installation Guide</a><br /><a href="true">lftp Official Site</a><br /><a href="true">Go Installation Guide</a><br /><a href="https://github.com/muesli/docker-backup" target="_blank">docker-backup on GitHub</a></p>
  <p id="362k"></p>
  <h2 id="YhDG">Шаг 1: Установка необходимых инструментов</h2>
  <p id="DkDk">Прежде чем приступить к созданию резервных копий, убедитесь, что у вас установлены необходимые инструменты: <code>docker</code>, <code>docker-compose</code>, <code>lftp</code>, и <code>docker-backup</code>.</p>
  <h3 id="kQr2">Установка lftp</h3>
  <p id="r0lt">Для загрузки резервных копий на FTP-сервер установите <code>lftp</code>:</p>
  <pre id="VZdS">sudo apt-get update
sudo apt-get install lftp</pre>
  <h3 id="ZcIL">Установка Go</h3>
  <p id="9SpY">Для установки Go выполните следующие шаги:</p>
  <p id="PbOj">1. Скачайте Go:</p>
  <pre id="alpQ">wget https://go.dev/dl/go1.22.5.linux-amd64.tar.gz</pre>
  <p id="npga">2. Распакуйте архив и установите Go:</p>
  <pre id="4LkJ">sudo tar -C /usr/local -xzf go1.22.5.linux-amd64.tar.gz</pre>
  <p id="HyMV">3. Добавьте Go в PATH:</p>
  <pre id="efrt">echo &quot;export PATH=$PATH:/usr/local/go/bin&quot; &gt;&gt; ~/.profile
source ~/.profile
</pre>
  <p id="hLu1"><strong>Установка docker-backup</strong></p>
  <p id="HD2O">Скачайте и установите <code>docker-backup</code> с GitHub:</p>
  <pre id="TeKa">git clone https://github.com/muesli/docker-backup.git
cd docker-backup
go build
sudo mv docker-backup /usr/local/bin/</pre>
  <h2 id="1zHc">Шаг 2: Создание директории для резервных копий</h2>
  <p id="UyNp">Создайте директорию, в которой будут храниться резервные копии:</p>
  <pre id="mWyu">mkdir -p /root/backup</pre>
  <h2 id="i0nw">Шаг 3: Создание скрипта резервного копирования</h2>
  <p id="kQSo">Создайте скрипт резервного копирования, который будет выполнять все необходимые операции, включая создание резервных копий контейнеров, копирование файлов <code>docker-compose.yml</code> и загрузку на FTP-сервер.</p>
  <h3 id="iIu9">Скрипт резервного копирования</h3>
  <p id="kcs4">Создайте файл <code>/root/docker-backup/backup_script.sh</code> и вставьте в него следующий код:</p>
  <pre id="Jr61">#!/bin/bash

# Директория для сохранения резервных копий
BACKUP_DIR=&quot;/root/backup&quot;
TIMESTAMP=$(date +&quot;%Y%m%d_%H%M%S&quot;)
BACKUP_DIR_TIMESTAMP=&quot;$BACKUP_DIR/$TIMESTAMP&quot;

# Убедитесь, что директория для резервных копий существует
mkdir -p $BACKUP_DIR_TIMESTAMP/easyappointments
mkdir -p $BACKUP_DIR_TIMESTAMP/n8n-docker-caddy

# Создание резервных копий всех контейнеров и томов
cd /root/docker-backup
./docker-backup backup easyappointments-easyappointments-1 --tar
./docker-backup backup easyappointments-mysql-1 --tar
./docker-backup backup n8n-docker-caddy-caddy-1 --tar
./docker-backup backup n8n-docker-caddy-postgres-1 --tar
./docker-backup backup n8n-docker-caddy-n8n-1 --tar

# Перемещение созданных резервных копий в соответствующие директории
mv alextselegidis_easyappointments-latest-easyappointments-easyappointments-1.tar $BACKUP_DIR_TIMESTAMP/easyappointments/
mv mysql-8.0-easyappointments-mysql-1.tar $BACKUP_DIR_TIMESTAMP/easyappointments/
mv caddy-latest-n8n-docker-caddy-caddy-1.tar $BACKUP_DIR_TIMESTAMP/n8n-docker-caddy/
mv postgres-13-n8n-docker-caddy-postgres-1.tar $BACKUP_DIR_TIMESTAMP/n8n-docker-caddy/
mv docker.n8n.io_n8nio_n8n-n8n-docker-caddy-n8n-1.tar $BACKUP_DIR_TIMESTAMP/n8n-docker-caddy/

# Копирование файлов docker-compose.yml
cp /root/easyappointments/docker-compose.yml $BACKUP_DIR_TIMESTAMP/easyappointments/
cp /root/n8n-docker-caddy/docker-compose.yml $BACKUP_DIR_TIMESTAMP/n8n-docker-caddy/

# Загрузка резервных копий и docker-compose.yml файлов на FTP-сервер с временными метками
FTP_SERVER=&quot;storagebox.com&quot;
FTP_USERNAME=&quot;username&quot;
FTP_PASSWORD=&quot;password&quot;

# Создание директории на FTP сервере
lftp -u $FTP_USERNAME,$FTP_PASSWORD $FTP_SERVER &lt;&lt;EOF
mkdir -p backup/easyappointments
mkdir -p backup/n8n-docker-caddy
quit
EOF

# Загрузка резервных копий
for file in $BACKUP_DIR_TIMESTAMP/easyappointments/*.tar; do
  BASENAME=$(basename $file)
  lftp -u $FTP_USERNAME,$FTP_PASSWORD -e &quot;put $file -o /backup/easyappointments/${TIMESTAMP}_$BASENAME; quit&quot; $FTP_SERVER
done

for file in $BACKUP_DIR_TIMESTAMP/n8n-docker-caddy/*.tar; do
  BASENAME=$(basename $file)
  lftp -u $FTP_USERNAME,$FTP_PASSWORD -e &quot;put $file -o /backup/n8n-docker-caddy/${TIMESTAMP}_$BASENAME; quit&quot; $FTP_SERVER
done

# Загрузка docker-compose.yml файлов с временными метками
lftp -u $FTP_USERNAME,$FTP_PASSWORD -e &quot;put $BACKUP_DIR_TIMESTAMP/easyappointments/docker-compose.yml -o /backup/easyappointments/${TIMESTAMP}_docker-compose.yml; quit&quot; $FTP_SERVER
lftp -u $FTP_USERNAME,$FTP_PASSWORD -e &quot;put $BACKUP_DIR_TIMESTAMP/n8n-docker-caddy/docker-compose.yml -o /backup/n8n-docker-caddy/${TIMESTAMP}_docker-compose.yml; quit&quot; $FTP_SERVER

echo &quot;Backup completed and uploaded to FTP at $TIMESTAMP&quot; &gt;&gt; /var/log/backup.log</pre>
  <h2 id="gxoL">Шаг 4: Настройка прав и создание задачи cron</h2>
  <p id="dQiw">Убедитесь, что у скрипта есть права на выполнение:</p>
  <pre id="pg0z">chmod +x /root/docker-backup/backup_script.sh</pre>
  <p id="W06z">Добавьте задачу cron для автоматического выполнения скрипта, например, каждый день в 6 утра:</p>
  <pre id="1c5Y">crontab -e</pre>
  <p id="RQGT">Добавьте следующую строку в файл crontab:</p>
  <pre id="ywhk">0 6 * * * /root/docker-backup/backup_script.sh &gt;&gt; /var/log/backup.log 2&gt;&amp;1</pre>
  <h2 id="CLiN">Заключение</h2>
  <p id="DtXo">Теперь у вас настроено автоматическое резервное копирование Docker контейнеров и файлов <code>docker-compose.yml</code>, с загрузкой резервных копий на FTP-сервер. Этот скрипт гарантирует, что у вас всегда будет актуальная резервная копия ваших контейнеров и конфигураций, которая может быть использована для восстановления в случае необходимости.</p>

]]></content:encoded></item><item><guid isPermaLink="true">https://maxadmin.ru/yOpEx2Ko1-i</guid><link>https://maxadmin.ru/yOpEx2Ko1-i?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=maxadmin</link><comments>https://maxadmin.ru/yOpEx2Ko1-i?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=maxadmin#comments</comments><dc:creator>maxadmin</dc:creator><title>Получение OAuth Google бесплатно</title><pubDate>Sun, 28 Jul 2024 03:19:40 GMT</pubDate><media:content medium="image" url="https://img1.teletype.in/files/0e/23/0e23f0a2-b184-4db9-920f-37377835468a.png"></media:content><category>Google</category><description><![CDATA[<img src="https://img1.teletype.in/files/8c/bb/8cbb53c2-dfb3-4418-8301-9f8db8b47c58.png"></img>At the time of writing, one can create a Google Cloud Identity.]]></description><content:encoded><![CDATA[
  <p id="PAz0">At the time of writing, one can create a <a href="https://cloud.google.com/identity/docs/set-up-cloud-identity-admin" target="_blank">Google Cloud Identity</a>.</p>
  <figure id="JtRk" class="m_column">
    <img src="https://img1.teletype.in/files/8c/bb/8cbb53c2-dfb3-4418-8301-9f8db8b47c58.png" width="1307" />
  </figure>
  <p id="dMTG">Assuming you have a domain name that you can control DNS (to confirm ownership), this allows you to create <code>Internal</code> apps, without Google having to validate them.</p>
  <figure id="S0TT" class="m_column">
    <img src="https://img1.teletype.in/files/c3/55/c3559e30-bb6c-4f65-89c9-33b352807aef.png" width="845" />
  </figure>
  <p id="WhXO">I have created internal apps for <a href="https://www.home-assistant.io/" target="_blank">Home Assistant</a>/Google API integration that do not need re-authorising every 30 days. I have yet to pay Google a penny.</p>
  <p id="R06d">For those with knowledge of Microsoft Azure, it&#x27;s very similar to Azure AD (Entra ID), which you can also create for free.</p>

]]></content:encoded></item><item><guid isPermaLink="true">https://maxadmin.ru/expand-lunux-volume-lvm</guid><link>https://maxadmin.ru/expand-lunux-volume-lvm?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=maxadmin</link><comments>https://maxadmin.ru/expand-lunux-volume-lvm?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=maxadmin#comments</comments><dc:creator>maxadmin</dc:creator><title>Увеличить размер раздела диска LVM в Linux Ubuntu </title><pubDate>Wed, 23 Aug 2023 19:18:26 GMT</pubDate><category>Linux</category><description><![CDATA[<img src="https://winitpro.ru/wp-content/uploads/2023/02/cfdisk-uvelichit-razmer-razdela-ubuntu.png"></img>В первую очередь нужно увеличить размер виртуального диска со стороны вашей системы виртуализации]]></description><content:encoded><![CDATA[
  <p id="5uvU">В первую очередь нужно увеличить размер виртуального диска со стороны вашей системы виртуализации</p>
  <p id="RaY2">После того, как вы расширили диск в ВМ, нужно расширить его в гостевой ОС (в этом примере это Ubuntu 22.04 LTS). Чтобы Ubuntu увидела добавленное место, выполните принудительный рескан дисков с помощью команды:</p>
  <p id="2xqd"><code>$ echo 1&gt;/sys/class/block/sda/device/rescan</code></p>
  <p id="kp2X">Для управления разделами используйте утилиту cfdisk:</p>
  <p id="qRUK"><code>$ sudo cfdisk</code></p>
  <p id="pPwW">В данном примере видно, что на диске /dev/sda есть свободное место размером 1 Гб. Выберите раздел, который нужно расширить (/dev/sda3 в этом примере) и выберите в меню <strong>Resize</strong>.</p>
  <p id="PNrK">Чтобы сохранить изменения в разделах диска, выберите в меню <strong>Write</strong>.</p>
  <figure id="YgzN" class="m_original">
    <img src="https://winitpro.ru/wp-content/uploads/2023/02/cfdisk-uvelichit-razmer-razdela-ubuntu.png" width="700" />
  </figure>
  <p id="HQJe">Закройте утилиту cfdisk.</p>
  <p id="Fiba">После того, как вы увеличили физический раздел, нужно увеличить размер логического раздела Ubuntu. Проверьте, что у вас используется используются тома <a href="https://winitpro.ru/index.php/2019/10/28/nastrojka-lvm-razdelov-v-linux/" target="_blank">LVM</a>:</p>
  <p id="61SF"><code>$ sudo lsblk</code></p>
  <figure id="4YKL" class="m_original">
    <img src="https://winitpro.ru/wp-content/uploads/2023/02/lsblk-spisok-ustrojstv-i-razdelov-v-linux.png" width="450" />
  </figure>
  <p id="f9Ff">Вкратце напомним основные концепции LVM:</p>
  <ul id="EHt0">
    <li id="wjCr"><strong>Physical Volume (PV)</strong> — ваши физические диски <code>/dev/sda</code> , <code>/dev/sdb</code> , и т.д.</li>
    <li id="gqml"><strong>Volume Group (VG) </strong>— группы томов, в которые объединены физически диски. Например <code>ubuntu-vg</code> = <code>/dev/sda</code> + <code>/dev/sdb</code> . Также VG можно состоять всего из одного диска.</li>
    <li id="xpwG"><strong>Logical Volume (LV)</strong> — логический раздел в группе томов. Например, <code>ubuntu-vg/root</code> , <code>ubuntu-vg/home</code> , и т.д.</li>
  </ul>
  <p id="0RuF">Проверьте свободное место в группе томов LVM с помощью:</p>
  <p id="5iXd"><code>$ sudo vgdisplay</code></p>
  <p id="1azM">Для расширения раздела LVM нужно сначала увеличить PV (Physical Volume):</p>
  <p id="xHtD"><code>$ sudo pvresize /dev/sda3</code></p>
  <p id="6ZbX">Теперь можно увеличить логический том. В этом примере мы расширим том за счет всего доступного пространства:</p>
  <p id="zGcO"><code>$ sudo lvextend -l +100%FREE /dev/mapper/ubuntu--vg-ubuntu--lv</code></p>
  <pre id="qw32">Logical volume ubuntu-vg/ubuntu-lv successfully resized</pre>
  <figure id="EZYb" class="m_original">
    <img src="https://winitpro.ru/wp-content/uploads/2023/02/uvelichit-lvm-tom-v-ubuntu.png" width="673" />
  </figure>
  <p id="QFBr">Осталось расширить файловую систему. Для ext2, ext3 и ext4 выполните:</p>
  <p id="6Sbh"><code>$ sudo resize2fs /dev/mapper/ubuntu--vg-ubuntu--lv</code></p>
  <p id="9Qs6">Проверьте свободное место в Linux с помощью команды:</p>
  <p id="FCZj"><code>$ df -h</code></p>
  <p id="PvZf">Итак, мы успешно расширили LVM том в Ubuntu.</p>
  <p id="pMNc">Если у вас не используются LVM тома, воспользуйтесь <a href="https://maxadmin.ru/expand-lunux-volume-not-lvm" target="_blank">утилитой parted для увеличения раздела в Linux</a></p>

]]></content:encoded></item><item><guid isPermaLink="true">https://maxadmin.ru/delete-folders</guid><link>https://maxadmin.ru/delete-folders?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=maxadmin</link><comments>https://maxadmin.ru/delete-folders?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=maxadmin#comments</comments><dc:creator>maxadmin</dc:creator><title>Скрипт удаления папок Windows старше N дней</title><pubDate>Thu, 11 May 2023 23:58:13 GMT</pubDate><category>Windows</category><description><![CDATA[<img src="https://img3.teletype.in/files/e3/eb/e3eb728f-97e1-48de-9099-a32f005e2ed7.png"></img>Для запуска этого скрипта необходимо сохранить его в файл с расширением .ps1 и запустить его в PowerShell-консоли. Перед запуском скрипта необходимо установить значения переменных $days и $path в соответствии с вашими потребностями. Также убедитесь, что у вас есть необходимые права на удаление папок в указанной директории.]]></description><content:encoded><![CDATA[
  <p id="q2UL">Для запуска этого скрипта необходимо сохранить его в файл с расширением .ps1 и запустить его в PowerShell-консоли. Перед запуском скрипта необходимо установить значения переменных <code>$days</code> и <code>$path</code> в соответствии с вашими потребностями. Также убедитесь, что у вас есть необходимые права на удаление папок в указанной директории.</p>
  <pre id="qnFh"># Установите дату, старше которой необходимо удалить папки (в днях)
$days = 30

# Установите путь к директории, в которой нужно удалить папки
$path = &quot;C:\Path\To\Directory&quot;

# Получаем текущую дату и вычитаем количество дней, чтобы получить дату, старше которой нужно удалить папки
$date = Get-Date
$oldDate = $date.AddDays(-$days)

# Получаем список папок в указанной директории
$folders = Get-ChildItem $path -Directory

# Инициализируем переменные для отображения прогресса
$totalFolders = $folders.Count
$currentFolder = 0

# Проходим по каждой папке в списке и удаляем те, которые старше указанной даты
foreach ($folder in $folders) {
    if ($folder.LastWriteTime -lt $oldDate) {
        Remove-Item $folder.FullName -Recurse -Force
    }
    $currentFolder++
    $percentComplete = ($currentFolder / $totalFolders) * 100
    Write-Progress -Activity &quot;Removing old folders&quot; -Status &quot;$currentFolder of $totalFolders folders processed&quot; -PercentComplete $percentComplete
}
</pre>
  <figure id="hLAu" class="m_original">
    <img src="https://img3.teletype.in/files/e3/eb/e3eb728f-97e1-48de-9099-a32f005e2ed7.png" width="875" />
  </figure>
  <p id="lI3R">Вариация скрипта удаление папок старше N дней + удаление пустых папок:</p>
  <pre id="foOP"> # Установите дату, старше которой необходимо удалить папки (в днях)
$days = 30

# Установите путь к директории, в которой нужно удалить папки
$path = &quot;C:\Path\To\Directory&quot;

# Получаем текущую дату и вычитаем количество дней, чтобы получить дату, старше которой нужно удалить папки
$date = Get-Date
$oldDate = $date.AddDays(-$days)

# Получаем список папок в указанной директории
$folders = Get-ChildItem $path -Directory

# Инициализируем переменные для отображения прогресса
$totalFolders = $folders.Count
$currentFolder = 0

# Проходим по каждой папке в списке и удаляем те, которые старше указанной даты
foreach ($folder in $folders) {
    if ($folder.LastWriteTime -lt $oldDate) {
        Remove-Item $folder.FullName -Recurse -Force
    }
    elseif ((Get-ChildItem $folder.FullName -Force | Measure-Object).Count -eq 0) {
        Remove-Item $folder.FullName -Recurse -Force
    }
    $currentFolder++
    $percentComplete = ($currentFolder / $totalFolders) * 100
    Write-Progress -Activity &quot;Removing old and empty folders&quot; -Status &quot;$currentFolder of $totalFolders folders processed&quot; -PercentComplete $percentComplete
}
</pre>
  <figure id="YtdY" class="m_original">
    <img src="https://img3.teletype.in/files/ee/1c/ee1c37ab-59b6-4c28-a097-da5d4ca8e006.png" width="502" />
  </figure>

]]></content:encoded></item><item><guid isPermaLink="true">https://maxadmin.ru/mssql-compression-all-bases</guid><link>https://maxadmin.ru/mssql-compression-all-bases?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=maxadmin</link><comments>https://maxadmin.ru/mssql-compression-all-bases?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=maxadmin#comments</comments><dc:creator>maxadmin</dc:creator><title>Скрипт сжатия всех баз MS SQL</title><pubDate>Thu, 11 May 2023 22:55:30 GMT</pubDate><category>MS SQL</category><description><![CDATA[Скрипт обходит все пользовательские базы и сжимает их.]]></description><content:encoded><![CDATA[
  <p id="CZdc">Скрипт обходит все пользовательские базы и сжимает их.</p>
  <p id="bK4T">Данный скрипт является SQL-запросом и содержит несколько действий, которые выполняются для каждой базы данных в текущем экземпляре SQL Server.</p>
  <p id="FEu8">Он выполняет следующие шаги:</p>
  <p id="kQo0">Использует каждую базу данных одну за другой.<br />Если база данных не является одной из системных баз данных (master, model, msdb, tempdb), то он продолжает выполнять скрипт.<br />Находит таблицы в базе данных, у которых не применена сжатие данных.<br />Создает временную таблицу #tmpTables для хранения имён таблиц без сжатия данных.<br />В цикле while выбирает имя таблицы из #tmpTables и выполняет операции перестроения таблицы и индексов на этой таблице с использованием сжатия страниц данных. Затем удаляет эту таблицу из временной таблицы.<br />Проверяет, были ли внесены изменения в базу данных. Если да, то выполняет операцию сжатия базы данных с помощью команды DBCC SHRINKDATABASE.<br />Удаляет временную таблицу и возвращает имя текущей базы данных.<br />Таким образом, данный скрипт выполняет сжатие данных таблиц и индексов для всех таблиц в каждой базе данных в экземпляре SQL Server, если они еще не сжаты. Он также сжимает базу данных, если были внесены изменения.</p>
  <pre id="BHas">EXEC sp_MSforeachdb &#x27;USE ?
IF NOT (&#x27;&#x27;?&#x27;&#x27; = &#x27;&#x27;master&#x27;&#x27; OR &#x27;&#x27;?&#x27;&#x27; = &#x27;&#x27;model&#x27;&#x27; OR &#x27;&#x27;?&#x27;&#x27; = &#x27;&#x27;msdb&#x27;&#x27; OR &#x27;&#x27;?&#x27;&#x27; = &#x27;&#x27;tempdb&#x27;&#x27;)
BEGIN
  SELECT DISTINCT
    [tables].name AS TName
  INTO #tmpTables
  FROM sys.tables [tables]
  LEFT JOIN sys.indexes [indexes]
  ON [tables].object_id = [indexes].object_id
  LEFT JOIN sys.partitions p
  ON [indexes].index_id = p.index_id
    AND [tables].object_id = p.object_id
  WHERE p.data_compression_desc = &#x27;&#x27;NONE&#x27;&#x27;
  DECLARE @TName nvarchar(2000)
  DECLARE @DBModifyed int
  SET @DBModifyed = 0
  SELECT TOP 1 @TName = TName FROM #tmpTables
  WHILE @@ROWCOUNT != 0
  BEGIN
    EXEC (&#x27;&#x27;ALTER TABLE &#x27;&#x27; + @TName + &#x27;&#x27; REBUILD PARTITION = ALL WITH (DATA_COMPRESSION = PAGE)&#x27;&#x27;)
    EXEC (&#x27;&#x27;ALTER INDEX ALL ON &#x27;&#x27; + @TName + &#x27;&#x27; REBUILD PARTITION = ALL WITH (DATA_COMPRESSION = PAGE)&#x27;&#x27;)
    DELETE #tmpTables WHERE TName = @TName
    SET @DBModifyed = 1
    SELECT TOP 1 @TName = TName FROM #tmpTables
  END
  IF @DBModifyed = 1
  BEGIN
    DBCC SHRINKDATABASE(N&#x27;&#x27;?&#x27;&#x27;, 0)
  END
  DROP TABLE #tmpTables
  SELECT &#x27;&#x27;?&#x27;&#x27;
END&#x27;</pre>

]]></content:encoded></item></channel></rss>