Проверить степень фрагментации:
xfs_db -r -c frag /dev/mapper/root-data
Запустить фрагментацию с наименьшим приоритетом:
ionice -c2 -n7 nice -n19 xfs_fsr -v -t /mnt/data
xfs_fsr -v → включён подробный вывод, чтобы видеть прогресс.
-t → «throttle», даёт паузы между операциями, чтобы другие IO могли проходить.
Скрипт анализа количества AG
#!/usr/bin/env bash set -euo pipefail MNT="${1:-}" if [ -z "$MNT" ]; then echo "Использование: $0" exit 1 fi INFO=$(xfs_info "$MNT" 2>/dev/null) || { echo "Ошибка: не удалось выполнить xfs_info на $MNT" exit 2 } # Получаем строку data (откуда берём bsize и blocks). fallback — первая строка с 'data' DATA_LINE=$(printf "%s\n" "$INFO" | awk '/^[[:space:]]*data[[:space:]]*=/ {print; exit}') if [ -z "$DATA_LINE" ]; then DATA_LINE=$(printf "%s\n" "$INFO" | grep -m1 'data' || true) fi # Парсим значения (сначала из DATA_LINE, иначе из всего INFO) BSIZE=$(printf "%s\n" "$DATA_LINE" | sed -n 's/.*bsize=\([0-9]*\).*/\1/p') TOTAL_BLOCKS=$(printf "%s\n" "$DATA_LINE" | sed -n 's/.*blocks=\([0-9]*\).*/\1/p') [ -z "$BSIZE" ] && BSIZE=$(printf "%s\n" "$INFO" | sed -n 's/.*bsize=\([0-9]*\).*/\1/p' | head -n1 || true) [ -z "$TOTAL_BLOCKS" ] && TOTAL_BLOCKS=$(printf "%s\n" "$INFO" | sed -n 's/.*blocks=\([0-9]*\).*/\1/p' | head -n1 || true) AGCOUNT=$(printf "%s\n" "$INFO" | sed -n 's/.*agcount=\([0-9]*\).*/\1/p' | head -n1 || true) AGSIZE=$(printf "%s\n" "$INFO" | sed -n 's/.*agsize=\([0-9]*\).*/\1/p' | head -n1 || true) # Проверки if [ -z "$BSIZE" ] || [ -z "$TOTAL_BLOCKS" ] || [ -z "$AGCOUNT" ] || [ -z "$AGSIZE" ]; then echo "Не удалось получить все необходимые параметры из xfs_info. Вывод xfs_info:" echo "------------" echo "$INFO" echo "------------" exit 3 fi # Арифметика (байты) AG_BYTES=$((AGSIZE * BSIZE)) TOTAL_BYTES=$((TOTAL_BLOCKS * BSIZE)) LAST_AG_BLOCKS=$((TOTAL_BLOCKS - AGSIZE * (AGCOUNT - 1))) if [ "$LAST_AG_BLOCKS" -le 0 ]; then echo "Внимание: рассчитано LAST_AG_BLOCKS=$LAST_AG_BLOCKS (<=0). Проверьте вывод xfs_info." exit 4 fi LAST_AG_BYTES=$((LAST_AG_BLOCKS * BSIZE)) # Конвертация в мегабайты с двумя знаками to_mb() { awk -v b="$1" 'BEGIN{printf("%.2f", b/1024/1024)}' } AG_MB=$(to_mb "$AG_BYTES") LAST_AG_MB=$(to_mb "$LAST_AG_BYTES") TOTAL_MB=$(to_mb "$TOTAL_BYTES") PERCENT=$(awk -v a="$LAST_AG_BYTES" -v b="$AG_BYTES" 'BEGIN{if (b==0) print "0.0"; else printf("%.1f", a/b*100)}') echo "Mountpoint: $MNT" echo "Block size: $BSIZE" echo "AG count: $AGCOUNT" printf "Normal AG: %s MB\n" "$AG_MB" printf "Last AG: %s MB (%.1f%% of normal)\n" "$LAST_AG_MB" "$PERCENT" printf "Total FS: %s MB\n" "$TOTAL_MB" if awk "BEGIN{exit !($PERCENT < 50)}"; then echo "⚠️ Warning: последний AG меньше 50% от обычного — есть риск ENOSPC при reflink/CoW." fi
admin 25 сентября, 2025
Метки: xfs
Есть сервер с большим диском, на котором меняются данные часто. Задача перенести с минимальный простоем.
Бекапи в реальном режиме, далее переносим бекап в новое и разворачиваем.
Далее выполняем синхронизацию с помощью rsync, с опцией удаление данных которых нет на источнике и дозаписи:
rsync -arvzhP -e 'ssh -p 1234' --progress --delete root@x.x.x.x:/home/ .
Команда запускается на новом сервере в новом месте, не перепутайте.
admin 30 апреля, 2022
Posted In: LVM
dnf module list php
dnf module enable php:7.4
dnf module list mariadb
dnf module enable mariadb:10.5
admin 21 февраля, 2022
wget --no-check-certificate https://www.openssl.org/source/openssl-1.1.1m.tar.gz tar xvzf openssl-1.1.1m.tar.gz cd openssl-1.1.1m/
mkdir /opt/openssl ./config --prefix=/opt/openssl --openssldir=/opt/openssl shared zlib make make install
tar xvzf Python-3.10.2.tgz cd Python-3.10.2/
nano Modules/Setup _socket socketmodule.c # Socket module helper for SSL support; you must comment out the other # socket line above, and edit the OPENSSL variable: OPENSSL=/opt/openssl _ssl _ssl.c \ -I$(OPENSSL)/include -L$(OPENSSL)/lib \ -lssl -lcrypto _hashlib _hashopenssl.c \ -I$(OPENSSL)/include -L$(OPENSSL)/lib \ -lcrypto
export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/opt/openssl/lib
./configure --enable-optimizations --with-openssl=/opt/openssl make altinstall
/usr/local/bin/pip3.10 install --proxy "http://proxy:8080" paramiko
python3 spkg: ModuleNotFoundError: No module named ‘binascii’
build/make/Makefile.in: Uninstall setuptools before reinstalling python3
admin 26 января, 2022
Для добавления кэширующего SSD устройства выполните следующие команды:
# pvcreate /dev/sdb # vgextend vg_root /dev/sdb # lvcreate -L 16G -n cache_meta vg_root /dev/sdb # lvcreate -l 90%FREE -n cache_data vg_root /dev/sdb # lvconvert --type cache-pool --poolmetadata vg_root/cache_meta vg_root/cache_data # lvconvert --type cache --cachemode writeback --cachepool vg_root/cache_data vg_root/lv_root
Чтобы узнать текущий режим работы SSD кэша, используйте команду:
# lvs -o+cache_mode vg_root
Для смены режима, используются команды:
# lvchange --cachemode writeback root # lvchange --cachemode writethrough root
Если вам нужно заменить SSD диск, обязательно нужно удалить кэш:
# lvconvert --uncache /dev/vg_root/lv_root # lvremove /dev/vg_root/cache_meta # vgreduce vg_root /dev/sdb # pvremove /dev/sdb
Если диск совсем отвалился то
# vgreduce vg_root --removemissing # lvchange -a y /dev/vg_root/lv_root
Просмотр статистики и информации:
# lvs -a -o +devices,cache_total_blocks,cache_used_blocks,cache_dirty_blocks,cache_read_hits,cache_read_misses,cache_write_hits,cache_write_misses,segtype
Можно добавить алиас
# echo "alias lvs-cache='lvs -a -o +devices,cache_total_blocks,cache_used_blocks,cache_dirty_blocks,cache_read_hits,cache_read_misses,cache_write_hits,cache_write_misses,segtype'" >> ~/.bashrc
Скрипт статистики:
https://github.com/standard-error/lvmcache-statistics/blob/master/lvmcache-statistics.sh
./lvmcache-statistics.sh /dev/vg_root/lv_root
Для RHEL based не забываем:
dracut -v -f
или
dracut -v -f --regenerate-all
admin 21 декабря, 2021
Изменим строчку в sshd_config:
Subsystem sftp /usr/libexec/openssh/sftp-server
на
Subsystem sftp /usr/libexec/openssh/sftp-server -l INFO -f AUTH
Добавим в /etc/rsyslog.conf:
auth.* /var/log/sftp.log
Настроим ротацию /etc/logrotate.d/sftp
/var/log/sftp.log { weekly missingok rotate 30 compress delaycompress postrotate invoke-rc.d rsyslog reload > /dev/null endscript }
Рестартим сервисы:
systemctl restart sshd.service rsyslog.service
admin 25 октября, 2021
blockdev --rereadpt -v /dev/sda partprobe /dev/sda partx -u /dev/sda2. Если вдруг они не помогают, в моё случае так было. То делает жестче, отключаем диск:
echo 1 > /sys/class/block/sda/device/deleteИ потом сканируем систему заново на диски. чаще всего добавится под другим устройством, смотрите в dmesg. Был например sda, станет sdb
echo '- - -' > /sys/class/scsi_host/host0/scan echo '- - -' > /sys/class/scsi_host/host1/scan
admin 6 июня, 2021
Posted In: Linux
Берем архив бекапа в формате tar. Если в формате tar.gz, то ганзипте.
Добавляем туда файлик настроек. Его можно взять у любой существующей виртуальной машины созданной в VEManager:
tar -rvf VM.tar etc/vzdump/vps.confПапки надо создать что бы файл лежал в нужной пути.
vzdump --restore VM.tar 600Далее импортируем сервер в VEManager:
/usr/local/mgr5/sbin/mgrctl -m vemgr import.local user=2 elid=600 hostnode=12Особенности:
admin 1 июня, 2021
Posted In: CentOS, ISPSystem, Linux
Метки: centos 6, isp, ispsystem, tar, vemanager, vemgr, vzdump
Добавление диска в рейд:
mdadm --add /dev/md0 /dev/vdf1
Далее изменяем количество рейд дисков:
mdadm --grow --raid-devices=5 /dev/md0
После этого делаем изменение размера фс если у вас нет lvm:
resize2fs /dev/md0
Если есть lvm, то делаем резайз рейда:
pvresize /dev/md0
Далее расшииряем лв:
lvextend -l +100%FREE /dev/имявг/имялв
Далее расширяем уже фс:
resize2fs /dev/имявг/имялв
Если вдруг сам рейд не расширился, или вы заменили все диски на больший размер то:
mdadm --grow /dev/md0 --size=max
admin 31 марта, 2021
./qemu-system-x86_64 -L /ramdisk/share/qemu/
admin 27 января, 2021