««Прозрачный» Squid с фильтрацией HTTPS ресурсов без подмены сертификатов» и «Как работать с LVM»: разница между страницами

Материал из support.qbpro.ru
(Различия между страницами)
imported>Vix
Нет описания правки
 
imported>Vix
 
Строка 1: Строка 1:
Данная инструкция позволяет скомпилировать как х86, так и х64 версии Squid'a и создать соответствующие пакеты. Инструкция будет разбита на несколько пунктов и подпунктов. Если интересно, идем под кат:<br>
==LVM==
'''1.''' Подготовка.<br>
В статье описаны основные моменты использования LVM для организации дисковой системы в Linux. <br>
'''1.1''' Для начала, подготовимся к сборке пакетов:
Она поможет как чайникам разобраться с принципами ее работы, так и уже знающим LVM в качестве шпаргалки.
apt-get install git fakeroot checkinstall build-essential devscripts patch
apt-cache policy squid3
apt-get build-dep squid3
apt-get build-dep libecap2
apt-get install libssl-dev libgnutls28-dev


Не забудьте перейти в ту папку, где вы будете собирать исходники, чтобы не загадить себе Хоум.
Используемые команды одинаково подойдут как для систем Red Hat / CentOS, так и Debian / Ubuntu.


'''1.2''' Далее скачаем Libressl:
Уровни абстракции
wget http://ftp.openbsd.org/pub/OpenBSD/LibreSSL/libressl-2.1.6.tar.gz
Установка LVM
tar -xzvf libressl-2.1.6.tar.gz
Создание разделов
cd libressl-2.1.6
    Инициализация (pvcreate)
    Создание групп (vgcreate)
    Создание логического тома (lvcreate)
Файловая система и монтирование
    Создание файловой системы
    Монтирование тома
Просмотр информации об LVM
Увеличение томов
    Добавление диска к группе
    Увеличение логического тома
    Изменение размера файловой системы
Уменьшение томов
Удаление томов
Зеркалирование
Снапшоты
Работа с LVM в Windows
Уровни абстракции


'''1.3''' А теперь собираем:
Работа с томами с помощью LVM происходит на 3-х уровнях абстракции:
./configure
make
checkinstall --pkgname libressl --pkgversion 2.1.6


'''2.''' Теперь можно установить Libressl:
    Физический уровень (PV). Сначала диск инициализируется командой pvcreate — в начале диска создается дескриптор группы томов. При этом важно заметить, что диск не обязательно должен быть физическим — мы можно отметить на использование обычный раздел диска.
dpkg -i libressl_2.1.6-1_amd64.deb
    Группа томов (VG). С помощью команды vgcreate создается группа томов из инициализированных на предыдущем этапе дисков.
ldconfig
    Логический том (LV). Группы томов нарезаются на логические тома командой lvcreate.


Схематично, уровни можно представить так:


'''2.1''' После установки необходимо настроить использование LibreSSL по-умолчанию:
Схематичное представление уровней абстракции LVM
mv /usr/bin/openssl /usr/bin/openssl-1
Установка
update-alternatives --install /usr/bin/openssl openssl /usr/bin/openssl-1 10
update-alternatives --install /usr/bin/openssl openssl /usr/local/bin/openssl 50
update-alternatives --config openssl


'''*''' Проверим, получилось ли поставить Libressl:
Для работы с LVM необходима установка одноименной утилиты. В системе Linux она может быть установлена по умолчанию. Но если ее нет, выполняем инструкцию ниже.
  openssl version
    LibreSSL 2.1.6


Если выхлоп консоли похожий, то все получилось. Идем дальше.
Если используем системы на безе deb (Ubuntu, Debian, Mint):


'''3.''' На очереди Libecap.<br>
apt-get install lvm2
'''3.1''' Необходимо отредактировать sources.list, включив туда исходники из ветки testing (это необходимо, так как нам нужно компилировать новый libecap, который в свою очередь необходим для сборки Squid):
deb-src http://ftp.de.debian.org/debian/ testing main contrib non-free


'''3.2''' Обновим кеш пакетов:
Если используем системы на безе RPM (Red Hat, CentOS, Fedora):
apt-get update


'''3.3''' А теперь скачаем из Testing нужные исходники:
yum install lvm2
apt-get source libecap3/testing
Создание разделов


'''3.4''' Далее соберем libecap:
Рассмотрим пример создания томов из дисков sdb и sdc с помощью LVM.
cd libecap-1.0.1/
1. Инициализация
dpkg-buildpackage -us -uc -nc -d


'''3.5'''  Удалим старье, и установим новье:
Помечаем диски, что они будут использоваться для LVM:
apt-get purge libecap2
libecap3_1.0.1-2_amd64.deb
libecap3-dev_1.0.1-2_amd64.deb


'''4.''' Подобрались к компиляции самого Squid'a.<br>
pvcreate /dev/sdb /dev/sdc
'''4.1''' Качаем последний самый работающий снэпшот Squid'a:
wget http://www.squid-cache.org/Versions/v3/3.5/squid-3.5.8.tar.gz


'''4.2''' Распакуем:
* напомним, что в качестве примера нами используются диски sdb и sdc.
tar -xf squid-3.5.8.tar.gz
cd squid-3.5.8


'''4.3''' Качаем патч для bio.cc, и патчим:
Посмотреть, что диск может использоваться LMV можно командой:
wget -O bug-4330-put_cipher_by_char-t1.patch http://bugs.squid-cache.org/attachment.cgi?id=3216
patch -p0 -i bug-4330-put_cipher_by_char-t1.patch
»  patching file src/ssl/bio.cc


'''5.''' А этот этап один из самых ответственных. Необходимо сконфигурировать Squid с нужными опциями. В предыдущей статье использовался файл debian/rules, но компилировать Squid в этой инструкции мы будем с помощью make, и создавать пакеты будем с помощью checkinstall. Поэтому опций будет побольше. И вот какие:
pvdisplay
./configure --build=x86_64-linux-gnu \
--prefix=/usr \
--includedir=${prefix}/include \
--mandir=${prefix}/share/man \
--infodir=${prefix}/share/info \
--sysconfdir=/etc \
--localstatedir=/var \
--libexecdir=${prefix}/lib/squid \
--srcdir=. \
--disable-maintainer-mode \
--disable-dependency-tracking \
--disable-silent-rules \
--datadir=/usr/share/squid \
--sysconfdir=/etc/squid \
--mandir=/usr/share/man \
--enable-inline \
--disable-arch-native \
--enable-async-io=8 \
--enable-storeio=ufs,aufs,diskd,rock \
--enable-removal-policies=lru,heap \
--enable-delay-pools \
--enable-cache-digests \
--enable-icap-client \
--enable-follow-x-forwarded-for \
--enable-auth-basic=DB,fake,getpwnam,LDAP,NCSA,NIS,PAM,POP3,RADIUS,SASL,SMB \
--enable-auth-digest=file,LDAP \
--enable-auth-negotiate=kerberos,wrapper \
--enable-auth-ntlm=fake,smb_lm \
--enable-external-acl-helpers=file_userip,kerberos_ldap_group,LDAP_group,session,SQL_session,unix_group,wbinfo_group \
--enable-url-rewrite-helpers=fake \
--enable-eui \
--enable-esi \
--enable-icmp \
--enable-zph-qos \
--enable-ecap \
--disable-translation \
--with-swapdir=/var/spool/squid \
--with-logdir=/var/log/squid \
--with-pidfile=/var/run/squid.pid \
--with-filedescriptors=65536 \
--with-large-files \
--with-default-user=proxy \
--enable-ssl \
--enable-ssl-crtd \
--with-openssl \
--enable-linux-netfilter \
'CFLAGS=-g -O2 -fPIE -fstack-protector-strong -Wformat -Werror=format-security -Wall' \
'LDFLAGS=-fPIE -pie -Wl,-z,relro -Wl,-z,now' \
'CPPFLAGS=-D_FORTIFY_SOURCE=2' \
'CXXFLAGS=-g -O2 -fPIE -fstack-protector-strong -Wformat -Werror=format-security'


