Jurik-Phys.Net

~ Простота и ясность ~

Инструменты пользователя

Инструменты сайта


itechnology:linux

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Предыдущая версия справа и слеваПредыдущая версия
Следующая версия
Предыдущая версия
itechnology:linux [2019/11/07 13:32] – [Уменьшение размера Raid-1] jurik_physitechnology:linux [2025/01/11 23:34] (текущий) jurik_phys
Строка 1: Строка 1:
 ====== Linux ====== ====== Linux ======
 +
 +===== Создание нового пользователя  =====
 +  * Новый unix-пользователь<code>useradd -d /home/new_user -s /bin/bash new_user</code>
 +  * Домашний каталог для нового пользователя <code>mkdir /home/new_user</code>
 +  * Установка владельца для домашнего каталога<code>chown new_user:new_user /home/new_user</code>
 +  * Задание пароля пользователя<code>passwd new_user</code>
 +  * Логин под новым пользователем<code>su new_user</code>
  
 ===== Переименование пользователя ===== ===== Переименование пользователя =====
Строка 13: Строка 20:
 mv /home/oldhome  /home/newhome</code> mv /home/oldhome  /home/newhome</code>
   * При необходимости заменить имя пользователя в конфигурационнфх файлах программ пользователя, но желательно переименовывать только новых пользователей.     * При необходимости заменить имя пользователя в конфигурационнфх файлах программ пользователя, но желательно переименовывать только новых пользователей.  
 +
 +===== Общее локальное хранилище =====
 +  - Группа (data) пользователей общего локального ресурса<code bash>groupadd data</code>
 +  - Каталог локального ресурса<code bash>mkdir /mnt/data</code>
 +  - Подключение каталога /mnt/data/
 +  - Установка gid и группы data на каталог<code bash>chmod 2775 /mnt/data/
 +chown root:data /mnt/data/</code>
 +  - Добавление пользователей в группу "data"<code bash>usermod -a -G data user_name</code>
 +  - Настройка прав доступа для вновь создаваемых каталогов<code bash>setfacl -R -m g::rwx /mnt/data
 +# show result
 +getfacl /mnt/data</code>
  
 ===== SSL-сертификат для сайта ===== ===== SSL-сертификат для сайта =====
