Jurik-Phys.Net

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

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

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


itechnology:linux

Различия

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

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

Предыдущая версия справа и слеваПредыдущая версия
Следующая версия
Предыдущая версия
itechnology:linux [2019/11/07 13:32] – [Уменьшение размера Raid-1] jurik_physitechnology:linux [2024/03/04 12:00] (текущий) – [Дополнительная проверка пакетов "рукопожатия" SSL/TLS] 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]
 +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>@<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: Строка 200:
 <code>ssh [user]@[server] '[command]'</code> <code>ssh [user]@[server] '[command]'</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: Строка 241:
  
 **Реализация 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: Строка 318:
 Предлагаемое решение состоит в том, чтобы 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: Строка 404:
 Минусы. При логине второго пользователя до первого, звука у второго пользователя не будет вовсе т.к, при запуске 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: Строка 450:
  
 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: Строка 549:
 Предотвращение отключения 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: Строка 558:
   * Корневой закрытый ключ [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: Строка 565:
 Дополнение. Для избежания ошибки вида: //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: Строка 736:
 fi fi
 </code> </code>
 +==== Смена шифра на AES-256-CBC ====
 +https://openvpn.net/vpn-server-resources/change-encryption-cipher-in-access-server/
  
 ===== Steam ===== ===== Steam =====
Строка 626: Строка 754:
 Руководство администратора по [[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: Строка 771:
 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: Строка 828:
  
 ===== Основы 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: Строка 957:
 Подробности в статье по ссылке 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: Строка 985:
 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: Строка 1031:
 </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 · Последнее изменение: 2019/11/07 13:32 — jurik_phys