'''*''' Будьте предельно внимательны. Нас больше интересуют, как и в предыдущей статье, три опции: --enable-ssl, --enable-ssl-crtd, --with-openssl. Остальные опции можете изменять в соответствие с вашими предпочтениями (если хотите их менять, обязательно прочитайте документацию по конфигурированию).
В нашем случае мы должны увидеть что-то на подобие:


'''6.''' Теперь мы добрались до компилирования.
  "/dev/sdb" is a new physical volume of "1,00 GiB"
'''6.1''' Компилируем.
  --- NEW Physical volume ---
make
  PV Name              /dev/sdb
  VG Name             
  PV Size              1,00 GiB
  Allocatable          NO
  PE Size              0 
  Total PE              0
  Free PE              0
  Allocated PE          0
  PV UUID              rR8qya-eJes-7AC5-wuxv-CT7a-o30m-bnUrWa
 
  "/dev/sdc" is a new physical volume of "1,00 GiB"
  --- NEW Physical volume ---
  PV Name              /dev/sdc
  VG Name             
  PV Size              1,00 GiB
  Allocatable          NO
  PE Size              0 
  Total PE              0
  Free PE              0
  Allocated PE          0
  PV UUID              2jIgFd-gQvH-cYkf-9K7N-M7cB-WWGE-9dzHIY


'''6.2''' Неоднозначный этап. Необходимо создать директории /usr/share/squid/ и /usr/share/squid/icons, иначе следующий этап не выполнится из-за отсутствия этих папок (почему checkinstall их сам не создает, я не разбирался, к сожалению):
* где
mkdir -p  /usr/share/squid/icons


'''6.3''' А теперь создаем установочные пакеты:
    PV Name — имя диска.  
checkinstall --pkgname squid --pkgversion 3.5.8
    VG Name — группа томов, в которую входит данный диск (в нашем случае пусто, так как мы еще не добавили его в группу).
    PV Size — размер диска.
    Allocatable — распределение по группам. Если NO, то диск еще не задействован и его необходимо для использования включить в группу.
    PE Size — размер физического фрагмента (экстента). Пока диск не добавлен в группу, значение будет 0.
    Total PE — количество физических экстентов.
    Free PE — количество свободных физических экстентов.
    Allocated PE — распределенные экстенты.
    PV UUID — идентификатор физического раздела.


'''7.''' Мы подходим к финалу. Устанавливаем Squid:
2. Создание групп томов
dpkg -i squid_3.5.8-1_amd64.deb


'''8.''' Пробуем запустить squid:
Инициализированные на первом этапе диски должны быть объединены в группы.
systemctl start squid


'''*''' И видим большую ФИГУ! Надо же… Пробуем по-старинке:
Группа может быть создана:
service squid start


'''*''' И тоже видим большую ФИГУ. Почему? Потому что checkinstall не включил в пакет файлы сервиса Squid. Не беда. <br>
vgcreate vg01 /dev/sdb /dev/sdc
'''8.1''' Создадим сами нужный сервис  systemd:
touch /etc/systemd/system/squid.service
nano /etc/systemd/system/squid.service


'''*''' Со следующим содержимым:
* где vg01 — произвольное имя создаваемой группы; /dev/sdb, /dev/sdc — наши диски.


## Copyright (C) 1996-2015 The Squid Software Foundation and contributors
Просмотреть информацию о созданных группах можно командой:
##
## Squid software is distributed under GPLv2+ license and includes
## contributions from numerous individuals and organizations.
## Please see the COPYING and CONTRIBUTORS files for details.
##
[Unit]
Description=Squid Web Proxy Server
After=network.target
[Service]
Type=simple
ExecStart=/usr/sbin/squid -sYC -N
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
[Install]
WantedBy=multi-user.target
'''8.2''' Включим созданный сервис
systemctl enable squid


'''9.''' Да, вы правы, это еще не все. Так как мы компилировали полностью оригинальные исходники (за исключением патча на bio.cc), конфигурационные файлы у нас установились вида squid.conf.default, mime.conf.default и т.п. Конечно же, Squid о них и не слышал. Переименуем их в Squid'очитаемый вид:
vgdisplay
cp /etc/squid/squid.conf.default /etc/squid/squid.conf
cp /etc/squid/mime.conf.default /etc/squid/mime.conf
cp /etc/squid/cachemgr.conf.default /etc/squid/cachemgr.conf
cp /etc/squid/errorpage.css.default /etc/squid/errorpage.css


'''10.''' И это еще не все=) Необходимо вручную создать папку для логов Squid'a и назначить ей соответствующие права:
На что мы получим, примерно, следующее:
mkdir /var/log/squid
chown proxy /var/log/squid


'''11.''' И вот он — финальный этап. Запуск Squid'a и проверка статуса сервиса!
  --- Volume group ---
  systemctl start squid
  VG Name              vg01
  System ID           
  Format                lvm2
  Metadata Areas        2
  Metadata Sequence No 1
  VG Access            read/write
  VG Status            resizable
  MAX LV                0
  Cur LV                0
  Open LV              0
  Max PV                0
  Cur PV                2
  Act PV                2
  VG Size              1,99 GiB
  PE Size              4,00 MiB
  Total PE              510
  Alloc PE / Size      0 / 0 
  Free  PE / Size      510 / 1,99 GiB
  VG UUID              b0FAUz-wlXt-Hzqz-Sxs4-oEgZ-aquZ-jLzfKz


systemctl status -l squid
* где:
● squid.service - Squid Web Proxy Server
    Loaded: loaded (/etc/systemd/system/squid.service; enabled)
    Active: active (running) since Пт 2015-12-04 23:32:04 YEKT; 2min 41s ago
  Main PID: 590 (squid)
    CGroup: /system.slice/squid.service
            ├─590 /usr/sbin/squid -sYC -N
            └─591 (logfile-daemon) /var/log/squid/access.log