Строка 23: Строка 41:
   - Другой вариант - получить (за соответствующую плату) сертификат от центра сертификации, отправив ему на обработку **csr**-файл.   - Другой вариант - получить (за соответствующую плату) сертификат от центра сертификации, отправив ему на обработку **csr**-файл.
   - Необходимо скопировать сертификаты в каталог, где их ожидает увидеть Apache, настроить SSL сайта, перезапустить Apahce.   - Необходимо скопировать сертификаты в каталог, где их ожидает увидеть Apache, настроить SSL сайта, перезапустить Apahce.
 +
 +Также инструкция от DigitalOcean [[ https://www.digitalocean.com/community/tutorials/how-to-create-a-self-signed-ssl-certificate-for-apache-in-ubuntu-16-04 | ссылка ]].
 ===== VNC ===== ===== VNC =====
 ==== Запуск при старте ситемы ==== ==== Запуск при старте ситемы ====
Строка 91: Строка 111:
 </code> </code>
   * Отправка скрытой копии на адрес отправителя позволяет сохранять отправленные сообщения на удалённом почтовом сервере.   * Отправка скрытой копии на адрес отправителя позволяет сохранять отправленные сообщения на удалённом почтовом сервере.
 +
 +===== Отправка online сообщения через Телеграм =====
 +  - Создание собственного бота:
 +    * добавить в список пользователей @BotFather'а;
 +    * начать с ним разговор и выполнить команду /newbot;
 +    * установить человеко читаемое имя бота (name);
 +    * установить уникальное имя бота (username) вида @super_messages_bot;
 +    * сохранить в надёжном месте полученный TokenID созданного бота.
 +  - Создание группы и добавление в неё бота
 +    * Рекомендация. В диалоге с @BotFather'ом в разделе "Bot Settings" запретить добавление приватного бота в сторонние группы настройкой "/setjoingroups"
 +  - Активирование  созданной группы, путём написания "/bla-bla-bla for @super_messages_bot";
 +  - Определение ID группы или "chat id";
 +    * В браузере необходимо перейти по ссылке вида https://api.telegram.org/botTokenID/getUpdates. Внимание на "bot" перед TokenID.
 +    * В полученном сообщении находим раздел "chat" и в нём запись "id:" < -1234...>. Отрицательное число и есть искомый "chat id"
 +  - Отправка сообщения с помощью curl:<code bash>curl -X POST "https://api.telegram.org/botXXX:YYYY/sendMessage" -d "chat_id=-zzzzzzzzzz&disable_notification=false&text=My sample text"</code>
 +
 +Сообщение с компьютера пришло на телефон в "телегу".
 ===== SSH ===== ===== SSH =====
 ==== Запрет логина от root'а ==== ==== Запрет логина от root'а ====
-В файле /etc/ssh/sshd_config установить<code>PermitRootLogin no</code> или <code>PermitRootLogin without-password</code>+В файле /etc/ssh/sshd_config установить<code>PermitRootLogin no</code> или оставить возможность логина через публичные ключи, запретив логин через пароль<code>PermitRootLogin prohibit-password</code>
 ==== Копирование файлов ==== ==== Копирование файлов ====
 На удалённую машину: <code bash>  На удалённую машину: <code bash> 
Строка 123: Строка 160:
    * Запрет логина по паролю:<code>PasswordAuthentication no</code>    * Запрет логина по паролю:<code>PasswordAuthentication no</code>
  
-==== Эмуляция Socks proxy через SSH ====+==== Socks5 proxy через SSH ====
  
 <code>ssh -D 127.0.0.1:8080 -f -N user.name@remote.domain.name</code> <code>ssh -D 127.0.0.1:8080 -f -N user.name@remote.domain.name</code>
  
 +=== Постоянный туннель через autossh  ===
  
 +  * Установка autossh: <code bash># apt install autossh</code>
 +
 +  * Настройка доступа по ключу к <host> для пользователя <user><code bash>ssh-copy-id -i ~/.ssh/id_rsa.pub <user>@<host></code>
 +
 +  * systemd unit<code>/etc/systemd/system/autossh-socks5-proxy-<host>-<port>.service</code><code bash>[Unit]
 +Description=Auto up socks5 proxy
 +After=network.target
 +
 +[Service]
 +Environment=REMOTE_USER=<remote_user>
 +Environment=REMOTE_HOST=<host>
 +User=<local_user>
 +Restart=on-failure
 +RestartSec=15
 +ExecStart=/usr/bin/autossh -M 0 -N -o "ExitOnForwardFailure=yes" \
 +                                   -o "ServerAliveInterval=30" \
 +                                   -o "ServerAliveCountMax=3" \
 +                                   -D 127.0.0.1:8080 \
 +                                   ${REMOTE_USER}@${REMOTE_HOST}
 +[Install]
 +WantedBy=multi-user.target
 +
 +</code>
 +  * включение systemd unit'a<code bash>systemctl enable autossh-socks5-proxy-<host>-<port>.service</code>
 ==== Ошибки подключения ==== ==== Ошибки подключения ====
 ===  Connection closed by === ===  Connection closed by ===
Строка 140: Строка 202:
 <code>ssh [user]@[server] '[command]'</code> <code>ssh [user]@[server] '[command]'</code>
  
 +==== Отвал SSH при простое ====
 +
 +На некоторых каналах связи при отсутствии активности ssh соединение зависает. [[https://www.digitalocean.com/community/questions/ssh-connection-freezes|Решение]] заключается в посылке внутри ssh канала пустых пакетов между клиентом и сервером.
 +
 +  * SSH-server: ''/etc/ssh/sshd_config''<code>TCPKeepAlive yes
 +ClientAliveInterval 30
 +ClientAliveCountMax 99999999</code>
 +  * SSH-client: ''/etc/ssh/ssh_config'' или ''.ssh/config''<code>Host *
 +   ServerAliveInterval 10
 +</code>
 +
 +
 +===== Shellinabox =====
 +Shellinabox - это программа, реализующая шелл доступ к linux-серверу через браузер
 +==== Установка ====
 +<code bash>apt install shellinabox</code>
 +
 +Проверка <code bash>https://192.168.XX.XX:4200</code>
 +
 +==== Запрет root логина через shellinabox ====
 +
 +1. Использовать ssh для логина **/etc/default/shellinabox**
 +<code bash> SHELLINABOX_ARGS="--no-beep --service=/:SSH"</code>
 +2. Запрет root логина в ssh **/etc/ssh/sshd_config**
 +<code bash>PermitRootLogin prohibit-password</code>
 +3. Появившиеся [[ https://github.com/shellinabox/shellinabox/issues/458 | предупреждения ]] не критичны, но при желании можно [[ https://www.ducea.com/2008/03/06/howto-recompile-debian-packages/ | пересобрать ]] пакет с небольшими правками кода [[ https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=873019 | ссылка ]].
 +
 +
 +=== WebSSH ===
 +
 +Shellinabox всем хорош, но ломает отображение Midnight Commander'а. Выход использовать альтернативу [[https://www.digitalocean.com/community/tutorials/how-to-connect-to-a-terminal-from-your-browser-using-python-webssh|WebSSH]] написанную на Python'е. Есть определённые различия в философии двух подходов, последний по умолчанию предполагает возможность подключения к любому серверу с поднятого инстанса, это надо иметь в виду, чтобы не сделать общедоступного ssh-proxy от вашего имени.
 +==== Применение сертификата Let's Encrypt ====
 +Для //shellinabox// требуется специальный комбинированный сертификат с определённым названием
 +<code bash>cat /etc/letsencrypt/live/*domain.name*/fullchain.pem /etc/letsencrypt/live/*domain.name*/privkey.pem > /var/lib/shellinabox/certificate-*domain.name*.pem</code>
 +
 +Проверка работоспособности <code bash>systemctl stop shellinabox.serivce 
 +shellinaboxd -v</code>
 +
 +**Особенность.** Для работы shellinabox необходимо существование сертификата с названием файла //certificate.pem//, на который можно делать символические ссылки вида certificate-//domain.name//.pem.
 ===== DNSCrypt ===== ===== DNSCrypt =====
 Работу DNSCrypt можно оценить через один из сервисов проверки DNS:  Работу DNSCrypt можно оценить через один из сервисов проверки DNS: 
Строка 154: Строка 255:
  
 **Реализация Net.Storage ** [[itechnology:linux:net.hdd_over_ya.disk|в статье]].\\ **Реализация Net.Storage ** [[itechnology:linux:net.hdd_over_ya.disk|в статье]].\\
 +===== Nextcloud =====
 +
 +Ошибка удаления/переименования файлов из-за блокировки файлов, [[ https://help.nextcloud.com/t/webdav-locked-files/45653 | тыц ]] 
 +
 +Решение.
 +<code> 'filelocking.enabled' => false </code>
 +Отключить <del>кривую</del> блокировку файлов в файле config.php, [[ https://help.nextcloud.com/t/disable-file-locking/22572/5 | ссылка ]]
 +
 +
 ===== Облако Mail.ru ===== ===== Облако Mail.ru =====
 ==== UPDATE: WEBDAV отключён ==== ==== UPDATE: WEBDAV отключён ====
Строка 222: Строка 332:
 Предлагаемое решение состоит в том, чтобы cделать виртуальные sink'и "speakers" и "headphones" не 2-х канальными, а 4-х канальными, с дублированием выходов звуковой карты, но различающимися входами.  Предлагаемое решение состоит в том, чтобы cделать виртуальные sink'и "speakers" и "headphones" не 2-х канальными, а 4-х канальными, с дублированием выходов звуковой карты, но различающимися входами. 
  
-Первоначальный вариант при котором монофонические файлы не звучат выглядит так <code>load-module module-remap-sink sink_name=speakers   master=alsa_output.pci-0000_08_05.0.analog-surround-40 channels=2 master_channel_map=front-left,front-right channel_map=front-left,front-right remix=no  +Первоначальный вариант при котором монофонические файлы не звучат выглядит так <code>load-module module-remap-sink sink_name=speakers_stereo   master=alsa_output.pci-0000_0a_05.0.analog-surround-40 channels=2 master_channel_map=front-left,front-right channel_map=front-left,front-right remix=no  
-load-module module-remap-sink sink_name=headphones master=alsa_output.pci-0000_08_05.0.analog-surround-40 channels=2 master_channel_map=rear-left,rear-right   channel_map=front-left,front-right remix=no</code>+load-module module-remap-sink sink_name=headphones_stereo master=alsa_output.pci-0000_0a_05.0.analog-surround-40 channels=2 master_channel_map=rear-left,rear-right   channel_map=front-left,front-right remix=no</code>
  
-Изменённый вариант выглядит так: <code>load-module module-remap-sink sink_name=speakers   master=alsa_output.pci-0000_08_05.0.analog-surround-40 channels=master_channel_map=front-left,front-right,front-left,front-right channel_map=front-left,front-right,mono,mono remix=no +Задать человеческие названия каналам можно следующим образом:<code>update-sink-proplist speakers_stereo   device.description="Speakers [Stereo]" 
-load-module module-remap-sink sink_name=headphones master=alsa_output.pci-0000_08_05.0.analog-surround-40 channels=master_channel_map=rear-left,rear-right,rear-left,rear-right channel_map=front-left,front-right,mono,mono remix=no</code>+update-sink-proplist headphones_stereo device.description="Headphones [Stereo]" 
 +</code> 
 + 
 +Изменённый вариант (моно звук) выглядит так: <code>150 load-module module-remap-sink sink_name=speakers_mono    master=alsa_output.pci-0000_0a_05.0.analog-surround-40 channels=master_channel_map=front-left,front-right channel_map=front-left,front-left remix=no 
 +151 load-module module-remap-sink sink_name=headphones_mono  master=alsa_output.pci-0000_0a_05.0.analog-surround-40 channels=master_channel_map=rear-left,rear-right   channel_map=front-left,front-left remix=no</code>
  
 Замечание первое. sound_card_name для //master=<sound_card_name>// определяется из вывода команды <code>pacmd list-sinks | grep name</code> Замечание первое. sound_card_name для //master=<sound_card_name>// определяется из вывода команды <code>pacmd list-sinks | grep name</code>
Строка 304: Строка 418:
 Минусы. При логине второго пользователя до первого, звука у второго пользователя не будет вовсе т.к, при запуске pulseaudio выдаст ошибку: <code>pulseaudio --start Минусы. При логине второго пользователя до первого, звука у второго пользователя не будет вовсе т.к, при запуске pulseaudio выдаст ошибку: <code>pulseaudio --start
 N: [pulseaudio] main.c: Обнаружен настроенный вручную сервер на %s, отказ от запуска.</code> N: [pulseaudio] main.c: Обнаружен настроенный вручную сервер на %s, отказ от запуска.</code>
 +
 +==== Pulseaudio не видит USB устройство в списке карт ====
 +В файл /etc/pulse/default.pa добавить
 +<code>load-module module-alsa-sink device=hw:X</code>Здесь "X" - индекс звуковой карты, согласно выводу команды 
 +<code>aplay -l | grep card</code>
 +[[https://askubuntu.com/a/689456 | Источник ]]
 +==== Остановка pulseaudio ====
 +<code>systemctl --user stop pulseaudio.socket; systemctl --user stop pulseaudio.service</code>
 +
 ===== Kernel ===== ===== Kernel =====
 ==== Добавить модуль в initrd ==== ==== Добавить модуль в initrd ====
Строка 341: Строка 464:
  
 https://help.ubuntu.com/community/DuplicityBackupHowto https://help.ubuntu.com/community/DuplicityBackupHowto
 +
 +==== Образ диска и сжатие ====
 +Пример использования: системыне sd-карты на Raspberry Pi.
 +<code>#dd if=/dev/sdX status=progress bs=1M | bzip2 --best > ./$(date +%Y%m%d_%H%M%S)_sdX-backup.bz2</code>
 +
  
 ===== Xfce ===== ===== Xfce =====
Строка 435: Строка 563:
 Предотвращение отключения usb и переход в настоящий suspend. Мануал [[http://www.sevenforums.com/tutorials/147369-usb-selective-suspend-turn-off.html|тут]]. Предотвращение отключения usb и переход в настоящий suspend. Мануал [[http://www.sevenforums.com/tutorials/147369-usb-selective-suspend-turn-off.html|тут]].
  
-===== OpenVPN =====+===== Частная сеть предприятия =====
  
 ==== Cоздание удостоверяющего центра ==== ==== Cоздание удостоверяющего центра ====
Строка 444: Строка 572:
   * Корневой закрытый ключ [ca.key] используется для подписи сертификата сервера и всех клиентских сертификатов.    * Корневой закрытый ключ [ca.key] используется для подписи сертификата сервера и всех клиентских сертификатов. 
  
-Для создания корневого сертификата и закрытого используется утилита easy-rsa из состава OpenVPN [/usr/share/doc/openvpn/examples/easy-rsa]Начиная с версии 2.3 данную утилиту из пакета удалили, поэтому после установки отдельного пакета примеры лежат в /usr/share/easy-rsa. Путь к каталогу с PKI не должен содержать пробелов.<code bash>source ./vars+Для создания корневого сертификата и закрытого используется утилита easy-rsa. После установки данного пакета примеры лежат в /usr/share/easy-rsa. Путь к каталогу с PKI не должен содержать пробелов.<code bash>source ./vars
 ./clean-all ./clean-all
 ./build-ca </code> ./build-ca </code>
Строка 451: Строка 579:
 Дополнение. Для избежания ошибки вида: //The <someName> field needed to be the same in the CA certificate and the request// необходимо отредактировать поле <someName>, изменив его с "match" на "optional" в файле openssl.cnf. [[https://forum.ivorde.com/openssl-signing-error-the-countryname-field-needed-to-be-the-same-in-the-ca-certificate-and-the-req-t19401.html|Подробнее]]. Дополнение. Для избежания ошибки вида: //The <someName> field needed to be the same in the CA certificate and the request// необходимо отредактировать поле <someName>, изменив его с "match" на "optional" в файле openssl.cnf. [[https://forum.ivorde.com/openssl-signing-error-the-countryname-field-needed-to-be-the-same-in-the-ca-certificate-and-the-req-t19401.html|Подробнее]].
  
-==== Генерация сертификата и приватного ключа OpenVPN сервера ====+Из соображений безопасности и работоспособности коннекта сертификаты должны быть на алгоритме sha256. Проверка сертификата удостоверяющего цента<code bash>openssl x509 -in ca.crt -noout -text | grep Signature</code> 
 +==== Генерация сертификата и приватного ключа сервера ====
 Аналогично, с помощью утилиты easy-rsa генерируются сертификат сервера [server.crt] и закрытый ключ сервера [server.key]:<code bash> ./build-key-server server </code> Аналогично, с помощью утилиты easy-rsa генерируются сертификат сервера [server.crt] и закрытый ключ сервера [server.key]:<code bash> ./build-key-server server </code>
  
 Большинство параметров могут быть оставлены в значениях по умолчанию, явного ввода требует параметр Common name, можно ввести "server". Два других запроса требуют положительных ответов, «Sign the certificate? (Подписать сертификат?) [y/n]" и "1 out of 1 certificate requests certified, commit? (заверен 1 из 1 запросов на сертификацию, фиксировать?) [y/n]". Большинство параметров могут быть оставлены в значениях по умолчанию, явного ввода требует параметр Common name, можно ввести "server". Два других запроса требуют положительных ответов, «Sign the certificate? (Подписать сертификат?) [y/n]" и "1 out of 1 certificate requests certified, commit? (заверен 1 из 1 запросов на сертификацию, фиксировать?) [y/n]".
 +
 +Исправление ошибки 
 +  * ''Error checking x509 extension''<code bash>./build-key-server server
 +Ignoring -days without -x509; not generating a certificate
 +Error checking x509 extension section server</code>
 +  * В раздел ''X509 Subject Field'' файла "vars" добавить <code bash>export KEY_ALTNAMES="altServerName"</code>
 +  * В разделе ''[server]'' файла openssl.cnf параметр subjectAltName привести к виду<code bash>subjectAltName="DNS:$ENV::KEY_ALTNAMES"</code>
  
 ==== Генерация параметров Diffie Hellman'а ==== ==== Генерация параметров Diffie Hellman'а ====
-Для сервера OpenVPN необходимо создать параметры Diffie Hellman'а: <code bash>./build-dh</code>+На стороне сервера необходимо создать параметры Diffie Hellman'а: <code bash>./build-dh</code>
  
 +==== Дополнительная проверка пакетов "рукопожатия" TLS (v1) ====
 +<code>openvpn --genkey secret keys/ta.key</code>
 +Файл ta.key должен быть доступен как на сервере, так и на клиент. При этом в конфигурации необходимо добавить
 +<code>tls-auth ta.key N</code>, где параметр N должен принимать значение "0" на одной стороне и "1" на другой. Например, если на сервере N = "0", то на клиенте N должен быть установлен в "1"
  
 ==== Создание ключей для клиентов ==== ==== Создание ключей для клиентов ====
Строка 610: Строка 750:
 fi fi
 </code> </code>
 +==== Смена шифра на AES-256-CBC ====
 +https://openvpn.net/vpn-server-resources/change-encryption-cipher-in-access-server/
 +==== Обрыв соединения на VPS ====
 +  * (Возможно) Снижение MTU на внешнем интерфейсе VPS до 1200
 +  * (Возможно) Шейпинг трафика<code bash>tc qdisc add/change/ dev ens3 root tbf rate 15mbit burst 1214 latency 50ms</code>
 +  * Корректировка максимального размера ТСP сегмента ([[https://www.linux.org.ru/forum/admin/16336634?cid=16336803|источник]]):<code bash>iptables -t mangle -I POSTROUTING -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu</code>ChatGPT объясняет: 
 +  * **-t mangle:** параметр указывает таблицу iptables, с которой мы работаем. В данном случае используется таблица mangle. Таблица mangle используется для изменения пакетов на уровне маршрутизации.
 +  * **-I POSTROUTING:** параметр указывает на цепочку iptables в таблице mangle, в которую будет вставлено правило. В данном случае, правило будет вставлено в цепочку POSTROUTING, которая применяется к пакетам, когда они покидают сетевой интерфейс после прохождения таблицы NAT.
 +  * **-p tcp:** параметр указывает на протокол, которому принадлежат пакеты, к которым применяется правило. В данном случае, это TCP.
 +  * **--tcp-flags SYN,RST SYN:** параметр определяет условие, которое должны соответствовать TCP-пакеты, чтобы быть совпадающими с правилом. Здесь мы говорим, что пакеты должны иметь только установленные флаги SYN и RST.
 +  * **-j TCPMSS --clamp-mss-to-pmtu:** параметр указывает действие, которое необходимо выполнить, если пакеты соответствуют условию. Здесь мы говорим, что пакеты должны пройти обработку модулем TCPMSS с параметром --clamp-mss-to-pmtu. Это позволяет автоматически настроить максимальный размер TCP сегмента (MSS) таким образом, чтобы он не превышал максимальный размер передаваемого блока данных (PMTU) на маршруте. Это полезно для предотвращения фрагментации пакетов при прохождении через маршрутизаторы с разными MTU.
 +
 +==== Получение внешнего IP без DNS запроса ====
 +<code bash>curl -s --resolve icanhazip.com:443:104.16.184.241 --max-time 3 https://icanhazip.com</code>
 +
 +===== Маршрутизация =====
 +**Дано.** На роутере работает vpn-клиент с ip-адресом шлюза 10.73.73.1; доступ в интернет получен через usb-модем со шлюзом 192.168.0.1; локальная сеть роутера представлена подсетью вида 192.168.6.0/24. При установлении vpn-соединения трафик всех клиентов из локальной сети 192.168.6.0/24 по умолчанию заворачивается в vpn.
 +
 +**Задача.** Клиенту с ip-адресом 192.168.6.49 предоставлять интернет без использования vpn-соединения.
 +
 +**Решение.**
 +<code bash># Добавление правила для обработки трафика от 192.168.6.49 таблицей маршрутизации "100"
 +ip rule add from 192.168.6.49 table 100
 +
 +# Добавление маршрута по умолчанию через usb-модем (usb0) в таблице 100
 +ip route add default via 192.168.0.1 dev usb0 table 100</code>
 +
 +**Полезные команды**
 +<code bash>
 +# Просмотр основной таблицы маршрутизации
 +ip route show</code>
 +
 +<code bash>
 +# Просмотр таблицы маршрутизации 100
 +ip route show table 100</code>
 +
 +<code bash>
 +# Просмотр активных правил маршрутизации
 +ip rule show</code>
  
 ===== Steam ===== ===== Steam =====
Строка 626: Строка 805:
 Руководство администратора по [[https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7/html/System_Administrators_Guide/chap-Managing_Services_with_systemd.html|SystemD]] от RH. Рассуждения справедливы для Debian 8 "Jessie". Руководство администратора по [[https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7/html/System_Administrators_Guide/chap-Managing_Services_with_systemd.html|SystemD]] от RH. Рассуждения справедливы для Debian 8 "Jessie".
  
-Также хороший обзорный материал, [[http://tlhp.ml/sia1/|SystemD in Action]].+Также хороший обзорный материал, [[https://www.youtube.com/watch?v=pSTo-VY6kno|SystemD in Action]].
 ==== OpenVPN and NetworkManager ==== ==== OpenVPN and NetworkManager ====
  
Строка 643: Строка 822:
 http://forum.russianfedora.pro/viewtopic.php?f=15&t=6686 http://forum.russianfedora.pro/viewtopic.php?f=15&t=6686
 ==== Монтирование NFS при старте системы ==== ==== Монтирование NFS при старте системы ====
 +=== Случай управления сетью через systemd-networkd ===
 +  - Проверка статуса сервиса контроля доступности сети:<code>systemctl is-enabled systemd-networkd-wait-online.service</code>
 +  - Включение сервиса в случае его неактивности:<code>systemctl enable systemd-networkd-wait-online.service</code>
 +
 +=== Случай доступа к файловому серверу через OpenVPN ===
   - Создание mount-юнита. Имя юнита соответсвует пути к точке монтирования, например, /mnt/openvpn/public соответствует:<code>/etc/systemd/system/mnt-openvpn-public.mount</code>   - Создание mount-юнита. Имя юнита соответсвует пути к точке монтирования, например, /mnt/openvpn/public соответствует:<code>/etc/systemd/system/mnt-openvpn-public.mount</code>
   - Содержание mount-юнита<code>[Unit]   - Содержание mount-юнита<code>[Unit]
Строка 695: Строка 879:
  
 ===== Основы mdadm ===== ===== Основы mdadm =====
 +
 +==== Создание RAID-1 + LVM ====
 +
 +=== Основная терминология LVM ===
 +  * **PV** (Physical Volume/Физический том) для системы LVM - это реальный физический диск или раздел диска, который инициализирован командой **pvcreate**. Основа для VG - Volume Group.
 +  * **VG** (Volume Group/Группа томов) - это логическая единица которая образуется в результате объединения PV. Можно понимать, как аналог неразмеченного жесткого диска в не-LVM системе.
 +  * **LV** (Logical Volume/Логический том) - раздел на VG, представляющий собой блочное устройство, может содержать файловую систему.
 +{{ :itechnology:lvm.jpg?nolink  |}}
 +  * **PE** (Physical extent) - блок данных в пространстве PV фиксированного размера, по умолчанию PE равен 4 Мб.
 +  * **LE** (Logical extent) - блоки данных, из которых состоит логический том. Размер логических экстентов не меняется в пределах VG и совпадает с размером физических экстентов. Существует возможность указать тип соответствия PE и LE (линейное или чередующееся)
 +{{ :itechnology:pe-le-lvm.jpg?nolink |}}
 +Источники: [[http://igorka.com.ua/2010-09-16/osnovy-lvm-chto-takoe-pv-vg-lv/|раз]], [[https://interface31.ru/tech_it/2020/07/lvm-dlya-nachinayushhih-chast-1-obshhie-voprosy.html|два]], [[https://www.opennet.ru/docs/RUS/linux_lvm/|три]]
 +
 +=== Создание RAID-1 ===
 +
 +Рекомендуется создавать массив на разделах с типом FD (Linux RAID), что позволит ядру автоматически собирать разделы при загрузке системы (см. [[ https://www.linux.org.ru/forum/admin/4187548 | раз]], [[ http://xgu.ru/wiki/mdadm#.D0.98.D0.B7.D0.BC.D0.B5.D0.BD.D0.B5.D0.BD.D0.B8.D0.B5_.D1.82.D0.B8.D0.BF.D0.B0_.D1.80.D0.B0.D0.B7.D0.B4.D0.B5.D0.BB.D0.BE.D0.B2 | два]], [[https://qna.habr.com/q/309441|три]]).
 +
 +Для этого, например, для диска sda в fdisk'е (fdisk /dev/sda) необходимо:
 +  * **g**   создать новую таблицу разделов GPT;
 +  * **n**   добавить новый раздел;
 +  * **t**   изменить тип раздела на "Linux RAID";
 +  * **w**   записать изменения на диск.
 +
 +Можно создавать raid-массив: <code bash>mdadm --create /dev/md<N> --level=1 --raid-device=2 /dev/sd<A><K> /dev/sd<B><K></code>
 +
 +После создания стартует процесс начальной синхронизации (initial resync), который работает в фоне и не препятствует нормальному использованию raid-массива, но лучше дождаться завершения синхронизации перед активным использованием созданного raid-массива.
 +
 +**Сохранение информации о созданном массиве**<code bash>mdadm --examine --scan
 +...
 +ARRAY /dev/md/<N>  metadata=1.2 UUID=071e1eec:c0224deb:edbe49f1:e7620e05 name=maxwell:2</code>
 +Отсутствующую строку с /dev/md/<N> необходимо добавить в /etc/mdadm/mdadm.conf и выполнить обновление initramfs<code bash>update-initramfs -u</code>
 +
 +**Инициализация физических разделов под LVM**. В данном случае - это созданный ранее raid-1. <code bash>pvcreate /dev/md<N>
 +# Просмотреть результат
 +pvscan</code>
 +
 +**Создание группы разделов (VG) LVM.**<code bash>vgcreate -v storage /dev/md<N>
 +# Просмотреть результат
 +vgdisplay</code>
 +Создана группа томов с именем "storage"
 +
 +**Создание логического тома под файловую систему.** При этом, если планируется использование LVM снапшотов, размер логического тома (LV) необходимо выбирать исходя из необходимости наличия свободного места в группе томов (VG) для функционирования снапшотов.<code bash>lvcreate --size <XXX>G --name vol1 storage
 +# Просмотреть результат
 +lvdisplay
 +vgdisplay</code>
 +
 +Источник: [[http://xgu.ru/wiki/LVM | раз]].
 +
 +**Создание файловой системы на логическом томе.** Если файловая система не будет использоваться под системные нужды, то резервирование места для файлов пользователя "root" можно отключить, также при дальнейшем использовании снапшотов рекомендуется монтировать файловую систему с параметром **noatime** для избежания избыточных изменений основной фс и их записи в снимок.<code bash>mkfs.ext4 -m 0 -L storage /dev/storage/vol1</code>
 +
 +**Изменение размера LV**. Ниже производится увеличение (+) размера логического тома на 5ГБ <code bash>lvresize --resizefs --size +5G /dev/storage/vol1</code>
 +
 +=== Создание снимка логического тома (LV) ===
 +
 +Как работают снапшоты LVM и какие данные записываютcя на диск при работе со снапшотами можно прочитать по [[ https://dustymabe.com/2012/03/04/automatically-extend-lvm-snapshots/ | ссылке]]. Кратко, новые блоки пишутся в оригинальный раздел, а те данные, что должны остаться неизменными, но изменились, копируются в изначальном виде в снапшот, поэтому в группе логических томов (VG) должно быть свободное место под созданный снапшот.
 +
 +Создание снапшота с выделением под него всего свободного места на VG
 +<code bash>lvcreate -l 100%FREE --snapshot --name vol1.snap /dev/storage/vol1
 +# Просмотреть результат
 +lvs
 +lvdisplay</code>
 +
 +Полученный снимок может быть примонтирован, как обычное блочное устройство<code bash>mount -o noatime /dev/storage/vol1.snap /mnt/storage.snap/</code>
 +
 +**Удаление снимка**. После резервного копирования или иных процедур, снапшот должен быть удалён т.к., его наличие отрицательно сказывается на скорости основной файловой системы.<code bash>lvremove -y /dev/storage/vol1.snap</code>
 +
  
 ==== Установка ОС на LVM поверх Raid-1  ==== ==== Установка ОС на LVM поверх Raid-1  ====
Строка 758: Строка 1008:
 Подробности в статье по ссылке https://anikin.pw/all/zamena-dika-v-programnom-raid1-v-linux/ Подробности в статье по ссылке https://anikin.pw/all/zamena-dika-v-programnom-raid1-v-linux/
  
-===== Bash перенаправление потоков  =====+==== /dev/mdX -> /dev/mdY ==== 
 + 
 +Переименовать raid-массив 
 +https://delightlylinux.wordpress.com/2019/07/27/md127-how-to-rename-a-raid-array-with-mdadm/ 
 + 
 +===== Проверка диска на плохие сектора ===== 
 + 
 +При размере диска более 2ТB можно столкнуться с ошибкой 
 +"Value too large for defined data type invalid end block" 
 + 
 +<code bash>badblocks -svw /dev/sda 
 +badblocks: Значение слишком велико для такого типа данных invalid end block (13672382464): must be 32-bit value </code> 
 + 
 +Быстрое решение - использовать иной размер блока, например, "badblock -b 4096" вместо значения по умолчанию "1024", где значение 4096 можно получить из вывода команды "blockdev --getbsz /dev/sda", [[ https://bugs.launchpad.net/maas/+bug/1695229/comments/2 | ссылка ]]. 
 +<code bash>badblocks -svw -b 4096 /dev/sda</code> 
 + 
 + 
 +===== Bash ===== 
 +==== Перенаправление потоков ==== 
 0 - stdin  \\ 0 - stdin  \\
 1 - stdout \\ 1 - stdout \\
Строка 767: Строка 1036:
 2>&1</code> 2>&1</code>
  
 +==== Алиасы ====
 +
 +С точки зрения администрирования удобно все используемые алиасы располагать в отдельном файле, обычно это файл ~/.bash_aliases 
 +
 +Необходимо помнить, что данный файл должен быть загружен через ~/.bashrc
 +<code bash>if [ -f ~/.bash_aliases ]; then
 +    . ~/.bash_aliases
 +fi</code>
 +
 +Для ручной загрузки алиасов можно использовать команду source ~/.bash_aliases
 ===== Дисковые квоты ===== ===== Дисковые квоты =====
 https://www.ibm.com/developerworks/ru/library/l-lpic1-v3-104-4/ https://www.ibm.com/developerworks/ru/library/l-lpic1-v3-104-4/
Строка 803: Строка 1082:
 </code>  </code> 
 Основой приведённого описания файлов FictionBook является описание zip архива. Основой приведённого описания файлов FictionBook является описание zip архива.
 +
 +==== Benchmark ====
 +=== Память ===
 +Скорость записи
 +<code>sysbench memory --memory-block-size=1G --memory-total-size=50G --memory-oper=write --threads=1 run | grep transferred</code>
 +Скорость чтения
 +<code>sysbench memory --memory-block-size=1G --memory-total-size=50G --memory-oper=read --threads=1 run | grep transferred</code>
 +
itechnology/linux.1573122745.txt.gz · Последнее изменение: jurik_phys