дек 04 23:32:04 squidX64 squid[590]: Max Swap size: 0 KB
дек 04 23:32:04 squidX64 squid[590]: Using Least Load store dir selection
дек 04 23:32:04 squidX64 squid[590]: Current Directory is /
дек 04 23:32:04 squidX64 squid[590]: Finished loading MIME types and icons.
дек 04 23:32:04 squidX64 squid[590]: HTCP Disabled.
дек 04 23:32:04 squidX64 squid[590]: Pinger socket opened on FD 16
дек 04 23:32:04 squidX64 squid[590]: Squid plugin modules loaded: 0
дек 04 23:32:04 squidX64 squid[590]: Adaptation support is off.
дек 04 23:32:04 squidX64 squid[590]: Accepting HTTP Socket connections at local=[::]:3128 remote=[::] FD 14 flags=9
дек 04 23:32:05 squidX64 squid[590]: storeLateRelease: released 0 objects
'''*''' Если выхлоп консоли выглядит похоже, а точнее в нем нет ошибок и обязательно присутствует строка «Active: active (running)», то вы успешно установили себе Squid с поддержкой прозрачного проксирования HTTPS! Поздравляю!


'''*''' Для запуска в Debian через /etc/init.d - за основу взят родной скрипт:
    VG Name — имя группы.
#! /bin/sh
    Format — версия подсистемы, используемая для создания группы.
#
    Metadata Areas — область размещения метаданных. Увеличивается на единицу с созданием каждой группы.
# squid        Startup script for the SQUID HTTP proxy-cache.
    VG Access — уровень доступа к группе томов.
#
     VG Size — суммарный объем всех дисков, которые входят в группу.
# Version:      @(#)squid.rc  1.0  07-Jul-2006  luigi@debian.org
     PE Size — размер физического фрагмента (экстента).
#
     Total PE — количество физических экстентов.
# pidfile: /var/run/squid.pid
    Alloc PE / Size — распределенное пространство: колическтво экстентов / объем.
#
    Free PE / Size — свободное пространство: колическтво экстентов / объем.
### BEGIN INIT INFO
    VG UUID — идентификатор группы.
# Provides:          squid
# Required-Start:    $network $remote_fs $syslog
# Required-Stop:    $network $remote_fs $syslog
# Should-Start:      $named
# Should-Stop:      $named
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Squid HTTP Proxy version 3.x
### END INIT INFO
NAME=squid
DESC="Squid HTTP Proxy"
DAEMON=/usr/sbin/squid
PIDFILE=/var/run/$NAME.pid
CONFIG=/etc/squid/squid.conf
SQUID_ARGS="-YC -f $CONFIG"
[ ! -f /etc/default/squid ] || . /etc/default/squid
. /lib/lsb/init-functions
PATH=/bin:/usr/bin:/sbin:/usr/sbin
[ -x $DAEMON ] || exit 0
ulimit -n 65535
find_cache_dir () {
        w="     " # space tab
        res=`$DAEMON -k parse -f $CONFIG 2>&1 |
                grep "Processing:" |
                sed s/.*Processing:\ // |
                sed -ne '
                        s/^['"$w"']*'$1'['"$w"']\+[^'"$w"']\+['"$w"']\+\([^'"$w"']\+\).*$/\1/p;
                        t end;
                        d;
                        :end q'`
        [ -n "$res" ] || res=$2
        echo "$res"
}
grepconf () {
        w="     " # space tab
        res=`$DAEMON -k parse -f $CONFIG 2>&1 |
                grep "Processing:" |
                sed s/.*Processing:\ // |
                sed -ne '
                        s/^['"$w"']*'$1'['"$w"']\+\([^'"$w"']\+\).*$/\1/p;
                        t end;
                        d;
                        :end q'`
        [ -n "$res" ] || res=$2
        echo "$res"
}
create_run_dir () {
        run_dir=/var/run/squid
        usr=`grepconf cache_effective_user proxy`
        grp=`grepconf cache_effective_group proxy`
        if [ "$(dpkg-statoverride --list $run_dir)" = "" ] &&
            [ ! -e $run_dir ] ; then
                mkdir -p $run_dir
                chown $usr:$grp $run_dir
                [ -x /sbin/restorecon ] && restorecon $run_dir
        fi
}
start () {
        cache_dir=`find_cache_dir cache_dir`
        cache_type=`grepconf cache_dir`
        run_dir=/var/run/squid
        #
        # Create run dir (needed for several workers on SMP)
        #
        create_run_dir
        #
        # Create spool dirs if they don't exist.
        #
        if test -d "$cache_dir" -a ! -d "$cache_dir/00"
        then
                log_warning_msg "Creating $DESC cache structure"
                $DAEMON -z -f $CONFIG
                [ -x /sbin/restorecon ] && restorecon -R $cache_dir
        fi
        umask 027
        ulimit -n 65535
        cd $run_dir
        start-stop-daemon --quiet --start \
                --pidfile $PIDFILE \
                --exec $DAEMON -- $SQUID_ARGS < /dev/null
        return $?
}
  stop () {
        PID=`cat $PIDFILE 2>/dev/null`
        start-stop-daemon --stop --quiet --pidfile $PIDFILE --exec $DAEMON
        #
        #      Now we have to wait until squid has _really_ stopped.
        #
        sleep 2
        if test -n "$PID" && kill -0 $PID 2>/dev/null
        then
                log_action_begin_msg " Waiting"
                cnt=0
                while kill -0 $PID 2>/dev/null
                do
                        cnt=`expr $cnt + 1`
                        if [ $cnt -gt 24 ]
                        then
                                log_action_end_msg 1
                                return 1
                        fi
                        sleep 5
                        log_action_cont_msg ""
                done
                log_action_end_msg 0
                return 0
        else
                return 0
        fi
}
cfg_pidfile=`grepconf pid_filename`
if test "${cfg_pidfile:-none}" != "none" -a "$cfg_pidfile" != "$PIDFILE"
then
        log_warning_msg "squid.conf pid_filename overrides init script"
        PIDFILE="$cfg_pidfile"
fi
case "$1" in
    start)
        res=`$DAEMON -k parse -f $CONFIG 2>&1 | grep -o "FATAL: .*"`
        if test -n "$res";
        then
                log_failure_msg "$res"
                exit 3
        else
                log_daemon_msg "Starting $DESC" "$NAME"
                if start ; then
                        log_end_msg $?
                else
                        log_end_msg $?
                fi
        fi
        ;;
    stop)
        log_daemon_msg "Stopping $DESC" "$NAME"
        if stop ; then
                log_end_msg $?
        else
                log_end_msg $?
        fi
        ;;
    reload|force-reload)
        res=`$DAEMON -k parse -f $CONFIG 2>&1 | grep -o "FATAL: .*"`
        if test -n "$res";
        then
                log_failure_msg "$res"
                exit 3
        else
                log_action_msg "Reloading $DESC configuration files"
                start-stop-daemon --stop --signal 1 \
                        --pidfile $PIDFILE --quiet --exec $DAEMON
                log_action_end_msg 0
        fi
        ;;
    restart)
        res=`$DAEMON -k parse -f $CONFIG 2>&1 | grep -o "FATAL: .*"`
        if test -n "$res";
        then
                log_failure_msg "$res"
                exit 3
        else
                log_daemon_msg "Restarting $DESC" "$NAME"
                stop
                if start ; then
                        log_end_msg $?
                else
                        log_end_msg $?
                fi
        fi
        ;;
    status)
        status_of_proc -p $PIDFILE $DAEMON $NAME && exit 0 || exit 3
        ;;
    *)
        echo "Usage: /etc/init.d/$NAME {start|stop|reload|force-reload|restart|status}"
        exit 3
        ;;
esac
exit 0
* - > который необходимо поместить в /etc/init.d/squid
и сделать:
update-rc.d squid default
теперь можно и запустить:
/etc/init.d/squid start
* -> для systemd необходимо исправить:
## Copyright (C) 1996-2015 The Squid Software Foundation and contributors
##
## Squid software is distributed under GPLv2+ license and includes
## contributions from numerous individuals and organizations.
## Please see the COPYING and CONTRIBUTORS files for details.
##
[Unit]
Description=Squid Web Proxy Server
After=network.target
[Service]
Type=simple
#ExecStart=/usr/sbin/squid -sYC -N
ExecStart=/etc/init.d/squid start
#ExecReload=/bin/kill -HUP
ExecReload=/etc/init.d/squid restart
KillMode=process
[Install]
WantedBy=multi-user.target
* и обновить правило:
systemctl daemon-reload


* Теперь перезапуск возможен и через '''systemctl''' и через '''/etc/init.d'''
3. Создание логических томов


'''*''' Если не хочется ничего компилировать, то можете скачать архив с готовыми deb пакетами (x64 версия!). Если будете устанавливать из готовых пакетов, то вам нужны будут шаги: 2, 3(б), 7, 8, 9, 10, 11.
Последний этап — создание логического раздела их группы томов командой lvcreate. Ее синтаксис:


'''*''' Также хочу отметить, что checkinstall позволяет создавать пакеты rpm, и вы можете этим воспользоваться. Единственное, нужно все пакеты собирать с помощью checkinstall, но я думаю, проблем с этим не будет, так как основное и самое сложное уже собрано именно checkinstall'ом.
lvcreate [опции] <имя группы томов>


* Пример рабочего /etc/squid/squid.conf
Примеры создания логических томов:
acl localnet src 192.168.5.0/24 # RFC1918 possible internal network
acl SSL_ports port 443
acl Safe_ports port 80          # http
acl Safe_ports port 21          # ftp
acl Safe_ports port 443        # https
acl Safe_ports port 70          # gopher
acl Safe_ports port 210        # wais
acl Safe_ports port 1025-65535  # unregistered ports
acl Safe_ports port 280        # http-mgmt
acl Safe_ports port 488        # gss-http
acl Safe_ports port 591        # filemaker
acl Safe_ports port 777        # multiling http
acl CONNECT method CONNECT
dns_nameservers 127.0.0.1
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access allow localhost manager                                                                                         
http_access deny manager                                                                                                     
                                                                                                                             
http_access allow localnet                                                                                                                                                                                                     
http_access allow localhost                                                                                                 
http_access deny all                                                                                                         
#прозрачный порт указывается опцией intercept
http_port 192.168.5.1:3128 intercept
http_port 192.168.5.1:3130
https_port 192.168.5.1:3129 intercept ssl-bump options=ALL:NO_SSLv3:NO_SSLv2 connection-auth=off cert=/etc/squid/squidCA.pem
 
always_direct allow all
sslproxy_cert_error allow all
sslproxy_flags DONT_VERIFY_PEER
#укажем правило со списком блокируемых ресурсов (в файле домены вида .domain.com)
#acl blocked ssl::server_name  "/etc/squid/blacklist_https.conf"
acl step1 at_step SslBump1
ssl_bump peek step1
#терминируем соединение, если клиент заходит на запрещенный ресурс
#ssl_bump terminate blocked deny_users
#ssl_bump bump all
ssl_bump splice all
sslcrtd_program /usr/lib/squid/ssl_crtd -s /var/lib/ssl_db -M 4MB
coredump_dir /var/spool/squid
refresh_pattern ^ftp:          1440    20%    10080
refresh_pattern ^gopher:        1440    0%      1440
refresh_pattern -i (/cgi-bin/|\?) 0    0%      0
refresh_pattern .              0      20%    4320
cache_dir aufs /var/spool/squid 512 49 256
maximum_object_size 61440 KB
minimum_object_size 3 KB
cache_swap_low 90
cache_swap_high 95
maximum_object_size_in_memory 256 KB
memory_replacement_policy lru
logfile_rotate 4


* не забываем создать ssl сертификат для squid:
lvcreate -L 1G vg01


'''ИСТОЧНИКИ:'''
* создание тома на 1 Гб из группы vg01.
 
lvcreate -L50 -n lv01 vg01
 
* создание тома с именем lv01 на 50 Мб из группы vg01.
 
lvcreate -l 40%VG vg01
 
* при создании тома используется 40% от дискового пространства группы vg01.
 
lvcreate -l 100%FREE vg01
 
* использовать все свободное пространство группы vg01 при создании логического тома.
* также можно использовать %PVS — процент места от физического тома (PV); %ORIGIN — размер оригинального тома (применяется для снапшотов).
 
Посмотрим информацию о созданном томе:
 
lvdisplay
 
  --- Logical volume ---
  LV Path                /dev/vg01/lv01
  LV Name                lv01
  VG Name                vg01
  LV UUID                4nQ2rp-7AcZ-ePEQ-AdUr-qcR7-i4rq-vDISfD
  LV Write Access        read/write
  LV Creation host, time vln.dmosk.local, 2019-03-18 20:01:14 +0300
  LV Status              available
  # open                0
  LV Size                52,00 MiB
  Current LE            13
  Segments              1
  Allocation            inherit
  Read ahead sectors    auto
  - currently set to    8192
  Block device          253:2
 
* где:
 
    LV Path — путь к устройству логического тома.
    LV Name — имя логического тома.
    VG Name — имя группы томов.
    LV UUID — идентификатор.
    LV Write Access — уровень доступа.
    LV Creation host, time — имя компьютера и дата, когда был создан том.
    LV Size — объем дискового пространства, доступный для использования.
    Current LE — количество логических экстентов.
 
Создание файловой системы и монтирование тома
 
Чтобы начать использовать созданный том, необходимо его отформатировать, создав файловую систему и примонтировать раздел в каталог.
Файловая система
 
Процесс создания файловой системы на томах LVM ничем не отличается от работы с любыми другими разделами.
 
Например, для создания файловой системы ext4 вводим:
 
mkfs.ext4 /dev/vg01/lv01
 
* vg01 — наша группа томов; lv01 — логический том.
 
Для создания, например, файловой системы xfs вводим:
 
mkfs.xfs /dev/vg01/lv01
Монтирование
 
Как и в случае с файловой системой, процесс монтирования не сильно отличается от разделов, созданных другими методами.
 
Для разового монтирования пользуемся командой:
 
mount /dev/vg01/lv01 /mnt
 
* где /dev/vg01/lv01 — созданный нами логический том, /mnt — раздел, в который мы хотим примонтировать раздел.
 
Для постоянного монтирования раздела добавляем строку в fstab:
 
vi /etc/fstab
 
/dev/vg01/lv01  /mnt    ext4    defaults        1 2
 
* в данном примере мы монтируем при загрузке системы том /dev/vg01/lv01 в каталог /mnt; используется файловая система ext4.
 
Проверяем настройку fstab, смонтировав раздел:
 
mount -a
 
Проверяем, что диск примонтирован:
 
df -hT
Просмотр информации
 
Разберемся, как получить информацию о дисковых накопителях в системе.
 
1. Для общего представления дисков, разделов и томов вводим:
 
lsblk
 
Мы получим что-то на подобие:
 
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda                8:0    0  30G  0 disk
  sda1            8:1    0    1G  0 part /boot
  sda2            8:2    0  29G  0 part
    sys-root    253:0    0  27G  0 lvm  /
    sys-swap    253:1    0    2G  0 lvm  [SWAP]
sdb                8:16  0    1G  0 disk
  vg01-lv01-real 253:3    0    1G  0 lvm 
    vg01-lv01    253:2    0    1G  0 lvm  /mnt
    vg01-sn01    253:5    0    1G  0 lvm 
sdc                8:32  0    1G  0 disk
  vg01-lv01-real 253:3    0    1G  0 lvm 
    vg01-lv01    253:2    0    1G  0 lvm  /mnt
    vg01-sn01    253:5    0    1G  0 lvm 
  vg01-sn01-cow  253:4    0  500M  0 lvm 
    vg01-sn01    253:5    0    1G  0 lvm 
sdd                8:48  0    1G  0 disk
 
* как видим, команда отображает корневое блочное устройство, какие разделы из него сделаны и в какие логические тома организованы из некоторых из разделов.
 
2. Получить информацию о проинициализированных для LVM дисков:
 
Кратко:
 
pvs
 
Подробно:
 
pvdisplay
 
pvdisplay /dev/sdb
 
3. Посмотреть информацию о группах LVM.
 
Кратко:
 
vgs
 
Подробно:
 
vgdisplay
 
vgdisplay vg01
 
4. Посмотреть информацию о логических томах можно также двумя способами — краткая информация:
 
lvs
 
* команда покажет все логические разделы.
 
Для более подробной информации о логических томах вводим:
 
lvdisplay
 
lvdisplay /dev/vg01/lv01
 
5. Для поиска всех устройств, имеющих отношение к LVM, вводим:
 
lvmdiskscan
Увеличение томов
 
Увеличение размера тома может выполняться с помощью добавления еще одного диска или при увеличении имеющихся дисков (например, увеличение диска виртуальной машины). Итак, процедура выполняется в 3 этапа:
1. Добавление нового диска к группе томов
 
Данный этап мы пропускаем, если расширение тома выполняется без добавления нового диска.
 
Инициализируем новый диск:
 
pvcreate /dev/sdd
 
* в данном примере мы инициализировали диск sdd.
 
Расширяем группу томов:
 
vgextend vg01 /dev/sdd
 
* данная команда расширит группу vg01 за счет добавления диска sdd.
2. Увеличение логического раздела
 
Выполняется одной командой:
 
lvextend -l +100%FREE /dev/vg01/lv01
 
* данной командой мы выделяем все свободное пространство группы томов vg01 разделу lv01.
 
Результат можно увидеть командой:
 
lvdisplay
 
Обратить внимание нужно на опцию LV Size:
 
  ...
  LV Status              available
  # open                1
  LV Size                <2,99 GiB
  Current LE            765
  ...
3. Увеличение размера файловой системы
 
Чтобы сама система увидела больший объем дискового пространства, необходимо увеличить размер файловой системы.
 
Посмотреть используемую файловую систему:
 
df -T
 
Для каждой файловой системы существуют свои инструменты.
 
ext2/ext3/ext4:
 
resize2fs /dev/vg01/lv01
 
XFS:
 
xfs_growfs /dev/vg01/lv01
 
Reiserfs:
 
resize_reiserfs /dev/vg01/lv01
Уменьшение томов
 
Размер некоторый файловых систем, например, XFS уменьшить нельзя. Из положения можно выйти, создав новый уменьшенный том с переносом на него данных и последующим удалением.
 
LVM также позволяет уменьшить размер тома. Для этого необходимо выполнить его отмонтирование, поэтому для уменьшения системного раздела безопаснее всего загрузиться с Linux LiveCD. Далее выполняем инструкцию ниже.
 
Отмонтируем раздел, который нужно уменьшить:
 
umount /mnt
 
Выполняем проверку диска:
 
e2fsck -fy /dev/vg01/lv01
 
Уменьшаем размер файловой системы:
 
resize2fs /dev/vg01/lv01 500M
 
Уменьшаем размер тома:
 
lvreduce -L-500 /dev/vg01/lv01
 
На предупреждение системы отвечаем y:
 
  WARNING: Reducing active logical volume to 524,00 MiB.
  THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce vg01/lv01? [y/n]: y
 
Готово.
 
Очень важно, чтобы сначала был уменьшен размер файловой системы, затем тома. Также важно не уменьшить размер тома больше, чем файловой системы. В противном случае данные могут быть уничтожены. Перед выполнением операции, обязательно создаем копию важных данных.
Удаление томов
 
Если необходимо полностью разобрать LVM тома, выполняем следующие действия.
 
Отмонтируем разделы:
 
umount /mnt
 
* где /mnt — точка монтирования для раздела.
 
Удаляем соответствующую запись из fstab (в противном случае наша система может не загрузиться после перезагрузки):
 
vi /etc/fstab
 
#/dev/vg01/lv01  /mnt    ext4    defaults        1 2
 
* в данном примере мы не удалили, а закомментировали строку монтирования диска.
 
Теперь удаляем логический том:
 
lvremove /dev/vg01/lv01
 
На вопрос системы, действительно ли мы хотим удалить логических том, отвечаем да (y):
 
Do you really want to remove active logical volume vg01/lv01? [y/n]: y
 
* если система вернет ошибку Logical volume contains a filesystem in use, необходимо убедиться, что мы отмонтировали том.
 
Удаляем группу томов:
 
vgremove vg01
 
Убираем пометку с дисков на использование их для LVM:
 
pvremove /dev/sd{b,c,d}
 
* в данном примере мы деинициализируем диски /dev/sdb, /dev/sdc, /dev/sdd.
 
В итоге мы получим:
 
  Labels on physical volume "/dev/sdb" successfully wiped.
  Labels on physical volume "/dev/sdc" successfully wiped.
  Labels on physical volume "/dev/sdd" successfully wiped.
Создание зеркала
 
С помощью LVM мы может создать зеркальный том — данные, которые мы будем на нем сохранять, будут отправляться на 2 диска. Таким образом, если один из дисков выходит из строя, мы не потеряем свои данные.
 
Зеркалирование томов выполняется из группы, где есть, минимум, 2 диска.
 
1. Сначала инициализируем диски:
 
pvcreate /dev/sd{d,e}
 
* в данном примере sdd и sde.
 
2. Создаем группу:
 
vgcreate vg02 /dev/sd{d,e}
 
3. Создаем зеркальный том:
 
lvcreate -L200 -m1 -n lv-mir vg02
 
* мы создали том lv-mir на 200 Мб из группы vg02.
 
В итоге:
 
lsblk
 
... мы увидим что-то на подобие:
 
  sdd                      8:16  0    1G  0 disk
    vg02-lv--mir_rmeta_0  253:2    0    4M  0 lvm
    vg02-lv--mir        253:6    0  200M  0 lvm
    vg02-lv--mir_rimage_0 253:3    0  200M  0 lvm
    vg02-lv--mir        253:6    0  200M  0 lvm
  sde                      8:32  0    1G  0 disk
    vg02-lv--mir_rmeta_1  253:4    0    4M  0 lvm
    vg02-lv--mir        253:6    0  200M  0 lvm
    vg02-lv--mir_rimage_1 253:5    0  200M  0 lvm
    vg02-lv--mir        253:6    0  200M  0 lvm
 
* как видим, на двух дисках у нас появились разделы по 200 Мб.
Работа со снапшотами
 
Снимки диска позволят нам откатить состояние на определенный момент. Это может послужить быстрым вариантом резервного копирования. Однако нужно понимать, что данные хранятся на одном и том же физическом носителе, а значит, данный способ не является полноценным резервным копированием.
 
Создание снапшотов для тома, где уже используется файловая система XFS, имеет некоторые нюансы, поэтому разберем разные примеры.
 
Создание для не XFS:
 
lvcreate -L500 -s -n sn01 /dev/vg01/lv01
 
* данная команда помечает, что 500 Мб дискового пространства устройства /dev/vg01/lv01 (тома lv01 группы vg01) будет использоваться для snapshot (опция -s).
 
Создание для XFS:
 
xfs_freeze -f /mnt; lvcreate -L500 -s -n sn01 /dev/vg01/lv01; xfs_freeze -u /mnt
 
* команда xfs_freeze замораживает операции в файловой системе XFS.
 
Посмотрим список логических томов:
 
lvs
 
Получим что-то на подобие:
 
LV  VG  Attr      LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
lv01 vg01 owi-aos---  1,00g
sn01 vg01 swi-a-s--- 500,00m      lv01  2,07
 
* поле Origin показывает, к какому оригинальному логическому тому относится LV, например, в данной ситуации наш раздел для снапшотов относится к lv01.
 
Также можно посмотреть изменения в томах командой:
 
lsblk
 
Мы должны увидеть что-то подобное:
 
    sdc                8:32  0    1G  0 disk
    vg01-lv01-real 253:3    0    1G  0 lvm 
    vg01-lv01    253:2    0    1G  0 lvm  /mnt
    vg01-sn01    253:5    0    1G  0 lvm 
    vg01-sn01-cow  253:4    0  500M  0 lvm 
    vg01-sn01    253:5    0    1G  0 lvm
 
С этого момента все изменения пишутся в vg01-sn01-cow, а vg01-lv01-real фиксируется только для чтения и мы может откатиться к данному состоянию диска в любой момент.
 
Содержимое снапшота можно смонтировать и посмотреть, как обычный раздел:
 
mkdir /tmp/snp
 
Монтирование не XFS:
 
mount /dev/vg01/sn01 /tmp/snp
 
Монтирование XFS:
 
mount -o nouuid,ro /dev/vg01/sn01 /tmp/snp
 
Для выполнения отката до снапшота, выполняем команду:
 
lvconvert --merge /dev/vg01/sn01
 
=='''ПРОБЛЕМЫ и РЕШЕНИЯ:'''==
* - LVM volume is inactive after reboot
* Выполнить:
vgchange -a n my_volume_group
[https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/4/html/Cluster_Logical_Volume_Manager/VG_activate.html взято тут]
[https://unix.stackexchange.com/questions/213027/lvm-volume-is-inactive-after-reboot-of-centos/460835#460835 доп.инфо]
[https://stackoverflow.com/questions/18042216/how-to-deactivate-a-lvm2-physical-volume-to-remove-the-drive пример stackoverflow.com]
*[https://habr.com/ru/post/254011/ восстановление LVM]
 
'''ИСТОЧНИК:'''
<hr>
<hr>
* [https://habr.com/ru/post/272733/ «Прозрачный» Squid с фильтрацией HTTPS ресурсов без подмены сертификатов (х86, х64 — универсальная инструкция)]
* [https://www.dmosk.ru/instruktions.php?object=lvm Как работать с LVM]
* [https://habr.com/ru/post/267851/ «Прозрачный» Squid с фильтрацией HTTPS ресурсов без подмены сертификатов (x86)]
 
=='''ПОЛЕЗНОЕ'''==
* [https://itproffi.ru/podklyuchenie-diska-lvm-k-drugomu-kompyuteru/ Подключение диска lvm к другому компьютеру]

Текущая версия от 15:31, 26 февраля 2021

LVM

В статье описаны основные моменты использования LVM для организации дисковой системы в Linux.
Она поможет как чайникам разобраться с принципами ее работы, так и уже знающим LVM в качестве шпаргалки.

Используемые команды одинаково подойдут как для систем Red Hat / CentOS, так и Debian / Ubuntu.

Уровни абстракции Установка LVM Создание разделов

   Инициализация (pvcreate)
   Создание групп (vgcreate)
   Создание логического тома (lvcreate)

Файловая система и монтирование

   Создание файловой системы
   Монтирование тома

Просмотр информации об LVM Увеличение томов

   Добавление диска к группе
   Увеличение логического тома
   Изменение размера файловой системы

Уменьшение томов Удаление томов Зеркалирование Снапшоты Работа с LVM в Windows Уровни абстракции

Работа с томами с помощью LVM происходит на 3-х уровнях абстракции:

   Физический уровень (PV). Сначала диск инициализируется командой pvcreate — в начале диска создается дескриптор группы томов. При этом важно заметить, что диск не обязательно должен быть физическим — мы можно отметить на использование обычный раздел диска.
   Группа томов (VG). С помощью команды vgcreate создается группа томов из инициализированных на предыдущем этапе дисков.
   Логический том (LV). Группы томов нарезаются на логические тома командой lvcreate.

Схематично, уровни можно представить так:

Схематичное представление уровней абстракции LVM Установка

Для работы с LVM необходима установка одноименной утилиты. В системе Linux она может быть установлена по умолчанию. Но если ее нет, выполняем инструкцию ниже.

Если используем системы на безе deb (Ubuntu, Debian, Mint):

apt-get install lvm2

Если используем системы на безе RPM (Red Hat, CentOS, Fedora):

yum install lvm2 Создание разделов

Рассмотрим пример создания томов из дисков sdb и sdc с помощью LVM. 1. Инициализация

Помечаем диски, что они будут использоваться для LVM:

pvcreate /dev/sdb /dev/sdc

  • напомним, что в качестве примера нами используются диски sdb и sdc.

Посмотреть, что диск может использоваться LMV можно командой:

pvdisplay

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

 "/dev/sdb" is a new physical volume of "1,00 GiB"
 --- NEW Physical volume ---
 PV Name               /dev/sdb
 VG Name               
 PV Size               1,00 GiB
 Allocatable           NO
 PE Size               0   
 Total PE              0
 Free PE               0
 Allocated PE          0
 PV UUID               rR8qya-eJes-7AC5-wuxv-CT7a-o30m-bnUrWa
  
 "/dev/sdc" is a new physical volume of "1,00 GiB"
 --- NEW Physical volume ---
 PV Name               /dev/sdc
 VG Name               
 PV Size               1,00 GiB
 Allocatable           NO
 PE Size               0   
 Total PE              0
 Free PE               0
 Allocated PE          0
 PV UUID               2jIgFd-gQvH-cYkf-9K7N-M7cB-WWGE-9dzHIY
  • где
   PV Name — имя диска. 
   VG Name — группа томов, в которую входит данный диск (в нашем случае пусто, так как мы еще не добавили его в группу).
   PV Size — размер диска.
   Allocatable — распределение по группам. Если NO, то диск еще не задействован и его необходимо для использования включить в группу.
   PE Size — размер физического фрагмента (экстента). Пока диск не добавлен в группу, значение будет 0.
   Total PE — количество физических экстентов.
   Free PE — количество свободных физических экстентов.
   Allocated PE — распределенные экстенты.
   PV UUID — идентификатор физического раздела.

2. Создание групп томов

Инициализированные на первом этапе диски должны быть объединены в группы.

Группа может быть создана:

vgcreate vg01 /dev/sdb /dev/sdc

  • где vg01 — произвольное имя создаваемой группы; /dev/sdb, /dev/sdc — наши диски.

Просмотреть информацию о созданных группах можно командой:

vgdisplay

На что мы получим, примерно, следующее:

 --- Volume group ---
 VG Name               vg01
 System ID             
 Format                lvm2
 Metadata Areas        2
 Metadata Sequence No  1
 VG Access             read/write
 VG Status             resizable
 MAX LV                0
 Cur LV                0
 Open LV               0
 Max PV                0
 Cur PV                2
 Act PV                2
 VG Size               1,99 GiB
 PE Size               4,00 MiB
 Total PE              510
 Alloc PE / Size       0 / 0   
 Free  PE / Size       510 / 1,99 GiB
 VG UUID               b0FAUz-wlXt-Hzqz-Sxs4-oEgZ-aquZ-jLzfKz
  • где:
   VG Name — имя группы.
   Format — версия подсистемы, используемая для создания группы.
   Metadata Areas — область размещения метаданных. Увеличивается на единицу с созданием каждой группы.
   VG Access — уровень доступа к группе томов.
   VG Size — суммарный объем всех дисков, которые входят в группу.
   PE Size — размер физического фрагмента (экстента).
   Total PE — количество физических экстентов.
   Alloc PE / Size — распределенное пространство: колическтво экстентов / объем.
   Free  PE / Size — свободное пространство: колическтво экстентов / объем.
   VG UUID — идентификатор группы.

3. Создание логических томов

Последний этап — создание логического раздела их группы томов командой lvcreate. Ее синтаксис:

lvcreate [опции] <имя группы томов>

Примеры создания логических томов:

lvcreate -L 1G vg01

  • создание тома на 1 Гб из группы vg01.

lvcreate -L50 -n lv01 vg01

  • создание тома с именем lv01 на 50 Мб из группы vg01.

lvcreate -l 40%VG vg01

  • при создании тома используется 40% от дискового пространства группы vg01.

lvcreate -l 100%FREE vg01

  • использовать все свободное пространство группы vg01 при создании логического тома.
  • также можно использовать %PVS — процент места от физического тома (PV); %ORIGIN — размер оригинального тома (применяется для снапшотов).

Посмотрим информацию о созданном томе:

lvdisplay

 --- Logical volume ---
 LV Path                /dev/vg01/lv01
 LV Name                lv01
 VG Name                vg01
 LV UUID                4nQ2rp-7AcZ-ePEQ-AdUr-qcR7-i4rq-vDISfD
 LV Write Access        read/write
 LV Creation host, time vln.dmosk.local, 2019-03-18 20:01:14 +0300
 LV Status              available
 # open                 0
 LV Size                52,00 MiB
 Current LE             13
 Segments               1
 Allocation             inherit
 Read ahead sectors     auto
 - currently set to     8192
 Block device           253:2
  • где:
   LV Path — путь к устройству логического тома.
   LV Name — имя логического тома.
   VG Name — имя группы томов.
   LV UUID — идентификатор.
   LV Write Access — уровень доступа.
   LV Creation host, time — имя компьютера и дата, когда был создан том.
   LV Size — объем дискового пространства, доступный для использования.
   Current LE — количество логических экстентов.

Создание файловой системы и монтирование тома

Чтобы начать использовать созданный том, необходимо его отформатировать, создав файловую систему и примонтировать раздел в каталог. Файловая система

Процесс создания файловой системы на томах LVM ничем не отличается от работы с любыми другими разделами.

Например, для создания файловой системы ext4 вводим:

mkfs.ext4 /dev/vg01/lv01

  • vg01 — наша группа томов; lv01 — логический том.

Для создания, например, файловой системы xfs вводим:

mkfs.xfs /dev/vg01/lv01 Монтирование

Как и в случае с файловой системой, процесс монтирования не сильно отличается от разделов, созданных другими методами.

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

mount /dev/vg01/lv01 /mnt

  • где /dev/vg01/lv01 — созданный нами логический том, /mnt — раздел, в который мы хотим примонтировать раздел.

Для постоянного монтирования раздела добавляем строку в fstab:

vi /etc/fstab

/dev/vg01/lv01 /mnt ext4 defaults 1 2

  • в данном примере мы монтируем при загрузке системы том /dev/vg01/lv01 в каталог /mnt; используется файловая система ext4.

Проверяем настройку fstab, смонтировав раздел:

mount -a

Проверяем, что диск примонтирован:

df -hT Просмотр информации

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

1. Для общего представления дисков, разделов и томов вводим:

lsblk

Мы получим что-то на подобие:

NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 30G 0 disk

 sda1             8:1    0    1G  0 part /boot
 sda2             8:2    0   29G  0 part 
   sys-root     253:0    0   27G  0 lvm  /
   sys-swap     253:1    0    2G  0 lvm  [SWAP]

sdb 8:16 0 1G 0 disk

 vg01-lv01-real 253:3    0    1G  0 lvm  
   vg01-lv01    253:2    0    1G  0 lvm  /mnt
   vg01-sn01    253:5    0    1G  0 lvm  

sdc 8:32 0 1G 0 disk

 vg01-lv01-real 253:3    0    1G  0 lvm  
   vg01-lv01    253:2    0    1G  0 lvm  /mnt
   vg01-sn01    253:5    0    1G  0 lvm  
 vg01-sn01-cow  253:4    0  500M  0 lvm  
   vg01-sn01    253:5    0    1G  0 lvm  

sdd 8:48 0 1G 0 disk

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

2. Получить информацию о проинициализированных для LVM дисков:

Кратко:

pvs

Подробно:

pvdisplay

pvdisplay /dev/sdb

3. Посмотреть информацию о группах LVM.

Кратко:

vgs

Подробно:

vgdisplay

vgdisplay vg01

4. Посмотреть информацию о логических томах можно также двумя способами — краткая информация:

lvs

  • команда покажет все логические разделы.

Для более подробной информации о логических томах вводим:

lvdisplay

lvdisplay /dev/vg01/lv01

5. Для поиска всех устройств, имеющих отношение к LVM, вводим:

lvmdiskscan Увеличение томов

Увеличение размера тома может выполняться с помощью добавления еще одного диска или при увеличении имеющихся дисков (например, увеличение диска виртуальной машины). Итак, процедура выполняется в 3 этапа: 1. Добавление нового диска к группе томов

Данный этап мы пропускаем, если расширение тома выполняется без добавления нового диска.

Инициализируем новый диск:

pvcreate /dev/sdd

  • в данном примере мы инициализировали диск sdd.

Расширяем группу томов:

vgextend vg01 /dev/sdd

  • данная команда расширит группу vg01 за счет добавления диска sdd.

2. Увеличение логического раздела

Выполняется одной командой:

lvextend -l +100%FREE /dev/vg01/lv01

  • данной командой мы выделяем все свободное пространство группы томов vg01 разделу lv01.

Результат можно увидеть командой:

lvdisplay

Обратить внимание нужно на опцию LV Size:

 ...
 LV Status              available
 # open                 1
 LV Size                <2,99 GiB
 Current LE             765
 ...

3. Увеличение размера файловой системы

Чтобы сама система увидела больший объем дискового пространства, необходимо увеличить размер файловой системы.

Посмотреть используемую файловую систему:

df -T

Для каждой файловой системы существуют свои инструменты.

ext2/ext3/ext4:
resize2fs /dev/vg01/lv01
XFS:
xfs_growfs /dev/vg01/lv01
Reiserfs:
resize_reiserfs /dev/vg01/lv01

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

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

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

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

umount /mnt

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

e2fsck -fy /dev/vg01/lv01

Уменьшаем размер файловой системы:

resize2fs /dev/vg01/lv01 500M

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

lvreduce -L-500 /dev/vg01/lv01

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

 WARNING: Reducing active logical volume to 524,00 MiB.
 THIS MAY DESTROY YOUR DATA (filesystem etc.)

Do you really want to reduce vg01/lv01? [y/n]: y

Готово.

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

Если необходимо полностью разобрать LVM тома, выполняем следующие действия.

Отмонтируем разделы:

umount /mnt
* где /mnt — точка монтирования для раздела.

Удаляем соответствующую запись из fstab (в противном случае наша система может не загрузиться после перезагрузки):

vi /etc/fstab
#/dev/vg01/lv01  /mnt    ext4    defaults        1 2
  • в данном примере мы не удалили, а закомментировали строку монтирования диска.

Теперь удаляем логический том:

lvremove /dev/vg01/lv01

На вопрос системы, действительно ли мы хотим удалить логических том, отвечаем да (y):

Do you really want to remove active logical volume vg01/lv01? [y/n]: y

  • если система вернет ошибку Logical volume contains a filesystem in use, необходимо убедиться, что мы отмонтировали том.

Удаляем группу томов:

vgremove vg01

Убираем пометку с дисков на использование их для LVM:

pvremove /dev/sd{b,c,d}
  • в данном примере мы деинициализируем диски /dev/sdb, /dev/sdc, /dev/sdd.

В итоге мы получим:

 Labels on physical volume "/dev/sdb" successfully wiped.
 Labels on physical volume "/dev/sdc" successfully wiped.
 Labels on physical volume "/dev/sdd" successfully wiped.

Создание зеркала

С помощью LVM мы может создать зеркальный том — данные, которые мы будем на нем сохранять, будут отправляться на 2 диска. Таким образом, если один из дисков выходит из строя, мы не потеряем свои данные.

Зеркалирование томов выполняется из группы, где есть, минимум, 2 диска.

1. Сначала инициализируем диски:

pvcreate /dev/sd{d,e}
  • в данном примере sdd и sde.

2. Создаем группу:

vgcreate vg02 /dev/sd{d,e}

3. Создаем зеркальный том:

lvcreate -L200 -m1 -n lv-mir vg02
  • мы создали том lv-mir на 200 Мб из группы vg02.

В итоге:

lsblk

... мы увидим что-то на подобие:

 sdd                       8:16   0    1G  0 disk
   vg02-lv--mir_rmeta_0  253:2    0    4M  0 lvm
   vg02-lv--mir        253:6    0  200M  0 lvm
   vg02-lv--mir_rimage_0 253:3    0  200M  0 lvm
   vg02-lv--mir        253:6    0  200M  0 lvm
 sde                       8:32   0    1G  0 disk
   vg02-lv--mir_rmeta_1  253:4    0    4M  0 lvm
   vg02-lv--mir        253:6    0  200M  0 lvm
   vg02-lv--mir_rimage_1 253:5    0  200M  0 lvm
   vg02-lv--mir        253:6    0  200M  0 lvm
  • как видим, на двух дисках у нас появились разделы по 200 Мб.

Работа со снапшотами

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

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

Создание для не XFS:

lvcreate -L500 -s -n sn01 /dev/vg01/lv01
  • данная команда помечает, что 500 Мб дискового пространства устройства /dev/vg01/lv01 (тома lv01 группы vg01) будет использоваться для snapshot (опция -s).

Создание для XFS:

xfs_freeze -f /mnt; lvcreate -L500 -s -n sn01 /dev/vg01/lv01; xfs_freeze -u /mnt
  • команда xfs_freeze замораживает операции в файловой системе XFS.

Посмотрим список логических томов:

lvs

Получим что-то на подобие:

LV   VG   Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
lv01 vg01 owi-aos---   1,00g
sn01 vg01 swi-a-s--- 500,00m      lv01   2,07
  • поле Origin показывает, к какому оригинальному логическому тому относится LV, например, в данной ситуации наш раздел для снапшотов относится к lv01.

Также можно посмотреть изменения в томах командой:

lsblk

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

   sdc                8:32   0    1G  0 disk 
   vg01-lv01-real 253:3    0    1G  0 lvm  
   vg01-lv01    253:2    0    1G  0 lvm  /mnt
   vg01-sn01    253:5    0    1G  0 lvm  
   vg01-sn01-cow  253:4    0  500M  0 lvm  
   vg01-sn01    253:5    0    1G  0 lvm 

С этого момента все изменения пишутся в vg01-sn01-cow, а vg01-lv01-real фиксируется только для чтения и мы может откатиться к данному состоянию диска в любой момент.

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

mkdir /tmp/snp

Монтирование не XFS:

mount /dev/vg01/sn01 /tmp/snp

Монтирование XFS:

mount -o nouuid,ro /dev/vg01/sn01 /tmp/snp

Для выполнения отката до снапшота, выполняем команду:

lvconvert --merge /dev/vg01/sn01

ПРОБЛЕМЫ и РЕШЕНИЯ:

  • - LVM volume is inactive after reboot
  • Выполнить:
vgchange -a n my_volume_group
взято тут
доп.инфо
пример stackoverflow.com

ИСТОЧНИК:


ПОЛЕЗНОЕ